# RCP mit Datenbankanbindung



## mad-din (2. Dez 2008)

Hi Leute!

Ich baue gerade meine erste RCP-Anwendung und würde die gerne an die Datenbank mittels JPA und Hibernate anbinden. Mein Problem dabei ist, wie ich das am elegantesten löse. Generell wäre doch die Vorgehensweise, die Connection beim Start der Anwendung zu öffnen und dort auch gleich eine neue Transaktion zu öffnen. Bei jedem Klick auf Speichern wird dann ein commit gesendet. Nur, wo erzeuge ich dann die Anbindung? In der Application-Klasse oder besser in der ApplicationWorkbenchWindowAdvisor? 
Meine Überlegung war, dass ich mir ein Singleton schreibe, was die Datenbankverbindung hält und diese als static in der Application hinterlege. Damit kann ich dann auch in der gesamten Anwendung via Application.getEntityManager() darauf zugreifen. Ist das sinnvoll? Was ist so die gängiste Methode dafür?

Danke & viele Grüße
Martin


----------



## dzim (2. Dez 2008)

Hm. Also wenn ich auch schon ein paar Monate mich mit RCP beschäftige ist das auch von mir so ein Problem. Ich hab es mit lokalen Modellen - wohin soll ich sie legen?
Die Eclipse 3.4 Template für neue Plug-In Projekte haben jetzt im Activator immer eine statische getDefault()-Methode für das Plug-In.
Nach einigem Hin und Herr (ich hatte es auch mal in der Application-Klasse) habe ich mich daran gewöhnt - in der Hoffung, das das ok ist...

btw - wie kompliziert ist es Hibernate o.ä. einzubinden? Ich hab mal vor längerer Zeit mit Hibernate im JBoss gearbeitet und fand es eher gewöhnungsbedürftig... Damals... Allerdings ist abzusehen, das unsere DB-Anbindung per JDBC (kein Witz!) abgelöst werden muss.


----------



## mad-din (2. Dez 2008)

Hi!

Also ich fand Hibernate anfangs auch sehr gewöhnungsbedürftig. Die ganzen Mappings anlegen und die Verwendung an sich, war am Anfang schon recht kompliziert. Dafür überwiegten für mich aber die Vorteile. Aber mit der neuen JavaPersistenceAPI ist es schon sehr simpel geworden, gerade die Annotations  :applaus: Ich muss nur noch eine XML-Datei anlegen und meine Entitäten in JavaKlassen packen, die Annotations dazu und schon kann ich damit arbeiten. Soviel dazu 

Wofür ist diese getDefault()-Methode denn gedacht? Grundsätzlich wäre das sicherlich eine Möglichkeit, schreckt mich aber noch bisschen ab. Ich hab momentan Hibernate, LOG4J und die Datenbanktreiber jeweils in ein eigenes Plugin gepackt und die zu meiner Anwendung hinzugefügt. Damit sind schonmal die Klassen vorhanden. Am besten wäre natürlich, wenn ich jetzt in dem Hibernate-Plugin gleich die Datenbankverbindung herstellen kann. Dann würde die Verbindung wirklich mit Aktivierung des Plugins hergestellt werden. Ist dafür die getDefault()-Methode zuständig? Frage ist dann natürlich auch, wie greife ich in meiner Anwendung auf diese Verbindung zurück? ???:L 

Viele Grüße
Martin


----------



## Wildcard (2. Dez 2008)

Ich würde mir überlegen solche Dinge die Connection, oder den Connection Manager als OSGi Service zu registrieren. Das lässt sich zum Beispiel tun, wenn der Activator initialisiert wird.


----------



## byte (2. Dez 2008)

Datenbankzugriff in DAO-Schicht kapseln. DAO-Zugriff in Serviceschicht kapseln (die Services kümmern sich ums Transaktionshandling). Den ganzen Kram dann in ein Bundle auslagern + die Services per OSGi registrieren (siehe wildcard).


----------



## mad-din (2. Dez 2008)

Aber so wie ich das sehe, betrifft das mit OSGi ja nur verteilte Systeme. Wenn man sich jetzt aber nicht in einem verteilten System befindet oder gar nur mit dem Eclipse-Framework arbeitet und nicht mit OSGi, wie erzeugt man dann den Datenbankzugriff?


----------



## byte (2. Dez 2008)

Den Fall hab ich grade beschrieben.


----------



## Wildcard (2. Dez 2008)

Eclipse basiert auf OSGi. OSGi hast du immer wenn du Eclipse PlugIns schreibst.


----------

