OSGi: comment assurer classpath de cohérence?

Selon la OSGi documentation, OSGi est conçu pour aider à prévenir le ClassPath problèmes.

Par exemple, de "OSGi dans l'action":

ClassNotFoundExceptions lors du démarrage de votre application, car l'
chemin de classe n'était pas correct. OSGi peut aider à garantir que le code
les dépendances sont satisfaites, avant d'autoriser le code à exécuter.

Cependant, depuis que nous sommes passés de notre application java pour OSGi, je vois plus de ClassNotFoundExceptions et surtout NoClassDefFoundErrors que jamais. Les Classes qui ont été précédemment chargement fine ne sont pas plus trouvée par OSGI chargeur de classe, et le pire: vous obtenez le message d'erreur au moment de l'exécution, ce qui signifie que vous ne pouvez pas facilement vérifier, à l'exception de manuellement les tests de tous les coins de votre application.

Par exemple, notre demande était en cours d'exécution heureusement sous OSGi, mais nous avons reçu des rapports de bêta-testeurs qu'ils ne pouvaient pas exporter des documents au format PDF plus. En effet, quand j'ai regardé, j'ai trouvé que cette fonctionnalité a provoqué une exception à être connecté:

java.lang.NoClassDefFoundError: org/w3c/dom/Node

Donc, OSGi est en fait la création de plus de classpath de problèmes qu'elle n'en résout?

et plus important encore: Comment puis-je tester que mon chemin de classe est compatible avec tous les Import-Package déclarations etc. avant I lire à leur sujet dans les rapports de bug?

"sauf manuellement les tests de tous les coins de votre application" - erm tests automatisés? (la même chose s'applique à n'importe quelle application) Si vous aviez des suites de test avant d'avoir quitté la vous auriez repéré ces erreurs avant de les testeurs avaient. Pour vérifier que vos faisceaux de fils correctement, vous aurez besoin de faire quelques tests d'intégration - nous sommes à l'aide de Pax Examen et ont court tests d'intégration (ensemble actuel et de ses collaborateurs) ainsi que d'un peu plus de bout en bout tests (tests de la totalité de l'app).
Pour ceux à la recherche de ce débordement de pile lors de la recherche OSGi NoClassDefFound.... le garder à l'esprit que l'Java thread d'exécution OSGi bundle code détermine l' "active" ClassLoader aka Contexte de Thread chargeur de classe (TCCL). Les "actifs" chargeur de classe peut-être pas le chargeur de classe le conteneur OSGi crée pour l'ensemble du code. Donc, pour faire fonctionner le tout, parfois, vous devez changer manuellement le fil du TCCL.
Voir 2012. Neil Bartlett. "Le Redoutable Contexte de Thread Chargeur de Classe", blogs.paremus.com/2012/10/....

OriginalL'auteur amarillion | 2011-09-19