Je veux charger mes fichiers jar OSGI à partir d'une base de données ou d'une autre source

StackOverflow https://stackoverflow.com/questions/1817214

  •  08-07-2019
  •  | 
  •  

Question

Dois-je fournir un ClassLoader personnalisé? Réfléchir à fond, cela ne semble pas être la bonne approche car, dans le chargeur de classes, on ne connaît pas la version requise.

Était-ce utile?

La solution

Étant donné que le mécanisme de chargement fonctionne essentiellement avec une URL, je suggère de: essayez un gestionnaire d'URL personnalisé. Logiquement, vous devrez le charger et l’activer avant de charger des ensembles à l’aide de ce gestionnaire, sinon je pense que cela devrait fonctionner.

Reportez-vous à la "Spécification du service des gestionnaires d'URL", Spécification principale R4 OSGi.

Glassfish utilise cette méthode pour installer offres Webapp .

Autres conseils

Une solution simple consiste à créer votre propre ensemble d'amorçage qui fournira tous les autres ensembles à partir d'une base de données (ou d'un autre emplacement). OSGi vous permet d'installer des ensembles à partir d'un InputStream arbitraire. Il devrait donc être relativement facile de le brancher sur la source de votre choix (par exemple, JDBC).

Voir BundleContext.installBundle () pour plus de détails.

Vous ne devriez pas rechercher un " rappel / quot; à travers lequel le cadre vous avertirait "lorsqu'il devra charger une dépendance requise". puisque la gestion automatique des dépendances (ala Maven) ne fait pas partie de la fonctionnalité OSGi principale (bien que cela puisse être réalisé en utilisant des services tels que OBR ).

Jetez un coup d’œil au projet d’URL PAX: http://wiki.ops4j.org/ display / paxurl / Documentation

Cela démontre la séparation des problèmes de chargement d’un ensemble OSGi et de son stockage. En théorie, je ne vois pas d'obstacle majeur à l'utilisation d'une base de données comme magasin de bundles, même si je ne vois pas non plus d'avantages évidents.

En ce qui concerne les versions des ensembles, vous avez besoin d’un mécanisme permettant d’identifier les ensembles (et les versions) à charger. Vous stockeriez les ensembles dans la base de données avec les informations de version, sinon, comment stockeriez-vous différentes versions du même ensemble?

Vous pouvez toujours les télécharger depuis une base de données (ou autre) dans un emplacement local, puis les installer de manière dynamique dans la structure OSGi. Tout ce que vous avez besoin de donner au framework est le chemin du système de fichiers du paquet. Bien sûr, vous devrez écrire tout le code de la colle pour cela vous-même. D'autre part, si vous utilisez Eclipse P2, vous bénéficierez peut-être d'une plus grande flexibilité grâce au provisionnement automatisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top