2009-10-30 8 views
2

J'ai un projet que je suis en train de se convertir à OSGi. Cependant, ce projet a été construit avec Guice comme gestionnaire d'injection de dépendance. C'est un grand projet avec Guice entrelacé tout au long. Guice m'a donné de nombreux ajustements avec le processus de conversion. Spécifiquement, il m'a été donné une NoClassDefFoundError pour com.google.inject.internal.cglib.reflect.FastClass. J'ai vérifié que rien n'est paquet-privé et j'ai aussi téléchargé et utilisé le fichier guice-2.0-customloader.jar. Toujours, en vain.Utilisation de Guice avec OSGi

Y at-il des conseils de quelqu'un qui a suivi cette voie? Il est à noter que j'utilise peaberry pour obtenir des services dynamiques de l'environnement OSGi (pour une architecture de type plugin) que j'utiliserai ensuite dans le programme.

Merci beaucoup, Steve

+0

qui exécution OSGi utilisez-vous? – basszero

Répondre

4

Difficile à dire exactement quel est le problème, les problèmes de classloader peuvent être situation très particulière dans OSGi et difficile à déboguer.

Si Guice est vraiment un noyau à votre application, il peut être judicieux de faire un faisceau de Fragment du faisceau système. System Bundle est le nœud racine de l'arborescence du chargeur de classe pour TOUS les bundles. 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) en tant que bundles OSGi. Ils doivent être au niveau racine puisque tous mes bundles utilisent Swing (en particulier le chargeur de classe Swing)

Vous devez vérifier les spécifications OSGi pour créer un ensemble de fragments et faire de ce fragment un fragment d'extension de structure. J'ai seulement été capable de faire cela en utilisant Equinox d'Eclipse. Au moment 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 ne sais pas sur les cadres (knopplefish, ressort dm)

4

Il suffit d'utiliser Peaberry. Il a tout le soutien dont vous avez besoin pour utiliser Guice dans OSGi. Pas besoin de tout réinventer à partir de zéro!

0

Vous pouvez essayer mon dernier correctif pour Issue 343 - vous trouverez ci-joint une version fraîchement patchée qui est le dernier tronc Guice plus ce patch, afin que les utilisateurs puissent l'essayer et donner leur avis. Le dernier correctif évite beaucoup de ces exceptions CGLIB sans vous obliger à rendre public les classes, et fournit également un meilleur message d'erreur dans les quelques endroits restants où cela est encore nécessaire (essentiellement lorsque vous utilisez explicitement l'interception de méthode).