Question

J'ai un projet que je tente de convertir en OSGi. Cependant, ce projet a été construit avec Guice en tant que gestionnaire d'injection de dépendance. C'est un grand projet avec Guice entrelacé tout au long. Guice m'a donné beaucoup de correspondances avec le processus de conversion. Plus précisément, il m'a été attribué une erreur NoClassDefFoundError pour com.google.inject.internal.cglib.reflect.FastClass. Je me suis assuré que rien n'est privé du paquet et j'ai également téléchargé et utilisé le fichier guice-2.0-customloader.jar. Pourtant, en vain.

Quelqu'un a-t-il déjà conseillé dans cette voie? Il est à noter que j’utilise peaberry pour obtenir des services dynamiques à partir de l’environnement OSGi (pour une architecture de type plugin) que j’utiliserai ensuite dans le programme.

Merci beaucoup, Steve

Était-ce utile?

La solution

Difficile de dire exactement quel est le problème, les problèmes de chargeur de classe peuvent être très spécifiques à une situation dans OSGi et difficiles à déboguer.

Si guice est réellement un élément essentiel de votre application, il peut être judicieux d’en faire un ensemble de fragments de l’ensemble système. L'ensemble système est le nœud racine de l'arborescence du chargeur de classes pour TOUS les ensembles. Si des classes existent dans ce bundle, elles seront accessibles partout. C’est une technique que j’ai utilisée avec succès pour emballer Swing LAF (Substance, Alloy, Jide) sous forme de bundles OSGi. Ils doivent être au niveau racine puisque tous mes bundles utilisent Swing (en particulier le chargeur de classe Swing)

Vous voudrez vérifier les spécifications OSGi pour la création d’un ensemble de fragments et la transformation de ce fragment en un fragment d’extension de structure. Je n'ai pu le faire qu'avec le runtime Equinox d'Eclipse. À l'époque où j'ai écrit la plupart des classes de support, Apache Felix ne supportait pas encore les fragments d'extension de framework. Cela a peut-être changé maintenant. Je n'ai aucune idée des frameworks (knopplefish, spring-dm)

Autres conseils

Utilisez simplement Peaberry . Il offre toute l’assistance dont vous avez besoin pour utiliser Guice dans OSGi. Pas besoin de tout réinventer à partir de zéro!

Je suppose que vos commentaires sur package-private sont liés à cette page le Guice et les chargeurs de classes de pontage ?

Un rapport de bogue / un correctif peut être lié à votre problème: http://code.google.com/p/google-guice/issues/detail?id=343

Avez-vous essayé d’ajouter Guice et cglib au classpath standard et d’effectuer une délégation de démarrage pour eux? Cela prouverait / réfuterait que votre problème est le même que celui mentionné dans le rapport de bogue ci-dessus.

Vous pouvez essayer mon dernier correctif pour le numéro 343. - vient de joindre une version fraîchement corrigée, qui est la dernière malle Guice et ce correctif unique, afin que les gens puissent l'essayer et donner leur avis.

Le dernier correctif évite beaucoup de ces exceptions CGLIB sans vous obliger à rendre les classes publiques, et fournit également un meilleur message d'erreur dans les endroits restants où cela est toujours nécessaire (essentiellement lorsque vous utilisez explicitement l'interception de méthode).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top