在 Tomcat7/Ubuntu 12.10 中找不到类 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory?(可能的错误)

Joe*_*Joe 5 java tomcat 12.10

Tomcat7:7.0.30-0ubuntu1.1

Tomcat 7 有 jar 文件 commons-dbcp.jar 和 tomcat-dbcp.jar,但在 tomcat-dbcp.jar 中,它是文件 org.apache.tomcat。dbcp .BasicDataSourceFactory 类而不是 org.apache.tomcat。正在寻找的dbcp.dbcp .BasicDataSourceFactory。

根本原因

javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
    org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:121)
    javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    org.apache.naming.NamingContext.lookup(NamingContext.java:168)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)

小智 7

通过修改 conf/context.xml 中的资源标签以使用而不是 Tomcat 7 默认工厂,为 StackOverflow 上相同问题给出了解决方案factory="org.apache.commons.dbcp.BasicDataSourceFactory"。你可以在那里看到这个问题的原因。

资源标签看起来像(取自引用的答案):

<Resource name="jdbc/myDataSource"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/myDatabase"
    username="username" password="password"
    validationQuery="SELECT COUNT(*) FROM MY_TABLE"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 3

tomcat 7 中的默认数据源工厂是 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。它包含在 Debian 维护者不分发的 jar 文件中。

Tomcat 7 现在包含另一个可以使用的连接池实现,但它不是默认的。

org.apache.tomcat.jdbc.pool.DataSourceFactory
Run Code Online (Sandbox Code Playgroud)

我们可以将默认工厂更改为它已经包含在当前发行版中,从而解决这个问题。

Ubuntu版本:12.10

tomcat7:7.0.30-0ubuntu1.1