Anstatt Datenbankaktionen in vier (osgi) Bundles zu verteilen, tun alle etwas unterschiedliche Dinge. Ich möchte ein (einfaches) OSGi-Paket erstellen, das für alle Persistenzprobleme zuständig ist. Ich denke, das ist nicht so einfach, wie es sich anhört, wegen der "einzigartigen Classloader pro Bündel" Sache. Was ich wirklich schätzen würde ist, wenn jemand die Lösung (en) für diese Art von Problem kennt.
(Wenn Sie Hibernate-Anmerkungen verwenden)
Speichern Sie alle Entities-Klassenlader, wenn das Hibernate-Paket über eine mit Anmerkungen versehene Klasse informiert wird.
Dann machen Sie so etwas, bevor Sie Ihre SessionFactory erstellen.
%Vor%Es gibt zwei Möglichkeiten, das Classloading-Problem zu lösen.
Habe gerade eine interessante Methode in der Bundle-Klasse / API gefunden.
%Vor%Dies muss einige Klassenladeprobleme lösen?
Ich werde empfehlen, sich vom Laden der Buddy-Klassen fernzuhalten, da es spezifisch für Eclipse's Equinox-Implementierung ist und meiner Meinung nach funktioniert es, aber sie verstehen nicht, warum und jeder als Kumpel von allen endet sonst. Dadurch können Sie nicht mehr verstehen, wie OSGi Classloading funktioniert und welche Patterns Sie verwenden müssen (zusammengesetzte Klassenladeprogramme, Laden von Kontextklassen, OSGi-Services usw.), um damit zu arbeiten.
Wenn Ihr Persistenzbündel im Voraus weiß, welche Typen beibehalten werden müssen, kann das Bundle alle erforderlichen Pakete (Require-Bundle ist böse) importieren, die Ihre Domänenklassen enthalten.
Das Verwalten des Context-Class-Loaders (wie in der Antwort von Roger) kann Hibernate helfen, obwohl ich vorschlagen würde, etwas wie Spring dm zu verwenden, um das hinter einem OSGi-Service zu verbergen.
Hibernate unterstützt OSGi , aber es ist ein laufende Bemühungen .
Tags und Links hibernate persistence osgi