DataSource oder ConnectionPoolDataSource für Application Server-JDBC-Ressourcen
Beim erstellen von JNDI, JDBC-connection pools in einem application-server habe ich immer angegeben, die Art, wie javax.sql.ConnectionPoolDataSource
. Ich habe nie wirklich gab es viel Gedanken, wie es immer schien natürlich zu bevorzugen zusammengefassten verbindungen über nicht-gepoolt.
Jedoch, im Blick auf einige Beispiele ( speziell für Tomcat ), bemerkte ich, dass Sie angeben javax.sql.DataSource
. Weiter, es scheint, es gibt Einstellungen für maxIdle
und maxWait
den Eindruck, dass diese verbindungen werden zusammengefasst als gut. Glassfish auch können diese Parameter unabhängig von der Art der Datenquelle ausgewählt.
- Sind
javax.sql.DataSource
gebündelt in einem application-server (bzw. das servlet-container)? - Was (wenn überhaupt) Vorteile gibt es für die Auswahl
javax.sql.ConnectionPoolDataSource
überjavax.sql.DataSource
(oder Umgekehrt)?
InformationsquelleAutor der Frage Vinnie | 2011-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Tomcat hat den Apache DBCP-pooling standardmäßig für DataSources definiert als JNDI-Kontext Ressourcen.
Aus der Dokumentation
http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html#JDBC_Data_Sources
Graben Tomcat 6 Quellen offenbart, die Sie erhalten Zusammenhang Fabrik auf diese Weise (in dem Fall, wenn Sie nicht, können Sie Ihre eigenen mit Rahmen "Fabrik" - Attribut):
Und org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory implementiert javax.die Benennung.spi.ObjectFactory kümmert sich um die Erstellung der DataSource-Instanzen:
http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-dbcp/7.0.2/tomcat-dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory.java?format=ok
Sehe ich, dass Sie erstellen Sie Instanzen von org.apache.tomcat.dbcp.dbcp.BasicDataSource:
http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-dbcp/7.0.2/tomcat-dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSource.java?format=ok
Seltsam genug, dieser Klasse nicht implementieren ConnectionPoolDataSource selbst, auch nicht org.apache.tomcat.dbcp.dbcp.PoolingDataSource, dass das zurückgegeben wird intern von BasicDataSource
http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-dbcp/7.0.2/tomcat-dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/PoolingDataSource.java?format=ok
So, ich nehme an, wenn Sie konfiguriert Ihre DataSources als javax.sql.ConnectionPoolDataSource Sie auch eine benutzerdefinierte factory (es ist nur eine Vermutung, aber ich nehme an, sonst müsste man class cast-exceptions in Tomcat, da Ihre Bündelung nicht wirklich Instanzen von javax.sql.ConnectionPoolDataSource, nur javax.sql.DataSource).
Damit, Fragen zu beantworten, die über vor-oder Nachteile von bestimmten Fall sollten Sie vergleichen Apache DBCP gegen die pooling-Mechanismus in Ihre DataSource-Fabrik, je nachdem, was man Sie verwendet.
InformationsquelleAutor der Antwort mvmn
Mein Verständnis ist, dass nur den Zweck der
ConnectionPoolDataSource
zu geben, ist der Zugang zuPooledConnection
implementiert native Bündelung von JDBC-Treiber. In diesem Fall application server implementieren können verbindungen, die Bündelung der Verwendung dieser einheitlichen Schnittstelle.Wenn mit einfachen
DataSource
Anwendungsserver verwendet seine eigene pooling anstelle der nativen.Kann nicht sagen, welche Vorgehensweise am besten ist.
InformationsquelleAutor der Antwort Sergey Aslanov
Als für die Java-docs enthält:
DataSource Java 7 API
PooledConnection Java 7 API
Sodass am Ende nur verwenden DataSource und Verbindung Klassen und nie PooledConnection /ConnectionPoolDataSourcewenn Sie eine glückliche und normale Programmierer.
Wenn die Implementierung eines Application Server, dass ist eine andere Geschichte...
InformationsquelleAutor der Antwort MrJames