2010-07-13 5 views
8

Je voudrais découvrir toutes les implémentations d'une interface lors de l'exécution d'une application Java, et charger les classes dynamiquement à partir de fichiers JAR que l'utilisateur peut ajouter à un dossier. C'est un système de plug-in, essentiellement.Simple Service Discovery Java cadre

J'ai trouvé quelques solutions pour cela:

  • Utilisez SPI - ce n'est pas très flexible: Je voudrais quelque chose qui fonctionne peut-être avec des annotations, ou juste pour une regarde interface qui est prolongée, sans avoir à ajouter des fichiers texte externes, aussi.
  • utilisation Commons Discovery - ressemble à une impasse, comme la dernière version est 0.4 de en 2005
  • Utilisez Java Simple Plugin Framework. 5 minutes and it works. No XML. - cela ressemble très immature.

Existe-t-il d'autres solutions largement utilisées pour cela?

Mise à jour: Il n'y a pas besoin de séparation de code, et OSGi semble être beaucoup trop complexe pour mes besoins simples en ce moment. J'ai aussi ajouté "Simple" au titre de cette question pour clarifier mes intentions.

+0

OSGi peuvent résoudre des problèmes comme celui-ci et en plus fournit des moyens de garder des modules séparés, etc., qui seront importants si vous avez des plug-ins qui ont des dépendances sur d'autres bibliothèques. – Jesper

Répondre

4

Il est un peu lourd, mais vous devriez considérer Apache Felix ou Eclipse Equinox, les deux sont des implémentations OSGi qui sont très vivants, mais peut-être trop pour vos besoins. Cependant, c'est l'un des problèmes que OSGi est conçu pour résoudre.

0

Comme @skaffman dit, les implémentations OSGi et modernes construites sur semble être une solution parfaite. Si vous êtes sur le train en marche de Guice, pensez iPOJO, qui intègre parfaitement les annotations dans la pile de OSGi (notez iPOJO fonctionne sur toute plate-forme OSGi). Si vous êtes plus dans le train en marche XML/Spring, pensez à utiliser Blueprint.

Enfin, compte tenu JSPF, je ne partage pas votre opinon de son immaturité. Ayant collaboré un peu sur ce projet, je le trouve vraiment utile dans son domaine, car il permet une utilisation facile des plugins, sans les tracas et la séparation de classes que fournit OSGi.

+0

pourriez-vous poster un lien vers un exemple simple de JSPF? J'essaie d'utiliser ce cadre, mais je ne comprends pas vraiment comment fonctionne la fonction Options. – capovawi

0

+1 SPI - c'est léger, un peu de maintenance (les services/* fichiers texte) mais la façon dont les classloaders de Java effectuent toute "autodiscovery" ne sera pas fiable à 100%; vous pouvez réduire les tracas des fichiers texte avec un programme simple qui génère un test pour un projet/répertoire donné et/ou (je recommande) des tests que toutes les implémentations sont incluses

+2 OSGi - si vous êtes prêt à partir mi-moyens, et notez les implémentations deviennent plus légers et plus facile (au moins certains d'entre eux!)

1

Vous pouvez essayer la découverte de service de la rivière Apache (anciennement Jini)

http://river.apache.org/

Il découvre des services par un Interface à distance et télécharge le proxy pour vous, qui est localement un stub RMI.