# JPA und Eclipse RCP Anwendung mit Fragmenten



## Saxony (19. Okt 2009)

Hiho,

ich mal eine Designfrage bezgl. JPA und Eclipse RCP mir mehreren Fragmenten.

Ich habe 

1. Eine Standalone RCP Anwendung als Plug-In Project

2. Ein weiteres Plug-In Project namens DB, welche alle libs zu Hibernate, die persistence.xml und die Erzeugung des EntityManagers usw. bereitstellt. Ausserdem musste ich hier auch die Entities von 1. mit rein nehmen, damit diese von persistence.xml gefunden werden. Das war auch an sich kein Problem, da 1. und 2. immer zusammen deployed werden.

3. Nun kommt der knifflige Teil.
Zu meiner Standalone RCP Anwendung gibt es x Fragmente, welche unter Umständen ebenfalls etwas über JPA persistieren müssen.

Nun kann ich ja die Entities der Fragmente nicht mit in das DB Plugin-Project aufnehmen. Weil dann müsste dieses für jedes neue Fragment neu deployed werden und es kann auch sein, dass gar nicht alle Fragmente am Ende auch zum Einsatz kommen (ausgeliefert werden).

Wie kann ich nun Entitäten der Fragmente mit in die DB aufnehmen? Es müsste irgendwie die Möglichkeit geben, dass ich zur Laufzeit dem EntitiyManager weitere Entity Klassen zuordnen kann, wie es schon in der persistence.xml mit


```
<class>db.model.MyEntity</class>
```

gemacht wird.

Es gibt aber folgende Probleme. Die Entity Klassen der Fragmente benötigen Bibliotheken, von denene das DB Plug-In Project nichts weiß. Ausserdem möchte ich die Fragment Entities nicht mit in die Core Anwendung (DB Plug-In) fest einbauen. Somit müssen die Fragment Entities auch im Fragment bleiben. Nun könnte ich ja einfach nur die persistence.xml des DB Plug-Ins anpassen mit


```
<class>myFragment.model.MyEntity</class>
```

Dann steht aber erstens wieder etwas von einem Fragment innerhalb des DB Plug-Ins, welches zum Core der Anwendung gehört und zweitens - nicht ganz unwichtig - werden diese so angegeben Klassen gar nicht gefunden.

Wie kann ich also nun Entites von Fragmenten über die gleiche JPA Implementierung meiner Kernanwendung verwenden?

bye Saxony


----------



## maki (19. Okt 2009)

Wieso nimmst du dafür Fragmente?

Wenn  ich mich recht erinnere gibt es die Eclipse Buddy Policy, oder OSGi konform mit DynamicImport-Package.


----------



## Saxony (20. Okt 2009)

Hiho,

ich nehme Fragmente, da diese mein (Haupt)Plug-In um Views, PrferencePages usw. erweitern. Das Plug-In selbst soll aber auch ohne diese Fragmente komplett selbständig ausgeführt werden können.

Nunja auf jeden Fall habe ich gerade in dem Buch "Rich-Client Entwicklung mit Eclipse 3.3" von Daum gelesen, dass das Datenmodell zwingend in dem Plug-In liegen muss, wo auch schon die Libs der JPA Implementierung liegen - na super!

Somit werden meine Framente wohl nie die gleiche Persistenzanbindung nutzen können wie das Plug-In selbst.

bye Saxony


----------



## maki (20. Okt 2009)

> dass das Datenmodell zwingend in dem Plug-In liegen muss, wo auch schon die Libs der JPA Implementierung liegen - na super!


Naja, man kann schon dynamisch weitere Entitäten aus anderen Bundles hinzufügen (unter zuhilfenahme der oben erwähnten Mechanismen), allerdings müssen natürlich zB. die Hibernate Libs in diesen Bundles verfügbar sein.
Ich hab das damals aber nciht mit Fragmenten gelöst.


----------

