OSGi und JPA

  • Themenstarter Gelöschtes Mitglied 5909
  • Beginndatum
G

Gelöschtes Mitglied 5909

Gast
Ich habe Services die mit Entities über interfaces arbeiten. Diese Services möchte ich in ein eigenes Bundle packen.
Die Entities (und noch ein bischen mehr) sollen in einem anderen Bundle liegen,
damit ich später ggf. weitere Bundles mit weiteren Entities hinzufügen kann.

Dadurch gibt es aber ein Problem: ich brauche pro Bundle eine persistence.xml,
da ich ja die Entities eintragen muss. Dadurch habe ich dann ja verschiedene EntityManager.
Da meine Services den EntityManager brauchen, müsste ich Pro Bundle also von meinen
Services eine Instanz anlegen. Wenn ich jetzt eine Ebene drüber meine Services verwenden will,
brauche ich pro Bundle eine Service-Instanz und muss auchnoch wissen mit welcher Entity ich welchen Service verwende.
Da die Logik von den Services nicht unbedingt etwas Entity spezifisches machen (Die Entities implementieren Interface(s))
ist das natürlich äußerst unschön.

Soweit ich weiß gib es keine Möglichkeit dem EntityManager z.B. beim laden eines Bundles zu sagen
"hey hier ist noch ne Entity, Foo.class" oder sowas in der Art.

Gibt es irgendwas, das ich übersehen habe?

Meine Idee wäre z.B. mit Jaxb die verschiedenen persistence.xmls zu mergen.
Hat aber auch viele Nachteile:

- ich muss das alles selber machen
- was mach ich bei unterschiedlichen DataSources?

Hat da jemand eine Idee? Am liebsten wär mir: da haste n Bundle mit noch n paar Entities und gut ist
 
Zuletzt bearbeitet von einem Moderator:

Noctarius

Top Contributor
Das Entity Bundle stellt nur die Klassen zur Verfügung. Die persistence.xml braucht nur das Bundle welches später die Entity Klassen nutzen soll.
 
G

Gelöschtes Mitglied 5909

Gast
Dann muss ich dort aber genau die eingetragen haben die deployed sind.
Das ist nicht gerade OSGi-isch würde ich behaupten.

Vielleicht ist des kleine Bildchen Hilfreich:

db.bmp


DAOs machen nur dumm CRUD. Die High Level API macht mehr (sind diese Services) und kann ggf auch den EntityManager verwenden (rechts). Wenn ich jetzt ein Bundle mit DAO und Entity Deploye sollte im Idealfall z.b. der Rechte Service ohne weiteres Funktionieren.

Bei deinem Vorgehen müsste ich in Logik 1-n immer alle Entities in der Persistence.xml eingetragen haben.
Verstehst du das Problem? Die Daos haben noch Factories und die Services auch. Bei den Daos ist das kein Problem, wenn die persistence.xml im Entity Bundle ist, aber dann bei den Services.
Und in den Logik Bundles wollte ich nur ungern mit EntityManagern rumhantieren.
 
G

Gelöschtes Mitglied 5909

Gast
Weil ich ggf. mehrere Allgemeine und und mehrere Spezielle APIs habe und außerdem trennen möchte.

Kleines Beispiel (hat aber mit meiner Anwendung garnix zu tun)

Ich habe Produkte: Bucher, DVDs, Musik, Hifi-Kram und so weiter.

Jetzt habe ich einen Dienst der Die Sachen verkauft.

Später kommt ein Dienst dazu der manche davon ausleihen kann.

Dann kommt einer dazu der sie versteigert usw.

Hat wie gesagt mit meinem Anwendungsszenario nix zu tun, aber alles in ein Bundle zu stecken wäre nicht gut.
Der Link mit Dynamic JPA sieht gut aus, werde ich mir mal anschauen. Kannte ich noch nicht und macht anscheinend das was ich selber machen wollte.
 
G

Gelöschtes Mitglied 5909

Gast
Das ist ja echt ein scheiß. Mit dynamic-jpa gibts Classloaderprobleme, und ein Forum oder sonstiges gibts dazu nicht.
Läuft wohl darauf raus dass ich mir den EntityManager für Die jeweiligen Entities holen muss.
Damit ich nicht Pro Klasse sondern Pro Bundle einen EntityManager erzeugen muss,
kann ich das abhängig vom ClassLoader machen.

Wundert mich dass man bei Onkel google dazu so wenig findet...
 
G

Gelöschtes Mitglied 5909

Gast
Das liegt nicht dadran was ich ex oder importiert habe, sondern anscheinend daran,
dass der PersistenceProvider - ClassLoader mit den Bundles und den Libs nicht klar kommt.
Obwohl das Projekt ja auch deshalb gemacht wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K GWT nach OSGi konvertieren SOA 3
G Maven + OSGi SOA 3

Ähnliche Java Themen

Neue Themen


Oben