>       Bonjour � tous,
>       Savez-vous s'il existe un framework Java, un tutorial ou autre qui 
>explique comment ajouter la possibilit�, pour un programme Java, 
>d'exploiter des plug-in ? L'id�e pour moi est la suivante: je dispose 
>d'une interface par l'interm�diaire de laquelle j'injecte des donn�es, 
>et je voudrais que l'utilisateur du programme puisse placer derri�re 
>une classe de son choix (sous forme d'un fichier externe, un JAR) qui 
>impl�mente cette interface afin de traiter ces donn�es. Il faut bien 
>s�r que mon programme d�tecte ces impl�mentations au d�marrage et 
>puisse les instancier � la vol�e.

Ca tombe bien, je me suis pso� la question, et j'ai eu une ou deux petites id�es assez 
facilement exploitables.
L'id�e est de pouvoir charger des classes qu'on ne connait pas, mais qui correspondent 
� une interface (type Listener) qu'on impl�mente dans le programme principal. Pour 
cela, les jars fournissent un ensemble d'outils assez int�ressants : 
la classe Manifest permet de lire un fichier Manifest et d'en tirer des informations. 
Si on suppose que ce manifest contient une ligne
DescriptorClass=org.ndx.plugin.MaClasse
o� MaClasse est une classe contenue dans le package, qui impl�mente elle-m�me une 
interface de description du package, on n'est pas loin du succ�s :
 - gr�ce � un File, on liste tous les jars contenus dans un r�pertoire "plugins".
 - une fois ces jars list�s, pour chaque jar, on lit le fichier Manifest � la 
recherche de cette fameuse DescriptorClass
 - une fois la classe connue, on la charge dans l'application (le chargement de 
classes depuis un jar se fait, je crois assez facilement, et ne n�cessite pas ici plus 
d'explications) par le biais d'un ClassLoader "s�curis�" qui va permettre d'identifier 
les op�rations permises aux plugins.
 - la classe DescriptorClass impl�mente une interface PluginDescriptor dans laquelle 
elle fournit la table des interfaces impl�ment�es avec, pour chacune, la classe 
l'impl�mentant. Comme ces interfaces sont du type Listener, il "suffit" de charger ces 
instances (c'est ce que fait la classe DescriptorClass, en l'occurence MaClasse) et de 
les enregistrer aupr�s des �metteurs d'�v�nements qui vont bien (les classes de 
l'application qui vont utiliser ces plugins) dans une classe PluginManager

Tout ce code est bien �videment celui du PluginManager, dont l'impl�mentation devrait 
�tre maintenant assez facile.

>       J'ai �tudi� le code source de programmes pluggable comme JEdit, mais 
>c'est tr�s touffu (appel � des registres g�n�raux, etc.), et je 
>m'�tonne de ne pas trouver facilement d'information sur le B-A BA de 
>ces fonctionnalit�s.
>
>       Aur�lien Mazurie

-- 
Nicolas Delsaux
Ing�nieur Java en recherche d'emploi : http://nicolas.delsaux.free.fr/previous/cv.html
"Voila bien la diff�rence entre le singe et le footballeur. Le premier a trop de mains 
ou pas assez de pieds pour s'abaisser � jouer au football."
Pierre Desproges


Répondre à