Comment fonctionne L'application OSGi sur Java 9?
j'essaie de comprendre comment fonctionne L'application OSGi en Java 9 en supposant que le paquet OSGi N'est pas un module JPMS (pour autant que je sache, il n'y a toujours pas de solution que le paquet OSGi pourrait être en même temps un module JPMS pour la production). Et j'ai plusieurs questions:
- ai-je bien compris que toutes les applications OSGi seront un module sans nom?
- Si #1 oui, alors comment
Bundle.update()
fonctionne? Est-ce que bundle est rechargé dans un module sans nom?
Si Je comprendre tout de travers, veuillez expliquer les grands principes.
2 réponses
Java SE 9 garantit une compatibilité continue pour toutes les applications et bibliothèques qui s'en tiennent aux bibliothèques Java SE standard.
OSGi utilise uniquement les API Java SE publiées et continuera donc à travailler sans changement sur Java 9. Il n'interagit pas pour le moment avec les modules JPMS, ce qui sera le cas pour tous vos autres logiciels Java. À un moment donné, les groupes D'experts de L'OSGi produiront probablement une spécification d'interopérabilité entre les modules JPMS et les faisceaux OSGi, mais cette est pour l'avenir.
pour répondre À vos questions:
Oui, Les paquets OSGi seront mappés à un ou plusieurs modules "sans nom" en termes de JPMS. Encore une fois, C'est exactement comme cela que Java 9 conserve la compatibilité ascendante pour toutes vos autres applications Java.
Bundle update Fonctionne de la même manière que depuis 18 ans. Le classloader fourni pour le paquet est éliminé et un nouveau classloader créé pour charger les mises à jour classe.
OSGi utilise des chargeurs de classe pour isoler les paquets et continue de le faire sur Java 9. Puisque chaque pot est chargé par un chargeur de classe séparé, chacun se retrouve dans son propre module sans nom. Cela signifie Qu'OSGi ignore effectivement le JPMS et continue à fonctionner comme avant Java 9.