Artikel-Schlagworte: „Projekte“

Hibernate mit c3p0 nutzen

Donnerstag, 9. April 2009

Hibernate ICONHibernate ist eine Java-Bibliothek die zum object-relational-mapping genutzt wird. Ich benutze diese Bibliothek in einem kleinen Java-Projekt mit einer MySQL-Verbindung zum Server eines Webhosters. Bis vor einigen Wochen bin ich damit ganz gut durch gekommen. Dann wurde das Webhosting zu einem anderen Provider verlegt und ich bekam ständig Fehlermeldungen weil die Verbindung zum Server zusammenbrach.

Wie sich herausstellte ist beim neuen Provider der MySQL-Server anders konfiguriert, der Wert “wait_timeout” ist hier auf 120 Sekunden gestellt. Sobald meine Hibernate-Verbindung also länger als 2 Minuten keine Aktion ausführt, wird die Verbindung abgebrochen und eine Exception geworfen. Wie kann man das nun am elegantesten verhindern?

Es gibt einen sehr einfachen Weg dieses Problem zu umgehen, dazu wird die c3p0-Biblithek genutzt die Hibernate praktischerweise gleich in die eigene JAR integriert hat. c3p0 dient dazu einen sogenannten Connection-Pool zu erstellen. Dieser Connection-Pool soll uns aber gar nicht weiter interessieren, wer mehr zu den Vorzügen eines Connection-Pools erfahren möchte kann dies hier tun.

Um c3p0 einzubinden können folgende beispielhafte Zeilen in der hypernate.cfg.xml ergänzt werden:

<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.max_statements">50</property>

Der Vorteil von c3p0 liegt darin, dass es vor der nächsten Aktion einen Überprüfung der Verbindung durchführen kann. Dazu kann man die Konfigurationsvariable “testConnectionOnCheckout” auf “true” setzen.

<property name="c3p0.testConnectionOnCheckout">
    true
</property>

Diese Konfiguration ist allerdings sehr “teuer” da vor jeder Transaktion die Verbindung getestet wird. Deshalb wird empfohlen statt dessen “idleConnectionTestPeriod” zu nutzen, welches einen Verbindungstest nach x-Sekunden durchführt. Erweiterte Einstellungen sind mit “preferredTestQuery” und “automaticTestTable” möglich.

Da ich keine hochperformante Verbindung benötige hab ich mich vorerst nur für die testConnectionOnCheckout-Variante entschieden. Damit klappt es bis jetzt bestens.



Von Eclipse auf Netbeans-Projekte zugreifen

Mittwoch, 23. Juli 2008

Eclipse ist in vielerlei Hinsicht die optimale Entwicklungsumgebung für viele Entwickler. Denoch ist es nicht für alle Belange geeignet. Für die GUI-Entwicklung unter Java benutze ich beispielsweise wesentlich lieber NetBeans. NetBeans zeigt sich in vielen Bereichen der Java-Entwicklung ähnlich umfangreich, bringt allerdings eine Editor für GUI-Oberflächen und UML-Diagramme gleich mit. Die Plugins die man bei Eclipse dafür nutzen kann, empfand ich bisher als wenig ausgereift.

Wie kann man es nun anstellen ein Java-Projekt gleichzeitig unter Eclipse und NetBeans zu betreiben? Denn: das Implementieren der Programmlogik möchte ich weiterhin in Eclipse machen, wohingegen ich die GUI in NetBeans erstellen möchte. Cross-IDE’ing sozusagen, um hier mal ein neues Buzzword zu erschaffen ;-) .

1. Schritt – Erstellen eines Projektes unter NetBeans

Ich möchte den GUI-Editor benutzen, daher bietet es sich an NetBeans als Host-Projekt zu erstellen (bei mir kam es umgedreht zu Komplikationen). D.h. NetBeans verwaltet das Projekt, und ich greife von Eclipse nur auf bestimmt Ordner zu in die ich meinen Code schreibe. Das NetBeans-Projekt wird in meinem NetBeans-Workspace erstellt.

2. Schritt – Einbinden / Verlinken von Projektordnern nach Eclipse

Es wird ein neues Projekt in meinem Eclipse-Workspace erstellt. Nun werden Ordner die im NetBeans-Verzeichnis liegen in das Eclipse-Projekt verlinkt.

  • Rechtsklick auf das Projekticon
  • “new > Folder” auswählen
  • die “Advanced”-Felder ausklappen
  • “Link to folder in the file system” auswählen, danach den jeweiligen Ordner aus dem NetBeans-Projekt auswählen
  • den Ordnernamen noch einmal bei “Folder name:” eintragen (sollte identisch sein)
Link auf Externen Ordner in Eclipse

Link auf Externen Ordner in Eclipse

3. Schritt – Abhängigkeiten auflösen

Da in den meisten Fällen noch auf Bibliotheken von Drittanbietern zugegriffen wird, müssen diese noch in Eclipse eingebunden werden. In meinem Fall muss ich die für die NetBeans-GUI benötigte “AbsoluteLayout.jar” einbinden. Am Einfachsten geht dies indem der Ordner “dist” aus dem NetBeans-Projekt wie in Punkt 2 beschrieben verlinkt und schießlich in den JavaBuild-Path aufgenommen wird (Rechtsklick auf das Projekt > Properties > Java Build Path > Libraries > Add Jars).

Um das Projekt auch unter Eclipse korrekt zum Laufen zu bringen ist es empfehlenswert in den “Run Configurations” noch eine kleine Anpassung vorzunehmen. Hier lässt sich unter “Arguments” die “Working Directory” als das Arbeitsverzeichnis benennen. Wenn hier nicht das Verzeichnis des NetBeans-Verzeichnisses steht kann es später zu üblen Bugs kommen wenn z.B. mit dem File-Objekt auf die Festplatte zugegriffen wird.

Das Arbeitsverzeichnis wird festgelegt

Das Arbeitsverzeichnis wird festgelegt

Der umgedrehte Weg

Sollte jemand eine Anleitung für den umgedrehten Weg, also eine Eclipse-Projekt unter NetBeans haben, kann er gern einen Link in den Kommentaren hinterlassen.