dimanche, avril 20, 2008

Blogs concernant la plateforme Eclipse RCP (mise à jour)

Ce billet a pour objectif de lister l'ensemble des Blogs en relation avec le développement de plug-ins via la plateforme Eclipse. Ce billet est une mise à jour d'un précédent.

Voici la liste des sites traitant du sujet Eclipse (news, exemples, ...)
Voici la liste des blogs personnels
Si vous avez des adresses, n'hésitez pas.

Via Google Reader, voici deux pages qui permettent de regrouper tous les sujets : Eclipse et Eclipse Perso

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • SAT (SWT Animation Toolkit) est une bibliothèque qui regroupe un ensemble d'effets visuels assez sympathiques pour la plateforme Eclipse. Une démonstration JavaWebStart est disponible.
  • Un site qui regroupe un ensemble d'article concernant le développement de plug-ins pour Eclipse.

vendredi, avril 11, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • Paperclips est une API pour l'impression du contenu des composants SWT. Le premier lien pointe sur une présentation générale et le second lien sur le site officiel.
  • Un article qui traite des Adapters employés dans la plateforme Eclipse.

vendredi, avril 04, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Java
  • Un JUG (Java User Group) a été monté dernièrement dans la ville de Tours par Christophe Jollivet. La première réunion commence le mercredi 9 avril 2008. Après une présentation des objectifs du JUG, Christophe fera une démonstration de Unitils et de Selenium, des API pour les tests unitaires et les tests d'applications web. Si vous êtes intéressés, inscrivez-vous ici.
Eclipse
  • Eclipse 3.4 M6 est sorti. Au menu des nouveautés, le nouveau gestionnaire des mises à jour appelé p2 est disponible, rendez-vous sur cette page pour le "Getting Started". Au niveau de la plateforme, un aspect intéressant est qu'il est possible de faire du cisaillement d'image (shearing) lors des transformations (exemple).
  • La page relative à la prochaine nouvelle version d'Eclipse : E4 pour Eclipse 4.

mardi, mars 25, 2008

Composants additionnels avec JFace

Un support de cours concernant des composants additionnels de JFace est disponible sur le site de Developpez.com.

Au menu de ce support de cours :
  • boîtes de dialogue
  • Wizards
  • Preferences
  • gestion des ressources.
A noter que l'étude des composants de ce cours a été faite de manière indépendante à la notion d'extension. Nous reviendrons sur cet aspect dés que les extensions auront été présentés dans un prochain support de cours.

Le support de cours ainsi que les exemples se trouvent ici : http://mbaron.developpez.com/eclipse/jface2/.


samedi, mars 22, 2008

Liens pratiques de la semaine

Cette semaine a été marquée par la conférence EclipseCon 2008. Outre les photos de la conférence, l'ensemble des sessions de la conférence EclipseCon 2008 sont disponibles. Il s'agit d'une mine d'or dans le sens où la plupart propose les pointeurs sur les supports de présentation. A noter que les supports des précédentes versions de la conférence sont également disponibles.
  • Une session traitant du sujet de la conception de plug-ins basée sur l'excellent livre Eclipse Building Commercial -Quality Plug-ins.
  • Une autre session traitant du sujet de développement d'applications RCP.
  • Un ensemble de liens relatif à Eclipse RAP : Getting started with RAP development, From RCP to RCP/RAP - Conversion and Singe-Sourcing Techniques et RAP the Web
  • Une session qui présente la manière de construire un product
  • L'annonce du rapprochement de Microsoft et de la fondation Eclipse. Deux collaborations ont été dévoilées. La première concerne un meilleur support de SWT avec Windows Vista et la seconde concerne le sous-projet Higgins (gestion d'identité numérique). Personnellement j'espère de cette collaboration que la partie OLE de SWT soit étoffée et pourquoi pas un véritable GUI Builder dans l'IDE d'Eclipse ;-)
  • Une session qui présente comment utiliser la plateforme OSGi pour développer une application Web. Il n'y a pas de supports de présentation, toutefois vous pourrez trouver des informations ici et
  • Une session sur l'utilisation de l'API JFace DataBinding qui comme son nom l'indique permet de faire du DataBinding avec Eclipse. A noter que je prépare un tutoriel sur le sujet.
  • Une session qui montre comment restructurer une application Swing en Eclipse RCP
  • Une session qui présente la manière de gérer le profil utilisateur (notion d'Activities). En cherchant directement sur le site de la société de l'orateur, des informations assez intéressantes peuvent être trouvées.
  • Le projet Babel a droit a ses sessions : session 1 et session 2
  • Une session qui concerne les points d'extension
  • Pour finir, des annonces concernant Eclipse 4 (E4) : ici et

samedi, mars 15, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine (je l'avoue, je suis un peu à la traine en ce moment ...)

Eclipse
  • Le projet Albireo en phase d'incubation fournit un framework pour faciliter le pont entre les boîtes à outils SWT et Swing. A surveiller de près ...
  • Dans le cadre du support de la fondation Eclipse aux communautés régionales, une mailing liste française a été créée. A s'inscrire dés que possible. A noter également que sur le wiki de la communauté régionale, on peut trouver de nombreux blogs de frenchys sur le sujet Eclipse très intéressant.

dimanche, mars 02, 2008

Supports de cours, debriefing

Ce billet a pour objectif de vous présenter l'avancement des supports de cours que je suis en train de rédiger.

Le cours sur les composants additionnels de JFace est terminé, il est actuellement en cours de relecture. Il devrait sortir très prochainement. Dés qu'il est prêt, je vous préviens.

Concernant la suite, je vais continuer sur la plateforme Eclipse en démarrant un nouveau chapitre : "la conception de plug-ins" puisque le premier chapitre "Boîtes à Outils" est maintenant terminé. Le premier support de cours concernera une introduction à la conception de plug-ins dont voici un plan général :
  • Eclipse et OSGI (OSGI c'est quoi, les grands principes [bundle = plugin, gestion des plugins, cycle de vie des plugins, services exposés, ...])
  • Un simple plug-in (création d'un projet plug-in, analyse du code généré, une vue rapide sur PDE, création d'un Product)
  • Structure d'un plug-in (squelette d'un plugin, manifest.mf, plugin.xml, classe Activator, gestion de l'environnement d'exécution)
Pour la suite des cours concernant le chapitre conception de plug-ins, je vais essayer de découper plus finement les sujets. L'idée est d'être plus précis sur un sujet et d'éviter d'avoir des documents de grandes tailles traitant de concepts différents.

Pour les autres supports de cours, deux sujets m'intéressent particulièrement en ce moment : Wicket et Flex. Par contre, je ne peux pas m'avancer sur une date de sortie ...

mercredi, février 27, 2008

Exécuter du code natif en Java : JNI VS JNA

Un article traitant de l'exécution de code natif en Java a été diffusé sur Developpez.com. J'ai écrit cet article en collaboration avec Frédéric Martini (connu sous Developpez sour le nom de adiguba) qui initialement avait posté un billet sur ce sujet. Il s'agit donc d'une version plus étoffée.

Je tiens à signaler qu'il s'agit de ma première contribution en tant que rédacteur de tutoriel, j'ai plutôt l'habitude de poster des supports de cours.

vendredi, février 22, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • Le projet Babel récemment ouvert par la fondation Eclipse permet de participer à la traduction d'Eclipse pour la version 3.3. D'un point de vue technique la traduction est obtenue à l'aide des fragments qui permettent d'enrichir un plugin existant
  • Une liste de raccourcis clavier pour Eclipse concernant la version 3.3. A noter que l'auteur prévoit de mettre à jour la liste pour la version 3.4 d'Eclipse, à surveiller donc ...
  • Une introduction au développement de plug-in d'Eclipse, première partie, à surveiller également ...

samedi, février 16, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • Un lien qui explique comment configurer son environnement Eclipse (de la gestion de la mémoire à la gestion du démarrage)
  • Un moteur de recherche sur les ressources Eclipse
  • Un lien qui décrit comment utiliser le fullScreen (nouveauté de la 3.4) dans une application RCP

dimanche, février 10, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • Eclipse 3.4M5 est sortie. De nombreuses modifications ont été apportées. Hormis les apports intéressants liés au JDT, j'ai retenu principalement deux évolutions majeures concernant la plateforme. La première est liée à la possibilité de définir des composants non rectangulaires (exemple). La seconde permet enfin de générer une image d'un Control donné et cela sur toutes les plateformes supportées par Eclipse !!!
Java
  • Le projet Flamingo fournit un ensemble de composants graphiques supplémentaires pour la boîte à outils Swing (explorer de fichiers à la Vista MAC OS X, barre d'outils (Ribbon) à la Office 2008, ...)

vendredi, février 01, 2008

Nouvelle version de l'introduction à la plateforme Eclipse RCP

La mise à jour des supports de cours re-démarre en cette nouvelle année.

Je vous propose dans ce billet une évolution de l'introduction à la plateforme Eclipse RCP.

Au menu des nouveautés deux sous parties ont été ajoutées.

Le plan général est le suivant:
  • Eclipse n'est pas qu'un IDE Java
  • Vers le "Bureau Métier" avec Eclipse RCP
  • Outils pour développer des applications Eclipse RCP
Vous trouverez le cours ici.

dimanche, janvier 27, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Java
  • Transitions est un projet qui fournit une bibliothèque d'effets de transitions entre deux BufferedImages.
Eclipse
  • Une page issue de l'aide fournie par Eclipse qui liste tous les arguments et les propriétés systèmes pour une application Eclipse RCP.

samedi, janvier 19, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Eclipse
  • UFace est une API universelle qui permet de développer des IHM pour tout type de plateforme telle que le Web via GWT ou Java via Eclipse ou Swing. A voir maintenant quel GUI Builder sera utilisé pour supporter cette nouvelle API.

dimanche, janvier 13, 2008

Déployer une application SWT/JFace via Java Web Start

Depuis le début de ce blog, un ensemble de démonstrations ont été fournies et malheureusement pour les tester il fallait télécharger les sources et les compiler dans son environnement préféré.

De manière à tester directement les démonstrations, j'ai décidé de les déployer via Java Web Start (voir mon cours sur le sujet Java Web Start).

Je vous présente ci-dessous la démarche à suivre pour déployer une application "pure" SWT/JFace. A noter que le déploiement d'une application RCP (qui viendra lors de la diffusion du cours) est expliquer ici.

Démarche en plusieurs étapes (à automatiser via une tâche ANT) appliquée sur la démonstration "Astuce du Jour" en SWT. A noter également qu'une description plus complète via un tutoriel est proposée sur le site de Developpez.com (Comment déployer une application SWT via Java Web Start).

Exporter dans un JAR le projet à déployer
  • A partir d'Eclipse IDE, exporter le projet à déployer dans une archive JAR
  • Ne pas inclure les bibliothèques dépendantes
  • Définir la classe principale dans le fichier MANIFEST.MF (option Main-Class). Exemple, Main-Class: eclipse.swt.SWTTipOfTheDay.SWTTipOfTheDayTest
  • Définir le class path des bibliothèques utilisées (option Class-Path). Exemple, Class-Path: swt.jar, jface.jar
Signer tous les JAR
  • Signer le JAR généré (swttipofthedaydemo.jar)
  • Signer tous les autres JAR (swt.jar). Il se peut que certaines bibliothèques soient déjà signées. Pour éviter tous problèmes relatifs à des incohérences de signature (erreur de type : Les ressources JAR définies dans le fichier JNLP n'ont pas été signées à l'aide du même certificat), je n'ai pas trouver d'autres moyens que de supprimer les signatures déjà présentes. Dans le cas de la bibliothèque SWT, la suppression des fichiers avec l'extension SF et RSA du répertoire META-INF a été suffisant.
Décrire le fichier de déploiement JNLP
  • Décrire dans un fichier JNLP, le déploiement Java Web Start du projet
Déployer les fichiers sur un serveur WEB
  • Déposer le fichier JNLP, le JAR signé de la démo et toutes les bibliothèques JAR signées sur un serveur WEB.
Vous pouvez tester le résultat via la démo de SWTTipOfTheDay.

vendredi, janvier 11, 2008

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Java
  • Le sous projet DJ Native Swing du projet DJ project permet de mixer des composants natifs avec Swing. DJ Native Swing se base sur l'API SWT. Les exemples présentés montrent comment embarquer un navigateur WEB (en fait le composant SWT Browser de SWT) dans une application Swing.
Eclipse

samedi, janvier 05, 2008

Composant "Astuce du jour" en SWT

Après plusieurs recherches infructueuse d'une boîte de dialogue "Astuce du Jour" pour Eclipse, il ne restait plus qu'une solution, le développer ...

Ce billet présente donc le composant "Astuce du jour" codé avec la boîte à outils SWT. Son développement est fortement basé sur le code proposé par la bibliothèque SwingX qui étend la boîte à outils Swing.

Toutefois comme SWT ne gére pas les "Look and Feel" à la manière de Swing, une seule interface graphique est proposée. Une capture d'écran du résultat est proposée ci-dessous.


Les fonctionnalités proposées sont les suivantes :
  • Sauvegarde la possibilité de désactiver l'ouverture de la boîte de dialogue "Astuce du Jour"
  • Internationalisation de la boîte de dialogue "Astuce du Jour"
  • Look and Feel proche de celui de Windows
  • Les astuces peuvent être de type text/plain ou Composite
Les fonctionnalités qui ne sont pas encore proposées :
  • Les astuces au format text/HTML. Une tentative a été tentée en utilisant le composant SWT Browser. Toutefois à la première initialisation du composant, c'est-à-dire à l'ouverture de la boîte de dialogue, il se passe un certains temps de chargement dû au moteur de rendu (IE ou FireFox).
Les sources complètes sont disponibles ici

La démonstration Java Web Start de SWTTipOfTheDay

Liens pratiques de la semaine

Je profite de ce billet pour vous souhaiter à toutes et à tous une excellente année 2008.

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées cette semaine.

Divers
  • Un historique très bien réalisé concernant les différents SGBDR (Système de Gestion de Base de Données Relationnelle) depuis 1970 (Developpez.com)
PS : en ce moment, c'est assez calme au niveau des nouveautés ...

dimanche, décembre 23, 2007

Communication bidirectionnelle entre application Eclipse RCP et page HTML

Depuis peu je m'intéresse à la bibliothèque DWR qui permet de cacher les niveaux XMLHttpRequest et d'appeler, du côté JavaScript, des méthodes Java très facilement comme si elles étaient présentes dans le navigateur (voir précédent billet). Avec DWR, il est donc possible de communiquer du client vers le serveur (pull client) mais également du côté serveur vers le client (push server).

L'objectif de ce billet est de vous présenter un premier prototype qui utilise les deux types de communication de manière à réaliser une communication bidirectionnelle entre une page html et une application RCP.

De manière synthétique voici le fonctionnement général de ce prototype.

Côté client léger
Une page HTML classique est utilisée contenant un champ de texte et un bouton. Lors de la saisie puis de la validation sur le bouton, le contenu via DWR est envoyé du côté serveur.

Client lourd
Une application RCP propose une vue contenant un composant Browser (pour diffuser l'application web précédente), un champ de texte et un bouton de validation. Lors de la validation la donnée du champ de texte est envoyée vers la page HTML et affichée dans le champ de texte de cette page. L'application Eclipse RCP embarque un serveur d'application Jetty de façon à déployer l'application web contenant la page HTML et la librairie DWR.


Ce prototype met en avant plusieurs points techniques que nous détaillons dans la suite de ce billet.

Code de l'application RCP
L'idée est de pouvoir démarrer un serveur d'application au travers d'une application Eclipse RCP, voir code ci-dessous.
class ServerThread extends Observable implements Observer, Runnable {
private String value;

public ServerThread() {
new Thread(this).start();
}

public void run() {
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(Integer.getInteger("jetty.port", 8080).intValue());
server.setConnectors(new Connector[] { connector });
webapp = new WebAppContext();
webapp.setAttribute("desktopandweb", this);
webapp.setContextPath("/");
webapp.setWar("c:\\javaee.dwr.clientside");
server.setHandler(webapp);
try {
server.start();
server.join();
} catch (Exception exception) {
exception.printStackTrace();
}
}

public void setValue(String value) {
this.setChanged();
this.notifyObservers(value);
}

public void update(Observable observable, Object param) {
value = param.toString();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
View.this.myText.setText(value.toString());
}
});
}

Pour simplifier, j'ai placé arbitrairement l'application web à déployer à la racine du lecteur C. Par ailleurs, le serveur est démarré dans un processus différent de celui du thread principal de l'application RCP. A ce stade pour accéder à l'application Web lors de l'exécution de l'application RCP, il suffit de modifier l'URL du composant Browser à la valeur http://localhost:8080

La communication entre l'application RCP et l'application Web est obtenue au travers du contexte de l'application Web. En fait, l'instance courante de ServerThread est placée comme attribut du contexte (nom de l'attribut : desktopandweb). De cette manière du côté de l'application Web, il suffira de récupérer l'instance de la classe ServerThread pour réaliser un pont de communication entre les deux applications. Par ailleurs comme l'application Web ne peut connaître la classe ServerThread, puisqu'elle est localisée dans l'application RCP, nous utilisons l'API Observer/Observable comme service de communication.

Ainsi, l'application RCP est à la fois Observable et Observer. Elle est Observable puisqu'elle peut notifier ses Observers (en l'occurence l'application Web) que des modifications ont été réalisées de son côté. Elle est Observer puisqu'elle est notifiée de changements via un Observable (en l'occurence l'application web). Comme vous vous en doutez, l'application Web est également Observer et Observable. Lorsque l'application RCP est notifiée de changement, la méthode update est déclenchée. La nouvelle valeur à afficher dans le champ de texte de l'application RCP est passée en paramètre.

Code de l'application Web
Du côté de l'application Web à déployer une classe Java (ClientSide) sert de relais entre la page HTML et l'application RCP. La communication entre cette classe Java et la page HTML est obtenue via DWR (pull client et push server). Le code ci-dessous présente la classe ClientSide.

public class ClientSide extends Observable implements Observer {
private WebContext wctx = null;
private static final Log log = LogFactory.getLog(ClientSide.class);

public ClientSide() {
wctx = WebContextFactory.get();
Object tt = wctx.getServletContext().getAttribute("desktopandweb");
if (tt instanceof Observable) {
log.info("Observable trouvé");
Observable tto = (Observable) tt;
tto.addObserver(this);
}

if (tt instanceof Observer) {
log.info("Observer trouvé");
Observer te = (Observer) tt;
this.addObserver(te);
}
}

public void setValue(String value) {
this.setChanged();
this.notifyObservers(value);
}

public void update(Observable observable, Object param) {
try {
String currentPage = wctx.getCurrentPage();
Util pages = new Util(wctx.getScriptSessionsByPage(currentPage));
pages.setValue("text", param.toString());
log.info("Valeur envoyée aux clients");
} catch (Exception e) {
e.printStackTrace();
}
}
}

Lors de l'instanciation de cette classe par DWR, la valeur de l'attribut desktopandweb est récupérée du contexte. Cette valeur correspond à l'instance de l'objet précédemment défini. L'abonnement entre Observable et Observer est réalisé. Nous venons de finaliser le lien bidirectionnelle entre l'application RCP et l'application Web.

Quand une valeur de la page HTML est envoyée à l'objet ClientSide (par le biais de DWR), la méthode setValue est appelée. Son objectif est de notifier tous les Observers d'un changement en passant en paramètre cette valeur. L'Observer dans ce cas correspond à l'application RCP qui va modifier le contenu de son champ de texte.

Inversement, si une valeur est modifiée du côté application RCP l'objet ClientSide est notifié et la méthode update est appelée. Dans ce cas, le champ identifé par l'id text est modifié par l'intermédiaire de la solution ReverseAjax fournie par DWR.

Code source du prototype
Le code source complet de l'application est fournie ici.

Vous devez par ailleurs installer XULRunner puisque le navigateur
utilisé sous l'application RCP est celui de Mozilla.

Perspectives ...
Ceci est un premier prototype mais l'idée générale est posée :
  1. embarquer un serveur d'application du côté client lourd
  2. utiliser DWR pour la communication entre les pages web et l'application web
  3. appliquer le Design Pattern Observer/Observable pour la communication bidirectionnelle entre application RCP et application web
Dans la prochaine itération nous tenterons d'effectuer une communication sur une page qui n'est pas localisée dans l'application Web. Nous prendrons arbitrairement une page sur Internet. L'idée est d'instrumentaliser cette page en ajoutant un écouteur sur chaque champ de texte. L'écouteur transmettra à notre application la valeur du champ lors d'une modification via DWR. L'instrumentalisation se fera en injectant du javascript via la méthode execute du composant Browser de SWT.

Si vous êtes intéressés par les aspects communication entre Desktop et Web, rendez-vous ici, plusieurs solutions sont présentées.