web-dev-qa-db-fra.com

Java choix du framework de plugin

Nous essayons de déterminer comment implémenter un framework de plugin simple pour un service que nous implémentons qui permet de "brancher" différents types de calculatrices.

Après avoir lu un nombre de messages sur Java, il semble que les options les plus courantes sont:

OSGI semble être plus que ce dont nous avons besoin.

"Rouler le vôtre" est ok mais ce serait bien de réutiliser une bibliothèque commune.

Nous en sommes donc au JPF et JSPF. JPF ne semble plus être en développement actif.

JSPF semble très simple et vraiment tout ce dont nous avons besoin. Mais je n'en ai pas beaucoup entendu parler. Je n'en ai vu qu'un post sur StackOverflow à ce sujet. Quelqu'un d'autre a-t-il une expérience avec JSPF? Ou tout autre commentaire sur ce choix de conception?


Mise à jour : Il n'y a pas nécessairement une bonne réponse à cela .. mais nous allons suivre l'idée de Pavol car nous avons juste besoin d'un très, vraiment solution simple. Merci EoH pour le guide de Nice.

59
Marcus Leon

Si vous prévoyez d'avoir un (ou seulement quelques) points d'extension pas très complexes, alors peut-être un SPI et un morceau de configuration bien définis peuvent être suffisants. Pas besoin d'utiliser un framework de plugin.

Par morceau de configuration, je veux dire un mécanisme pour trouver vos plugins. Par exemple, quelque chose comme META-INF/services/ ou simplement listant vos plugins dans un fichier de configuration.

Plus de détails (sur demande):

SPI = Service Provider Interface , un "équivalent côté mise en œuvre d'une API". Pour en savoir plus, essayez de rechercher une différence entre l'API et le SPI. Cependant, dans ce contexte, ce n'est qu'un terme de fantaisie pour qu'une interface soit implémentée par vos plugins (c'est-à-dire définit le contrat pour vos plugins).

Un bel article court " Création d'une interface de fournisseur de services " par Ethan Nicholas décrit comment créer votre propre SPI de la même manière que cela se fait dans plusieurs parties du Java Plate-forme elle-même.

META-INF/services/ peut être considéré comme une approche plus généralisée de la création de SPI. Plus d'informations peuvent être trouvées dans la section respective du spécification du fichier JAR .

29
Pavol Juhos

(Avertissement: je suis l'auteur de JSPF, alors mieux vaut prendre mon commentaire avec un grain de sel ;-)

La principale raison pour laquelle j'ai commencé avec le JSPF était parce que j'avais le même problème que le vôtre: je cherchais une solution simple pour rendre mon projet de thèse 1) extensible et 2) lui donner une structure de code plus ou moins claire.

La raison pour laquelle je n'ai pas décidé d'utiliser un framework existant était parce que la plupart d'entre eux étaient si lourds au départ, que je me suis perdu dans la lecture de la documentation et que j'oubliais presque ma tâche d'origine. Donc, selon votre déclaration

Nous essayons de déterminer comment implémenter un framework de plugin simple pour un service que nous implémentons qui permet de "brancher" différents types de calculatrices.

Je pense que vous pourriez essayer JSPF et voir jusqu'où vous en êtes en une ou deux heures.

Cependant, la décision finale dépend aussi un peu de ce que vous voulez exactement réaliser et des circonstances spécifiques.

J'ai entendu des résultats positifs d'un certain nombre de personnes qui l'ont utilisé pour structurer leurs projets ou charger des plugins dans leurs projets. D'un autre côté, je connais également une personne dans notre département qui l'a rejetée à nouveau parce qu'il ne sentait pas qu'elle se mélangeait bien avec son style de programmation.

Donc, pour répondre brièvement à votre question (et sûrement de manière biaisée), j'utiliserais

OSGi pour les projets et les équipes

  • qui sont grandes et ont beaucoup de gens qui y travaillent
  • qui justifient les frais généraux de mise en place de l'infrastructure
  • ayant besoin des services spécifiques offerts

JPF pour les projets et les équipes

  • de taille moyenne (?, honnêtement, je ne suis pas sûr de la taille du projet/de l'équipe qu'ils ciblent)
  • qui ont besoin d'installations plus structurées pour organiser leur code, comme les configurations XML, la gestion détaillée du cycle de vie des plugins, les plugins extensibles ...

JSPF pour les projets et les équipes

  • de petite taille, suivant un paradigme agile
  • qui ont juste besoin de quelque chose qui fonctionne hors de la boîte, sans avoir besoin de configurations ou d'installation
  • prêt à sacrifier certaines fonctionnalités pour plus de simplicité

J'espère que vous trouverez le framework de plugins le plus adapté à votre scénario. Et, peu importe ce que vous essayez, je serais heureux d'entendre vos résultats.

43
EoH

Si vous avez besoin d'une solution vraiment simple, essayez jin-plugin . C'est un framework de plugin minimaliste pour Java et PHP.

2
Faz