Hi,
hat jemand Ressourcen, aus denen ich entnehmen kann, welche Vor- und Nachteile bestimmte Connection-Pools im Zusammenspiel mit Hibernate4 haben?
Ich möchte Hibernate mit Spring und Tomcat verwenden, das könnte einen Einfluss auf die Wahl des Pools haben.
Mein erster grober Überblick sagt mir, dass ich in etwa folgende Optionen habe:
[ul][li]Nutzung eines per JNDI bereitgestellten Pools, beispielsweise dem Tomcat JDBC Pool[/li][li]Nutzung von C3P0, Hibernate bietet eine Integration von C3P0 in Hibernate[/li][li]Nutzung von Proxool, äquivalent zu C3P0[/ul][/li]Proxool scheint allerdings ziemlich alt zu sein, das letzte Update gab es laut Website vor über 5 Jahren.
Hat eine der Möglichkeiten signifikante Vor- oder Nachteile den anderen gegenüber?
Mein Favorit ist derzeit die Lösung per JNDI, aber ich weiß nicht, ob das sinnvoll ist.
Bei der Frage ob Container Managed mit JNDI oder direkt in der Webapp geht meine Empfehlung klar zu container managed. Dadurch verbirgst Du sämtliche Connectiondetails vor dem Webapp-Entwickler. Wenn Du auch das Auth über den Container machst, muss der Webapp-Entwickler z.B. nicht das DB-Passwort kennen. Habe aber auch schon mit c3p0/Hibernate direkt in der Webapp gearbeitet. Auch damit kommt man gut zurecht. Zumindest bei den beiden Pool-Implementierungen verbaust Du Dir also nichts.
Alle Szenarien waren aber eher geringlastig. Womit man in Hochlastsszenarien besser das letzte bischen Performance rauskitzeln kann, kann ich also nicht beantworten. Vielleicht kann man da Pool-Implementierungen aus weiteren JEE-/Web-Containern als Referenz nehmen. Einen wichtigen Vertreter (Tomcat) hast Du ja bereits.
Dann werde ich erstmal mit dem Ansatz des per JNDI bereitgestellten Tomcat JDBC Pools fortfahren. Falls es da dann doch Probleme geben sollte, lässt sich der Connectionpool ja ziemlich einfach austauschen.
Es hätte ja sein können, dass es (abgesehen von organisatorischen) signifikante Unterschiede zwischen den Ansätzen gibt.