2009-07-31 12 views
9

Ich verwende JPA-Persistenz für meine Datenmodelle mit Eclipselink als Persistenzanbieter. Ich habe eine modulare Anwendung (OSGi) und eines der Module enthält das Standarddatenmodell und eine Persistenzeinheit, die automatisch alle Entitäten aus dem Paket enthält. Der Persistenzanbieter befindet sich in einem anderen Modul, das gut funktioniert.Wie kann ich Persistenzeinheiten aus verschiedenen JARs zusammenführen/erweitern?

Jetzt möchte ich ein drittes Modul, um einige Einheiten der Persistenzeinheit hinzuzufügen. Wie mache ich das? Ich habe this solution gefunden, was spezifisch für Spring ist, die ich nicht verwende. Die Zusammenfassung dieses Ansatzes besteht darin, einen Postprozessor zu schreiben, der sich in die Verarbeitung der Persistenzeinheit einklinkt und die <class> Einträge aus den persistence.xml Dateien manuell zusammenführt.

Ist es möglich, Persistenzeinheiten zusammenzuführen? Kann jemand eine Abhilfe vorschlagen?

+0

Sollen alle drei Module in einem .ear sein? –

+0

Nein, jedes Modul ist eine JAR, die dann in einen OSGi-Container geladen wird (in meinem Fall Apache Felix). Eclipselink befindet sich entweder in einer eigenen JAR oder in einem der Module und scannt sichtbare Pakete für persistence.xml-Dateien. Das funktioniert gut. –

Antwort

5

Erstens, hier ist ein Link auf Dynamic-JPA sie bieten eine Möglichkeit, Entitäten dynamisch zu aktualisieren. Ich würde diese Option zuerst erkunden.


Dies ist ein weiterer Link ( PDF) von OSGi es mit Ausdauer und die EntityManagerFactory ein paar Top-Level-Diagramme zu tun sind, die nützlich sein können.


ein interessanter Ansatz kann aber

Hier ist ein Link auf creating persistence units programmaticly ohne eine persistence.xml Datei (die Sie nicht wirklich tun, aber die Antworten bieten einen kleinen Einblick auf das Problem nicht verwandt sein). philk bietet einen Vorschlag zum Entfernen des Providers aus der Datei persistence.xml. Wenn Sie dieser Methode folgen, können Sie Ihre Entitäten möglicherweise zu einer bestimmten Persistenzeinheit kombinieren.

„Nun, in den guten alten Zeiten von Hibernate konnte ich erstellen Sie einfach eine Sitzung und meine Klassen, um es im laufenden Betrieb hinzufügen. Es scheint, dass es nie in SUNs JPA Spezifikationen gemacht. Allerdings habe ich komplett den Anbieter von der entfernt persistence.xml und handle es zu EL mit den Eigenschaften des EMF.Dieses scheint ok zu funktionieren.Das einzige, was in der persistence.xml übrig ist, ist die Spezifikation der Klassen.Ich denke, es wäre nicht zu schwer zu belichten die Methode , die den Klassennamen in EL analysiert und den ClassDescriptor dafür erstellt als öffentliche Methode des EL JPA Providers. "

Schließlich kommen wir zur hackish-Lösung, die bereits vorgeschlagen wurde, bearbeiten Sie einfach Ihre persistence.xml-Dateien nachträglich. Ich glaube, das würde funktionieren (obwohl ich es nicht versucht habe), aber es ist definitiv eine Option.

Verwandte Themen