2010-03-16 15 views
5

J'ai lu que OSGI utilise des chargeurs de classes séparés par module, ce qui permet aux modules d'utiliser différentes versions de leurs dépendances ... tout en exécutant simultanément tous les modules de la même JVM.Comment utiliser des chargeurs de classe séparés et exécuter dans la même machine virtuelle Java? (OSGI)

Comment ça marche? Si le module A utilise la version 1 d'une dépendance et que le module B utilise la version 2, ne rencontrerez-vous pas des problèmes si le module A transmet une instance de la classe de dépendance au module B en tant que paramètre de méthode?

Je pense que le module B se bloquerait s'il attendait une interface différente à la classe de dépendance.

Répondre

5

Vous avez raison de dire que des dépendances inconsistantes peuvent causer des problèmes. OSGi évite cela en calculant la fermeture transitive de ces dépendances et en s'assurant qu'il n'y en a pas au moment de la résolution. Cela vous permet d'exposer une dépendance publique tout en ayant des dépendances internes/cachées et, par conséquent, de cacher vos dépendances d'implémentation pour éviter cela. La bonne chose est tout est donc vérifié au temps de résolution Bundle plutôt que d'obscures erreurs d'exécution. En particulier dans votre exemple, si A et B utilisent une interface incompatible, et A dépend de B, alors A échouera à résoudre avec une erreur de dépendance. Donc, il ne sera même pas capable de commencer à le passer d'un type incompatible.