basicdatasourcefactory mysql_Ubuntu Tomcat7 java.lang.ClassNotFoundException: org.apache.tomcat.dbcp...

问题

I'm trying to set up a JDBC DataSource in Tomcat 7 under Ubuntu 12.X, so I added the following to the context.xml file:

maxActive="5" maxIdle="2" maxWait="5000"

driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />

Obviously, using the right and tested database user id and password. When I restart Tomcat, I get the this error:

Feb 05, 2013 1:10:01 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]

I googled, and found out the JDBC driver has to be copied to the $CATALINA_HOME/lib folder, so I copied the postgresql-9.2-1000.jdbc4.jar to /usr/share/tomcat7/lib, but it didn't help. I tried copying the file to other locations, with the same results.

Another attempt was to change the tomcat-dbcp.jar symlink in /usr/share/tomcat7/lib from ../../java/tomcat-dbcp-7.0.30.jar to ../../java/tomcat-dbcp.jar. The only change was I got only one warning instead of four, but the datasource doesn't work either.

Java version:

jdoe@sever:~$ java -version

java version "1.7.0_09"

OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)

OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

Any hint, very welcomed.

Cheers.

回答1:

The library tomcat-dbcp-7.0.30.jar from repositories is corrupted.

Replace it with:

sudo wget -O /usr/share/java/tomcat-dbcp-7.0.30.jar http://search.maven.org/remotecontent?filepath=org/apache/tomcat/tomcat-dbcp/7.0.30/tomcat-dbcp-7.0.30.jar

回答2:

The cause is a issue in the Ubuntu build/package process for Tomcat7. If I understand the issue correctly, Apache builds tomcat-dbcp.jar from binary files, while Ubuntu builds packages only from source. The Ubuntu project ends up needing to change the Java package name, which tends to break things for us poor users. The gory details may be found at the Ubuntu issues list.

The solution I found is to name the data source factory when I define the resource. In one case, I have a META-INF/context.xml file that contains:

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" />

The critical element is the "factory" declaration, which overrides the built-in default.

On our production machines, the resource is defined in the GlobalNamingResources element of the server.xml file. Specifying the factory is only needed on the Ubuntu systems.

回答3:

i had the same problem on CentOS. I got arounbd this by downloading a fresh copy of tomcat from site and uploaded tomcat-dbcp.jar to my online server lib, restart server :)

回答4:

I had the same problem on Fedora 20 with Tomcat 7.0.55. I replaced the 7.0.30 with 7.0.55 in the file path and file name and this worked for me. Not sure why but this file was completely missing from the YUM install for tomcat 7. Cant use a database without it.

回答5:

That did it.

Make sure if the tomcat-dbcp-7.0.30.jar file does not have the below size, then it may be corrupt and you may need to replace it by the sudo wget command above.

-rw-r--r-- 1 root root 235411 May 1 2013 tomcat-dbcp-7.0.30.jar

lrwxrwxrwx 1 root root 22 Jan 10 2013 tomcat-dbcp.jar -> tomcat-dbcp-7.0.30.jar

回答6:

If you don't feel like patching tomcat you can (on CentOS) also add the following to the JAVA_OPTS (e.g. by adding it in /usr/share/tomcat/conf/context.xml

JAVA_OPTS="-Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory"

来源:https://stackoverflow.com/questions/14712308/ubuntu-tomcat7-java-lang-classnotfoundexception-org-apache-tomcat-dbcp-dbcp-bas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值