Les beans t'apporteraient peut etre une solution ... C'est ce qui est mis en oeuvre dans OpenMap (http://openmap.bbn.com/), un SIG en Java. Globalement, tes plugins sont des beans qui peuvent etre ajoutes a un container (BeanContext), chacun se reconnait et s'implante grace a des evenements (arrivee, retrait ...). Dans OpenMap, une application est decrite par un fichier de proprietes qui liste tous les elements qui la composent, ceux-ci sont charges dynamiquement a l'execution. Pour le B-A BA, voir le tutorial Sun sur les javabeans, c'est pas mal fait ...
Peut-etre une piste ...
Eric
Nicolas Delsaux wrote:
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
--
__"__ Email from a friend: "CanYouFixTheSpaceBarOnMyKeyboard?"
(_.)_.)
-ooOO--(_)--OOoo---- Eric LEPICIER - EPSHOM / BREST / FRANCE ----------------