我试图在Ubuntu 12.X下的Tomcat 7中设置一个JDBC DataSource,所以我在context.xml文件中添加了以下内容:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource" maxActive="5" maxIdle="2" maxWait="5000" driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />
显然,使用正确和经过testing的数据库用户标识和密码。 当我重新启动Tomcat,我得到这个错误:
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]
我search了一下,发现JDBC驱动必须复制到$ CATALINA_HOME / lib文件夹,所以我把postgresql-9.2-1000.jdbc4.jar复制到/ usr / share / tomcat7 / lib,但是没有帮助。 我试图将文件复制到其他位置,具有相同的结果。
另一个尝试是将/ usr / share / tomcat7 / lib中的tomcat-dbcp.jar符号链接从../../java/tomcat-dbcp-7.0.30.jar更改为../../java/tomcat- dbcp.jar。 唯一的变化是我只有一个警告,而不是四个,但数据源也不起作用。
Java版本:
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)
任何暗示,非常欢迎。
干杯。
来自存储库的库tomcat-dbcp-7.0.30.jar
已损坏。
将其替换为:
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
原因是Tomcat7的Ubuntu构建/包过程中的一个问题。 如果我正确地理解了这个问题,Apache从二进制文件构建tomcat-dbcp.jar,而Ubuntu只从源代码构建软件包。 Ubuntu项目最终需要更改Java包名称,这往往会让我们的用户不友好。 在Ubuntu的问题列表中可以找到血淋淋的细节。
我找到的解决方案是在定义资源时命名数据源工厂。 在一个案例中,我有一个META-INF / context.xml文件,其中包含:
<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" />
关键因素是“工厂”声明,它覆盖了内置的默认值。
在我们的生产机器上,资源在server.xml文件的GlobalNamingResources元素中定义。 仅在Ubuntu系统上才需要指定工厂。
我在CentOS上遇到同样的问题。 我从网站上下载了tomcat的新副本,并将tomcat-dbcp.jar上传到我的在线服务器库中,重新启动服务器:)
在Fedora 20和Tomcat 7.0.55上,我遇到了同样的问题。 我用文件路径和文件名称中的7.0.55替换了7.0.30,这对我有用。 不知道为什么,但是这个文件是完全从YUM安装的tomcat 7中丢失。不能使用没有它的数据库。
那样做了。
确保tomcat-dbcp-7.0.30.jar文件没有下面的大小,那么它可能已经损坏,你可能需要用上面的sudo wget命令来替换它。
-rw -r – r– 1 root root 235411 2013年5月1日tomcat-dbcp-7.0.30.jar
lrwxrwxrwx 1 root root 22 Jan 10 2013 tomcat-dbcp.jar – > tomcat-dbcp-7.0.30.jar