2009-09-01 9 views
2

J'ai un JAR tiers que j'ai converti en un bundle OSGI en utilisant bnd. Le code que je dois appeler l'utiliser à partir de mon propre paquet ressemble à ceci:OSGI - appels de méthodes statiques à travers des bundles

ThirdParty.setRegKey(myRegKey); 
ThirdParty thirdParty = new ThirdParty(); 
thirdParty.callMethod(); 

Ce qui semble me causer des problèmes est la première ligne - l'appel de méthode statique. En dehors du conteneur OSGI, en utilisant le fichier JAR standard, cela fonctionne correctement. À l'intérieur d'OSGI, cependant, j'obtiens une erreur à la ligne 3 indiquant qu'aucune clé d'enregistrement n'a été définie.

Y a-t-il des problèmes avec les appels de méthodes statiques à travers des ensembles comme celui-ci? C'est presque comme si le contexte statique n'était pas partagé entre les bundles.

Répondre

2

Avez-vous débogué le code? Puisque vous ne nous dites pas avec quelle bibliothèque tierce vous travaillez et que nous ne connaissons pas votre environnement complet, il se peut que les setRegKey() ou callMethod() essaient de faire quelque chose d'intelligent qui ne fonctionne pas dans OSGi. Le gestionnaire de pilotes JDBC a ce problème lorsque votre bundle importe la classe de pilote JDBC mais le gestionnaire de pilotes décide que le thread appelant de votre bundle ne doit pas "voir" la classe de pilote JDBC, il échoue lorsqu'il est exécuté dans OSGi.

2

Vous devrez peut-être exporter/importer le package contenant la classe ThirdParty. Sinon, il se retrouve dans différents chargeurs de classes pour différents paquets, donc il n'est en effet pas partagé.

La véritable méthode OSGi serait de le faire via certains services.

+0

Merci pour la clarification. Dans le manifeste du bundle 3rd party, j'ai Export-Package: com.thirdparty.package puis dans le manifeste de mon bundle, Import-Package: com.thirdparty.package. C'est ce que tu veux dire? – William

+1

L'exemple de code suggère que les importations et exportations MANIFEST sont correctes ou qu'il ne pourrait pas compiler, et le problème indiqué est un échec d'exécution sur la troisième ligne. – SteveD

+0

@William Oui. Cependant, si votre code est dans un paquet, cela ne devrait pas être le problème. – starblue

Questions connexes