Comment obtenir le chargeur de classe pour un bundle dans d'équinoxe?
J'ai lu beaucoup d'équinoxe code pour cela, mais ne peut toujours pas trouver un non-hacky façon d'obtenir le chargeur de classe pour un bundle osgi dans eclipse equinox de l'installation. Est-il un?
OriginalL'auteur Suraj Chandran | 2009-10-01
Vous devez vous connecter pour publier un commentaire.
La réponse courte (certainement pour OSGi 4.1, pas sûr de 4.2) est que vous ne pouvez pas obtenir un bundle chargeur de classe. Cependant, le
Bundle
interface expose unloadClass()
méthode et ce serait vous permettent d'écrire un chargeur de classe qui encapsule le paquet de l'API et les délégués à quiloadClass()
méthode. Ou vous pouvez gagner du temps et de l'utilisation de Spring DM deBundleDelegatingClassLoader
classe à la place.OriginalL'auteur SteveD
Dans OSGi 4.3 vous pouvez utiliser:
OriginalL'auteur Balazs Zsoldos
Le chargeur de classe d'un bundle peut être obtenu par le biais de la BundleWiring interface. Voici un bref exemple:
OriginalL'auteur tux2323
Normal de code java, vous pouvez obtenir le chargeur de classe qui a chargé un objet donné avec
Ou même juste
La même chose s'applique à l'Équinoxe, il suffit d'utiliser un objet ou d'un type qui vient de le bundle qui vous intéresse.
Si vous avez de la dépendance sur l'autre bundle, vous pouvez vous référer à l'autre classe directement (SomeType.class) osgi chargeurs de classes délégué entre les faisceaux de sorte qu'il provient toujours de l'autre chargeur de classe. Si vous n'avez pas une dépendance vous avez besoin pour obtenir le Faisceau objet (à l'aide de PackageAdmin) et Bundle#loadClass comme mentionné dans la réponse à faire.
J2SE de chargement de classe ne convient pas pour J2EE. stackoverflow.com/questions/34787419/...
Ce ne serait pas le bon chargeur de classe. Le chargeur de classe qui a été utilisé pour charger la classe Bundle en général ne sera pas la même chose que le bundle agissant comme un chargeur de classe. Un peu plus généralement, le chargeur de classes de ClassLoader.class ne sera généralement pas le même que tout chargeur de classe de l'instance. Alors que dans des environnements simples, il peut être le même, en partitionné environnements (OSGi, JavaEE), ils seront différents.
OriginalL'auteur Andrew Niefer