> 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
