J'utilise Karaf (2.4. * & 4.0. *) Depuis deux ans, dans différentes missions, et chaque fois j'ai fait face problème de mise en cache avec les ensembles d'API lorsqu'il s'agit de les désinstaller/installer.Karaf: Méthode recommandée pour désinstaller/installer le paquet de l'API, et comment éviter la résolution du paquet fantôme
Imaginons le scénario suivant:
- installer (1) Service-api/1.0.0, l'exportation com.service.api
- -je installer (2) Service-core/1.0.0 , qui importe com.service.api
- Je désinstalle service-api/1.0.0.
- J'installe (3) service-api/1.1.0, qui ajoute de nouvelles interfaces.
Le comportement différent se produit lorsque j'utilise paquet: -s installer pour installer des paquets, désinstaller pour les désinstaller:
Le -core est pas toujours arrêté. En fait, il utilise une version en cache de service-api. Je peux même voir le bundle id (1) quand je fais un import -i (2). Faire un "resolve (2)" ne résout pas le problème, seul le fait de "stopper (2)" le relance alors. Quand j'installe service-api/1.1.0, le bogue dans 3 se produit toujours et mon noyau de service utilise à nouveau l'ancien -api. Le gros problème est que si j'installe un nouveau service-soap, il utilisera le bundle (3), alors que le (2) utilise le (1), et donc il crée un conflit entre classloader.
Je ne peux trouver aucune ressource à ce sujet sur Internet, et je l'ai essayé Equinox & Felix et je ne vois pas de solution à ce problème. Est-bundle: installer le bon moyen d'installer bundle? Est-ce que l'utilisation de deploy est une meilleure solution? Bonus: Dans les spécifications OSGI, un bundle ne doit pas être désinstallé tant que toutes les références ne sont pas libérées, mais dans Karaf, le bundle se désinstalle directement. Peut-il être la cause du problème décrit ci-dessus?
Merci pour la réponse. Trouvé le document spec sur la désinstallation qui l'explique: https://osgi.org/javadoc/r4v43/core/org/osgi/framework/Bundle.html#uninstall(). –