Frage

Ich habe ein Projekt, das ich OSGi zu konvertieren versuchen. Allerdings hat dieses Projekt wurde mit Guice als Dependency Injection-Manager gebaut. Es ist ein großes Projekt mit Guice verwoben alle im gesamten Gebäude. Guice wurde gibt mir viele Anfälle mit dem Umwandlungsprozess. Insbesondere hat es sich mir eine NoClassDefFoundError für com.google.inject.internal.cglib.reflect.FastClass gegeben. Ich habe dafür gesorgt, dass nichts Paket-privat ist und ich auch heruntergeladen und verwendet, um den guice-2.0-customloader.jar. Noch ohne Erfolg.

Gibt es eine Beratung von jemandem, der diesen Weg gegangen ist? Es ist erwähnenswert, dass ich peaberry dynamische Dienste von der OSGi-Umgebung zu bekommen verwenden (für eine Plugin-Typen Architektur), die ich dann später im Programm verwenden.

Vielen Dank, Steve

War es hilfreich?

Lösung

schwer zu sagen, was das Problem ist, können Probleme sehr Classloader Situation zu debuggen spezifisch in OSGi und hart sein.

Wenn guice wirklich ein Kern Ihrer Anwendung ist, kann es sinnvoll, ein Fragment Bündel des Systems Bundle machen zu machen. Der System-Bundle ist der Wurzelknoten in dem Baum Klassenlader für alle Bündel. Wenn Klassen in diesem Paket vorhanden sind, werden sie überall zugänglich sein. Dies ist eine Technik, die ich verwendet habe, erfolgreich Swing-LAF (Substanz, Legierung, Jide) als OSGi-Bundles zu wickeln. Sie haben gotta auf Root-Ebene sein, da alle meine Bundles verwenden Swing (besonders die Swing-Classloader)

Sie wollen die OSGi-Spezifikationen für die Erstellung eines Fragmentbündel zu überprüfen und zu machen, dass Fragment eines Rahmens Verlängerungs-Fragment bündeln. Ich habe nur in der Lage gewesen, dies mit Eclipse Equinox Laufzeit zu tun. Damals habe ich die meisten der unterstützenden Klassen schrieb, hat Apache Felix noch keine Rahmenverlängerungsfragmente unterstützen. Es kann jetzt geändert haben. Ich habe keine Ahnung von Gerüsten (knopplefish, feder dm)

Andere Tipps

Verwenden Sie einfach Peaberry . Es hat all die Unterstützung, die Sie für die Verwendung von Guice in OSGi benötigen. Keine Notwendigkeit, alles von Grund auf neu zu erfinden!

Ich bin Ihre Kommentare zu der Annahme Paket-private mit dieser Seite verbunden sind auf Guice und Überbrückungsklassenlader ?

Es gibt einen Bug-Report / Patch, der auf Ihr Problem in Zusammenhang stehen können: http://code.google.com/p/google-guice/issues/detail?id=343

Haben Sie versucht, das Hinzufügen Guice und cglib zum Standard Classpath und Delegation für sie tun boot? Das würde beweisen / widerlegt Ihr Problem ist die gleiche wie auf dem obigen Fehlerbericht erwähnt.

Sie könnte meine letzte Patch versuchen, für Ausgabe 343 - nur ein frisch geflickten Build angebracht, die die neueste Guice Stamm plus dies ein Patch, so dass die Leute es versuchen können und Feedback geben.

Der neueste Patch vermeidet viele dieser CGLIB Ausnahmen ohne dass Sie Klassen öffentlich zu machen, und bietet auch eine bessere Fehlermeldung in den wenigen verbliebenen Orte, wo dies noch erforderlich ist (im Grunde, wenn Sie explizit Methode Abhören verwenden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top