Der Tomcat-JDBC-Verbindungs-pooling
Ich versuche zum einrichten der Verbindungs-pooling zu mysql databe mit tomcat. Meine einfache app namens Projekt, in meinem Projekt.xml in Apache/conf/Catalina/localhost habe ich
<Context docBase="Projekt.war" path="/Projekt">
<Resource name="jdbc/mysqldb"
auth="Container"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/Music"
username="andrzej"
password="qazxsw"
maxActive="20"
maxIdle="30"
maxWait="5"
/>
</Context>
web.xml meine app
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>org.jtp.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/Hai</url-pattern>
</servlet-mapping>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysqldb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
und in meinem Apache/lib Ordner habe ich
mysql-connector-java-5.1.18-bin.jar
aber wenn ich diesen code ausführen:
Context initContext = new InitialContext();
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb");
System.out.println(dataSource.getConnection().createStatement().
execute("select * from Users"));
Bekomme ich exception
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Ich bin verwirrt jetzt, in einigen Orten habe ich gelesen, dass es sein kann verursacht durch nicht platzieren driver in tomcat/lib, aber ich habe es und es funktioniert, denn wenn ich getestet habe der Fahrer mit manuellen verbindungen funktionierte es.
Für mein setup, ich habe versucht zu Folgen
http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html
BEARBEITEN:
Schließlich habe es funktioniert, es schien, dass ich hatte einige linke Kontext-tags in einer der Dateien, so dass beim Parsen er überschrieben weitere Attribute, so ist es alles meine Schuld am Ende.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht, wie Sie sind, fehlt
Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI-lookup durchgeführt werden sollte, wie diese:
Dokumentation von http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html.
org.apache.tomcat.jdbc.pool.DataSource
, oder sollte esjavax.sql.DataSource
(letzteres ist der Wert dertype
Attribut der Ressource)?javax.sql.DataSource
. Wenn Sie den Ressourcentyp alsjavax.sql.DataSource
Ihr buchstäblich sagen Ihr geht, ein Objekt zu verwenden, diejavax.sql.DataSource
.Erreichen JDBC connection pooling mit Tomcat, es ist ein alternative zu den XML - Konfigurations-Dateien. Ich habe nie in der Lage, diese Kontext und resource-ref - tags zu arbeiten. Außerdem werden die tags sind des guten zuviel, wenn Sie nicht wirklich brauchen, das JNDI Funktionen.
Die alternative ist die Verwendung Java-code zu konfigurieren Tomcat JDBC-connection-pooling. Siehe Beispiel-code in der Plain Ol' Java Abschnitt des Tomcat-7-Dokumentation Seite Der Tomcat-JDBC Connection Pool.
Grundsätzlich:
Kinderleicht. So...
Verwenden die Datenquelle...
Die DataSource-Instanz gespeichert werden können:
ServletContext
mit integrierten Zuordnung vonString
zuObject
, wie beschrieben, auf eine Antwort von mir und diskutiert, wie auf die Frage die How to get-und set-global-Objekt in der Java-servlet-context.