Le site francophone consacré au projet Eclipse et à OSGi
 
 

 

 

(publié le 31/03/2006)

Présentation d'Eclipse RCP (Rich Client Platform)

Azureus est une des premières applications à avoir réutilisé une partie d'Eclipse (en l'occurence la librairie SWT). Ce client BitTorrent a été téléchargé à plus de 30 millions d'exemplaires depuis sa création en 2003.

(cliquer pour visualiser des captures d'écran d'Azureus)

Lors de sa création en 2001, le but du projet Eclipse était de fournir un socle pour la création d'environnements de développement.

Avec le lancement d'Eclipse RCP en 2004, l'objectif du projet Eclipse a été étendu en prenant en compte l'utilisation du framework Eclipse pour tous les types d'applications clientes. Cette évolution a été demandée par une partie de la communauté des utilisateurs d'Eclipse qui avait commencé à réutiliser des portions d'Eclipse pour le développement d'applications clientes (cf ci-contre).

Historiquement Eclipse RCP est née comme une version allégée du framework Eclipse dont auraient été otés les modules couvrant les besoins propres à la création d'un environnement de développement. Techniquement, Eclipse RCP est la base sur laquelle sont construits tous les projets Eclipse notamment l'environnement de développement Java. Cette base est conçue comme un framework utilisable pour des développements d'applications clientes dîtes riches.

 

(L'auteur de cet article est le concepteur et l'animateur de notre formation 'Développement d'applications Eclipse RCP')

 

La notion d'applications riches

Bien que les applications intranet de types 'client léger' se soient rapidement développées en entreprise il est maintenant acquis qu'elles ne peuvent couvrir 100% des besoins. Certaines applications ont des contraintes d'ergonomie, de rapidité, de complexité ou encore d'intégration aux outils bureautiques que le client léger ne peut satisfaire. Le terme 'applications riches', apparu pendant les années 90 pour marquer l'évolution par rapport aux applications accessibles par des terminaux passifs, regroupe actuellement deux grandes familles technologiques :

les applications internet riches (RIA : Rich Internet Applications), qui s'appuient sur l'utilisation d'un navigateur côté client et exploitent soit les fonctionnalités évoluées des navigateurs (DHTML comme dans la plupart des utilisations d'AJAX) soit des extensions répandues (Flash, Java...). Les applications AJAX se placent dans cette catégorie et sont une évolution concluante dans le cadre d'internet (par exemple : GoogleMaps, GoogleMail, YahooMail beta,...) mais leur généralisation en entreprise paraît délicate (productivité, maintenabilité du JavaScript et du DHTML, portabilité entre les navigateurs) et les limites liées aux navigateurs continuent d'exister (notamment les problèmes d'intégration avec les autres applications et le manque de performances pour les interfaces graphiques complexes).

les applications riches basées sur un socle applicatif à installer sur le poste utilisateur, Eclipse RCP appartient à cette catégorie qui est une évolution des architectures client/serveur (1ére et 2ème génération) des années 90. Eclipse RCP apporte des solutions aux deux problèmes principaux de ces architectures : la difficulté de distribution de l'application sur les postes utilisateurs et la forte dépendanceà des technologies propriétaires. Ces applications n'atteignent pas la facilité de distribution du client léger, mais d'une part des solutions sont proposées pour atténuer les problématiques de l'installation initiale et de la gestion mises à jours, et d'autre part ces applications proposent des avantages évidents pour l'utilisateur : réactivé, richesse et qualité des interfaces graphiques, souplesse avec la possibilité de fonctionner en mode déconnecté, intégration poussée avec les autres applications installées sur le poste.

 

 

Pourquoi Eclipse RCP ?

Deux raisons principales ont amené des utilisateurs d'Eclipse à le considérer comme socle pour des applications clientes :

la qualité d'Eclipse. L'environnement de développement Eclipse s'est notamment imposé par sa fiabilité et la qualité de ses interfaces graphiques. L'utilisation massive de l'environnement de développement Eclipse par la communauté des développeurs Java ainsi que son utilisation comme base de produits commerciaux (WebSphere Studio, SAP NetWeaver Studio...) ont permis d'éprouver le framework Eclipse.
la disponibilité en open-source du framework Eclipse.


D'autres raisons ont renforcé l'adoptation d'Eclipse dans cette optique d'applications riches :

  • la culture 'framework' des principaux contributeurs d'Eclipse dont le but initial était de fournir un framework pour faire des environnements de développement. Cette culture se traduit notamment par des efforts particuliers sur la conception, sur la définition d'API stables et sur la documentation du code. La caractéristique essentielle de la plate-forme Eclipse est sa capacité à permettre la création d'applications modulaires et extensibles.
  • le choix du langage Java qui d'une part offre la possibilité d'utiliser de nombreuses librairies (souvent en open-source) et d'autre part permet d'assurer une cohérence entre partie cliente et partie serveur (sachant que les serveurs d'applications Java sont très présents en entreprise).
  • la portabilité des applications sur les principaux systèmes d'exploitation rencontrés sur les postes clients (Windows, MacOS et Linux). Les principaux Unix sont aussi supportés.
  • la réactivité de la fondation Eclipse qui a su répondre aux attentes de la communauté en proposant Eclipse RCP et un outillage associé.

 

Des exemples d'applications basées sur Eclipse RCP sont disponibles sur le site Eclipse :
- liste d'applications open-source basées sur Eclipse RCP.
- liste d'applications commerciales basées sur Eclipse RCP.

La fondation Eclipse propose aussi plusieurs études de cas téléchargables au format PDF.

Exemple d'applications Eclipse RCP

(cliquer pour agrandir)

(cliquer pour agrandir)

(cliquer pour agrandir)

 

 

Le cadre graphique d'Eclipse RCP

 

SWT : Standard Widget Toolkit

Au moment de la conception d'Eclipse, en 1999, les équipes d'IBM ont fait le constat que les librairies graphiques Java, AWT et Swing, ne permettaient pas de produire des interfaces graphiques très réactives et parfaitement intégrées au système d'exploitation (NB : depuis Swing a beaucoup progressé en qualité). Ayant jugé que ces deux caractéristiques étaient essentielles pour un environnement de développement, ils ont fait le choix d'implémenter leur propre librairie graphique : SWT. Grâce à SWT, Eclipse a pu, dès sa première version, offrir une interface graphique qui, notamment sur Windows, n'était pas différenciable de celles des autres applications. A noter que tous les composants graphiques Windows ont un équivalent SWT et que SWT propose quelques composants spécifiques (cf. liste des composants SWT)

L'aspect natif de SWT offre d'autres avantages :

  • support des boîtes de dialogues standards de chaque système d'exploitation (ouverture d'un fichier, impression d'un document, ...).
  • possibilité d'utiliser le composant SWT Browser capable d'afficher des pages HTML en faisant appel au navigateur le plus courant de chaque système d'exploitation (Internet Explorer pour Windows, Mozilla/Firefox pour Linux ou Safari pour MacOS). Dans le cadre d'applications Eclipse RCP, ce composant peut s'avérer intéressant pour faire coopérer applications de types 'client riche' et 'client léger'.
  • support de OLE/COM sur Windows, ce qui permet une 'intégration étroite avec les applications Windows.

Le développeur d'application Eclipse RCP choisira généralement d'utiliser SWT pour bénéficier de la même qualité graphique que l'environnement de développement Eclipse. Mais il est intéressant de noter que SWT offre une solution technique qui permet de mélanger composants Swing et SWT (cf. exemple de code intégrant un composant JTable dans un composant SWT). Le développement d'une application SWT est assez similaire à celui des applications AWT et Swing : on y retrouve notamment la notion de 'layout' et le même principe de gestion des évènements.

La librairie SWT s'interfaçant avec les composants natifs, elle est constituée d'une partie de code Java commune à tous les systèmes d'exploitation et d'une partie native propre à chaque système d'exploitation. Sur Windows cette partie native, composée de trois fichiers DLL, fait à peu près 400Ko, son déploiement est complètement transparent car ces DLL sont intégrées dans un des fichiers JAR d'Eclipse.

 

JFace

JFace vient compléter SWT en proposant les fonctionnalités suivantes :

Le support du modèle MVC (Modèle-Vue-Controleur) via la notion de 'Viewer'. Les 'Viewers' JFace encapsulent des composants SWT et gèrent le lien entre ces composants graphiques et des objets contenant les données à afficher.

La notion de 'commandes' qui permet une gestion configurable des raccourcis clavier ainsi que la gestion du 'Undo/Redo'.

Des boîtes de dialogues personnalisées. SWT encapsule les boîtes de dialogue standards des systèmes d'exploitation, JFace propose des boîtes de dialogue complémentaires et simples d'utilisation. JFace propose notamment une boîte de dialogue avec barre de progression et une autre pour développer des assistants (Le developpeur implémente avec du code SWT le contenu de chaque page de l'assistant et JFace gère le reste de l'aspect graphique notamment les boutons de navigation entre les pages de l'assistant).

 

Exemple d'assistant JFace


 

 

Le 'workbench' Eclipse

L'apport le plus visible du framework Eclipse RCP et le cadre graphique proposé : le 'workbench'. Son utilisation reste optionnelle mais il est généralement une des raisons principales du choix d'Eclipse RCP. En effet en réutilisant les éléments du workbench (notions de vues, pages de préférences, boîtes de dialogues de types assistants, construction des menus par déclaration dans un fichier XML...) le développeur se voit offrir une solution de qualité couvrant les besoins de base d'une applications clientes et peut se concentrer sur les choses vraiment spécifiques à son application.

Les principales notions proposées par le workbench sont :

Les vues

Les vues sont des sous-fenêtres de la fenêtre principale du workbench. Les vues contiennent des composants SWT, le développeur a donc une complète liberté sur le contenu de chaque vue. Le workbench gère l'affichage des vues et permet à l'utilisateur de l'application de les manipuler.
Les caractéristiques de chaque vue sont configurables par le développeur (affichage d'une barre de titre, possibilité de fermer la vue, de la déplacer, de l'empiler, de la réduire, ...) Dans le cadre de l'environnement de développement Eclipse les vues sont essentiellement utilisées pour afficher des informations mais dans le cadre d'une application Eclipse RCP les vues peuvent aussi être utilisées pour faire de la saisie (il n'y a pas de contrainte technique sur les composants graphiques utilisable dans une vue).

Les éditeurs

La notion d'éditeur est naturellement centrale dans l'environnement de développement Eclipse, c'est le cas notamment de l'éditeur de code Java. Dans une application Eclipse RCP, l'utilisation d'éditeurs est intéressante mais reste facultative (la notion de vue peut s'avérer suffisante). On peut distinguer trois principaux types d'éditeurs : les éditeurs de texte (comme l'éditeur de code Java), les éditeurs de type formulaire de saisie plus courants dans le cadre des applications Eclipse RCP et les éditeurs graphiques (par exemple affichant des diagrammes).

Les perspectives

Le workbench est basé sur un principe de fenêtre unique découpée en sous-fenêtres (les vues et les éditeurs) auxquelles s'ajoutent généralement une barre de menu, une barre de boutons et une zone de status. La notion de perspective permet de proposer un agancement particulier de vues et optionnellement d'une zone d'édition.

Dans le cadre de l'environnement de développement Eclipse, les perspectives permettent d'organiser la fenêtre en fonction des tâches de l'utilisateur (Développement Java, Déboguage, ...). Une application Eclipse RCP peut utiliser le même principe, elle peut aussi ne pas exposer la notion de perspective à l'utilisateur (l'affichage de la barre de boutons de navigation entre les perspectives est paramétrable). De la même façon, le principe de fenêtre unique n'est pas une obligation pour une application RCP car le framework Eclipse n'empêche en rien l'ouverture de plusieurs fenêtres.


Exemple : utilisation de la barre de perspective
dans une application Eclipse RCP (projet SchoolClipse)

 

Les pages de préférences

Le stockage de paramétrages propres à l'utilisateur est un besoin courant. La fenêtre de gestion des préférences d'Eclipse est réutilisable dans une application RCP. Le développeur utilise SWT pour implémenter chaque page et bénéficie de la gestion par Eclipse de la navigation dans l'arbre des pages, du filtrage de cette arbre et du stockage des informations sur le disque.

 

 

La base du framework Eclipse : la notion de plugin

Le principal objectif des concepteurs d'Eclipse était de proposer un framework modulaire et extensible. A la base du framework Eclipse se trouve donc un 'micro-noyau' responsable de la gestion du cycle de vie des modules (découverte, chargement, mise à jour, déchargement…). Ces modules sont appelés 'plugins'. Le framework Eclipse est lui même entièrement découpés en plugins. C'est aussi le cas de toutes les applications basées sur Eclipse RCP.


Les plugins coopérent de deux façons :

par dépendance : un plugin peut utiliser les classes Java d'un autre plugin (sous conditions).

par extension : un plugin peut enrichir un autre plugin en déclarant une extension. La déclaration d'une extension se fait en XML. Chaque plugin peut prévoir des 'points d'extension' sur lequels d'autres plugins viendront se brancher en définissant des extensions. Par exemple le plugin qui gère la barre de menu du workbench prévoit un point d'extension qui permet à d'autres plugins de venir enrichir le menu.
La notion d'extension est centrale dans le framework Eclipse. Dans le cadre d'une application Eclipse RCP c'est le moyen utilisé pour déclarer des vues, des éditeurs, des pages de préférences, des assistants...


Chaque plugin est composé de ses propres classes Java et surtout de deux fichiers de configurations :

Le fichier MANIFEST.MF qui contient les informations permettant au micro-noyau de gérer le plugin (nom, version, liste de plugins pré-requis,...). Le format de ce fichier est décrit dans le cadre du consortium OSGi. La fondation Eclipse participe à ce consortium et le micro-noyau d'Eclipse est une implémentation conforme aux spécifications OSGi depuis Eclipse 3.

Le fichier plugin.xml qui permet d'utiliser les notions d'extension et de point d'extension. Ce fichier est propre au framework Eclipse et n'est donc pas décrit dans le cadre d'OSGi.


Les applications basées sur Eclipse RCP bénéficient directement de l'extensibilité de la plateforme et deviennent elles-mêmes extensibles de deux façons :

l'application peut être étendue simplement par l'ajout de nouveaux plugins qui complètent notamment l'interface graphique (ajout de menus, de pages de préférences, d'assistants...).

l'application peut exploiter la notion de point d'extension en proposant ses propres points d'extension sur lesquels viendront se brancher des plugins complémentaires.

 

 

Les outils pour le développement des applications Eclipse RCP

 

Le PDE : Plugin Development Environment

Le développement d'une application Eclipse RCP se fait en grande partie en utilisant l'outillage Java standard d'Eclipse (Editeur de code, débogueur...). Toutefois certaines tâches sont propres au développement de plugins ou d'applications Eclipse RCP, pour simplifier ces tâches Eclipse intègre des outils spécifiques regroupés sous le terme PDE (Plugin Development Environment). Les principales fonctionnalités proposées par le PDE sont :

un assistant de création de plugin.

un éditeur pour les fichiers de configuration de plugin. Cet éditeur permet notamment de configurer les dépendances entre plugins et il propose une assistance pour la déclaration d'extensions et de points d'extension.

un assistant pour l'exécution et le déboguage des plugins et des applications RCP.

des assistants pour l'export des plugins et des applications Eclipse RCP. Dans le cas des applications Eclipse RCP l'assistant d'export utilise les informations saisies dans un éditeur appelé 'éditeur de produit'. En utilisant cet éditeur le développeur va pouvoir préciser des points de détails qui permettent de donner un caractère professionnel à l'application, ce sont notamment le nom de l'exécutable à générer, l'icône de l'exécutable, l'icône de la fenêtre principale du workbench, l'image à afficher pendant le lancement, l'image et le texte apparaissant dans le fenêtre 'A propos de ...'.

 

Le Visual Editor

Une partie des développements d'une application Eclipse RCP consiste à créer des interfaces graphiques en utilisant les librairies SWT et JFace. Pour faciliter ce travail, la fondation Eclipse propose un constructeur d'interfaces graphiques : le Visual Editor. Cet outil est développé dans le cadre d'un sous-projet particulier. La version actuelle du Visual Editor permet de construire des interfaces graphiques SWT et prend en compte les notions de vues et d'éditeurs utilisées dans les applications Eclipse RCP.

 

 

Les autres composants utilisables dans une application Eclipse RCP

Afin de limiter la taille du framework Eclipse RCP (6Mo), les fonctionnalités intégrées de base dans Eclipse RCP sont le micro-noyau gérant les plugins et la notion de workbench. Cependant tous les composants disponibles sous la forme de plugins Eclipse sont utilisables dans une application Eclipse RCP. C'est notamment le cas des plugins qui composent l'environnement de développement Eclipse mais aussi ceux développés dans le cadre de sous-projets Eclipse ou de d'autres projets open-source.

Parmi les composants souvent utilisées dans les applications Eclipse RCP on peut noter :

La gestion de l'aide. Ce composant provient de l'environnement de développement Eclipse. A partir de fichiers d'aide écrits en HTML et d'une table des matières décrites en XML les fonctionnalités suivantes sont proposées : affichage de l'aide dans une fenêtre séparées ou dans une vue du workbench, recherche dans l'aide, gestion d'un index et gestion de l'aide contextuelle (chaque composant SWT peut être associé à une section de l'aide).

La gestion des mises à jour. Ce composant provient de l'environnement de développement Eclipse, il permet le téléchargement et l'installation de nouveaux plugins ou la mise à jour des plugins déjà installés. Il est utilisable par une interface graphique proposée à l'utilisateur de l'application ou par programmation (dans ce cas le développeur de l'application Eclipse RCP choisi quand déclencher des mises à jour).

 

D'autres composants répondent à des besoins plus spécifiques :

Le composant 'Ressources' qui provient de l'environnement de développement. Ce composant propose notamment la vue 'navigateur' qui permet à l'utilisateur de manipuler un ensemble de projets composés de répertoires et de fichiers.

Le composant 'Editeur de texte' qui provient aussi de l'environnement de développement et qui peut servir de base à tout éditeur de fichiers au format texte. Il propose notamment les mécanismes de formattage, d'assistance à la saisie, de coloration et de gestion des annotations.

GEF (Graphical Editing Framework). Proposé dans le cadre d'un sous-projet particulier, ce composant est un framework pour développer des éditeurs graphiques (affichage et manipulation de formes et de textes en deux dimensions)

 


Conclusion

Avec Eclipse RCP la fondation Eclipse propose un socle open-source solide pour la création d'applications clientes. Les applications basées sur Eclipse RCP bénéficient directement de la modularité et de l'extensibilité de ce socle. Sur le plan visuel, la notion de Worbench ainsi que les librairies SWT et JFace permettent la création d'interfaces graphiques de qualité.
Lancé en 2004, Eclipse RCP s'annonçait comme un projet prometteur, Les premiers retours d'expérience montrent qu'Eclipse RCP est une solution utilisable dès aujourd'hui. La feuille de route de la fondation Eclipse pour 2006 consacre Eclipse RCP comme étant un des objectifs majeurs de la fondation.

(L'auteur de cet article est le concepteur et l'animateur de notre formation 'Développement d'applications Eclipse RCP')

Plus d'informations :
- La page d'Eclipse RCP.
- Les news d'EclipseTotale concernant Eclipse RCP.

 


 

 

 

 


 

 

(c) EclipseTotale - contact(arobase)eclipsetotale.com