Java Persistence Framework Auswahl

antimon

Mitglied
Hallo zusammen,

nachdem ich jetzt einiges rumprobiert habe, aber noch keine für mich zufriedenstellende Lösung gefunden habe, wende ich mich hiermit hilfesuchend an auch ;)

Mein Ziel ist es, mit möglichst einfachen und performanten Mitteln auf eine (MySQL-)Datenbank in einer RCP-Umgebung zugreifen zu können. Sprich, Objekte persistieren, wieder laden und bearbeiten etc.

Dazu gibt es ja einige Frameworks, angeschaut habe ich mir Hibernate und jetzt auch EclipseLink. Was mir pauschal aufgefallen ist: Beide Frameworks brauchen relativ lange zum initialisieren (einige Sekunden) - ist das normal oder könnte das auf eine Fehlkonfiguration hindeuten? Natürlich sind die Frameworks um einiges komplexer als ein direkter Datenbankzugriff, aber macht das wirklich so viel aus? Zu persistierende Objekte sind ca. 5 angegeben, die auch nicht soo komplex sind, dass man das dadrauf schieben könnte... Gibt es in dieser Richtung evtl. schnellere, Leichtgewichtigere Alternativen zu den oben genannten?

Was mir auch so aufgefallen ist: Irgendwie habe ich das Gefühl, die Frameworks sind hauptsächlich für Webserver-Umgebungen erstellt worden, wo eine Session von sehr kurzer Lebensdauer ist. Deswegen hatte ich schon mehrfach Schwierigkeiten mit nicht mehr gültigen Sessions etc. - aber das ist ein anderes Thema. Allerdings: Wie sind da Eure Erfahrungen? Sind das evtl. Probleme, die gut in den Griff zu bekommen sind oder gibt es für RCP-Anwendungen bessere Frameworks?

Mir ist klar, dass ich keine Antwort bekommen kann in der Art: "Das Framework X ist perfekt für deinen Anwendungsfall", aber mir reicht schon eine Richtung oder Erfahrungswerte, damit ich mich besser orientieren kann. Deswegen bin ich für alle Hinweise und Erfahrungsberichte dankbar!
 

slowfly

Erfahrenes Mitglied
Hallo

Ich kann da nur von Hibernate reden, EclipseLink habe ich noch nie eingesetzt...

Ja, diese Frameworks brauchen relativ lange zum Initialisiieren. Du kannst ja mal ein einfaches DataObject während des Debuggings anschauen - da ist nichts mehr so, wie es vorher war ;-)

Mit diesen Frameworks kann man natürlich die gleichen oder zumindest ähnliche Fehler machen, wie wenn man die SQL's selber abfeuert. Also mehr Daten als nötig, zweimal ein Statement ausführen, anstatt eleganter in einem, row locks machen, obwohl man's gar nicht benötigt, etc.
Das kann eventuell noch helfen: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

Meine Erfahrungen sind, dass man sich mit solchen eigentlich ziemlich grossen und mächtigen Frameworks gut auseinandersetzen muss - ich arbeite schon lange immer wieder mal mit Hibernate, aber da kommt immer wieder mal ein "aha"-Effekt :). Man kommt zwar relativ schnell mal zu einem Ziel (Entitäten laden, manipulieren, speichern), aber es gibt halt viele Kleinigkeiten, auf welche man sich achten kann oder muss. So lazy-fetching ist zum Beispiel ein Thema. Wenn ich jetzt zwei DataObjects mit einem Join verknüpfe und ich die Daten laden, kann man es ja so laden, dass er beide Tabellen lädt, obwohl man nur eine braucht. Oder man lädt nur eine, obwohl man beide braucht und lädt die zweite dann nach.

Gruss
slowy
 

antimon

Mitglied
Danke schon mal für die Meinungen. Das MyBatis schaue ich mir mal an, vielleicht ist das was.

Mit EclipseLink habe ich leider auch schon Schwierigkeiten mit dem Persistieren von vererbten Objekten gemacht... vielleicht ist das ein Bug, aber er trägt einfach nicht die ID des verknüpften Datensatzes in die Tabelle ein - Hibernate macht das anstandslos.

Habt Ihr denn schon Erfahrungen in Verbindung mit RCP gemacht? Die Trägheit meiner Applikation kommt sicher größtenteils davon, dass wie oben geschrieben, unnötig viel Daten geladen werden... und das kommt wiederum dadurch dass ich das mit dem Lazy Loading nicht hinbekomme, weil beim späteren Laden die ursprüngliche Session nicht mehr existiert... und das liegt wohl daran dass es mehrere Threads gibt - das Problem haben wohl mehrere mit RCP, weil dort Daten über einen längeren Zeitraum geladen/gespeichert werden müssen, nicht wie bei Webseiten wo der Request nach ein paar ms wieder vorbei ist.

Wie sind Eure Erfahrungen in der Richtung? Ich will keine fertigen Lösungen präsentiert haben sondern nur wissen, ob es sich auszahlt, wenn ich mich damit intensiv beschäftige - oder ob das Vorhaben eh zum Scheitern verurteilt ist, weil das z.B. nicht vernünftig geht...
 

Neue Beiträge