我正在尝试更新网络应用程序以使用 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]
我已将其缩小(我认为)到最初没有 tomcat-jdbc.ja
的 /lib
文件夹。
我已经添加了这个 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
最佳答案
万一其他人有这个问题,我是这样解决的。
在我的 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 类。
关于java - 将 jar 添加到 Tomcat 服务安装的 lib 文件夹后出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240052/