Donnerstag, Mai 28, 2020

Tomcat7 JDBC-pools

Ich habe Folgendes META-INF

<Context>
   <Resource type="javax.sql.DataSource"
        name="jdbc/TestDB"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/"
        username="mysql_user"
        password="mypassword123"/>
</Context>

In meinem web.xml ich habe

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

In meinen Java code habe ich

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource datasource = (DataSource)envContext.lookup("jdbc/TestDB");
con = datasource.getConnection();

Wenn der Tomcat gestartet wird, bekomme ich die folgende Fehlermeldung und ich habe mysql-connector-java-5.1.20-bin.jar in meiner libs-Ordner. Irgendeine Idee warum?

INFO: Starting Servlet Engine: Apache Tomcat/7.0.27
05-Jun-2012 23:16:29 org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException: com.mysql.jdbc.Driver
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:242)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:175)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:684)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:616)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:135)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:114)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:101)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:501)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:224)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:235)
... 29 more
  • Waren Sie jemals in der Lage, um dies herauszufinden? Ich habe genau das gleiche problem 🙁 Bitte lassen Sie mich wissen. Danke.
  • Auch mit diesem Problem… es ist seltsam!
InformationsquelleAutor user1177292 | 2012-06-05

2 Kommentare

  1. 5

    Ihnen fehlt die JDBC-Treiber für MySQL.

    Laden Sie von der MySQL-website: http://dev.mysql.com/downloads/connector/j/

    Fügen Sie die Treiber auf Ihrem classpath, um Ihr Projekt, oder Tomcat HOME\lib-Verzeichnis.

    • Ich habe mysql-connector-java-5.1.20-bin.jar in meinem apps-lib-Verzeichnis. Ich weiß mysql-connector-java-5.1.20-bin.jar wird abgeholt, da ich noch andere servlets, die nicht die JDBC-pools und arbeiten Sie. Etwas todo mit startup?
    • Ja, vermutlich einige andere Konfigurations-Datei wird geladen, wenn Sie die Anwendung ausführen. Versuchen Sie, den MySQL-Treiber auf Ihrem CLASSPATH oder Tomcat HOME\lib-Verzeichnis. Wenn das funktioniert, dann Sie haben es eingeengt zu config.
    • Wie füge ich die mysql auf dem classpath? Ich bin neu auf Tomcat / webapps. Auch ich bin mit dieser auf Amazon BeanStalk, damit ich nicht haben Zugang zu tomcat
    • In diesem Fall Folgen Sie dieser Anleitung, um das setup MySQL auf BeanStalk: docs.amazonwebservices.com/elasticbeanstalk/latest/dg/…
    • Ich habe gelesen, dass und alles funktioniert gut, außer für jdbc-pools
    • Also fügte ich mysql-connector-java-5.1.20-bin.jar zu Tomcat HOME\lib-Verzeichnis, und es funktionierte. So scheint es, während des Startvorgangs, wenn das Lesen der context.xml tomcat kann nicht gelesen werden web-inf/lib-jars oder benötige ich einen Verweis auf die mysql jar in der context.xml?
    • Ich habe verwendet, Frühling verwalten Sie die pool statt und alle funktioniert
    • Danke. Ich setzte mysql-connector und tomcat-jdbc.jar im Tomcat lib

  2. 3

    Hatte ich dieses Problem unter Ubuntu mit Tomcat7 installiert mit apt-get-Mechanismus. Das problem war die dbcp eingesetzt, die von Tomcat, genauer gesagt commons-dbcp.jar statt tomcat-dbcp.jar.

    Diese zu lösen, nahm ich catalina*.jar und tomcat-dbcp.jar aus einer Kopie Tomcat7 heruntergeladen von der tomcat-Website, und ersetzt die Dateien im tomcat lib Ordner. (commons-dbcp.jar ersetzt mit tomcat-dbcp.jar).

    Sehen dieser link.

Kostenlose Online-Tests