【问题标题】:ClassNotFoundException after adding the jar to the lib folder of a Tomcat Service installation将 jar 添加到 Tomcat 服务安装的 lib 文件夹后出现 ClassNotFoundException
【发布时间】:2014-01-20 17:09:29
【问题描述】:

我正在尝试更新网络应用以使用 DBCP。本地运行良好(Windows 上的典型 Tomcat 安装)。但是,在 DEV 服务器(EC2 LINUX AMI;Tomcat 即服务)上,我得到以下内容

Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

我已将其范围缩小(我认为)到 /lib 文件夹最初没有 tomcat-jdbc.ja

我已经添加了这个 jar,并使用以下内容重新启动了 Tomcat 实例...

sudo service tomcat7 restart

但是,我仍然得到相同的 ClassNotFoundException。如何让Tomcat服务识别tomcat-dbcp.jar

编辑 - 这是运行 sudo service tomcat7 start 后的堆栈跟踪

Jan 20, 2014 5:30:35 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with JAR file [/usr/share/java/tomcat7/log4j.jar], exists: [false], canRead: [false]
Jan 20, 2014 5:30:35 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with JAR file [/usr/share/java/tomcat7/log4j.jar], exists: [false], canRead: [false]
Jan 20, 2014 5:30:36 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Jan 20, 2014 5:30:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jan 20, 2014 5:30:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jan 20, 2014 5:30:37 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1404 ms
Jan 20, 2014 5:30:37 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jan 20, 2014 5:30:37 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.40
Jan 20, 2014 5:30:37 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/ROOT.war
Jan 20, 2014 5:30:47 PM org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "org.apache.myfaces.webapp.StartupServletContextListener" is already configured for this context. The duplicate definition has been ignored.
Jan 20, 2014 5:30:47 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
Jan 20, 2014 5:30:50 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jan 20, 2014 5:30:50 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jan 20, 2014 5:30:50 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 12969 ms

【问题讨论】:

  • 您能否在日志文件夹中包含来自日志记录的完整调用堆栈?
  • 好的,刚刚用堆栈跟踪编辑过

标签: java class jar tomcat7


【解决方案1】:

如果其他人有这个问题,我是这样解决的。

在我的 context.xml 文件中,标签必须具有以下属性

factory="org.apache.commons.dbcp.BasicDataSourceFactory"

...所以我的最终标签看起来像....

<Resource name="jdbc/resourceName"
    auth="Container"
    type="javax.sql.DataSource"
    logAbandoned="false" 
    maxActive="100"
    maxIdle="30"
    maxWait="10000"
    username= "username"
    password="password"
    driverClassName="com.mysql.jdbc.Driver"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory"
    url="jdbc:mysql://your.mysql.host"/>

基本上,我只是强制它恢复为不使用 Tomcat 的 DBCP 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多