无法为连接URL”创建类”的JDBC驱动程序

我正在使用Tomcat 7.0.12并且每当我通过名为’ROOT’的webapp中的.jsp页面访问连接到postgresql数据库的JNDI数据源时都会收到此错误:

SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception [java.lang.RuntimeException: Cannot create JDBC driver of class '' for connect URL 'null'] with root cause java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507) at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476) at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) at java.sql.DriverManager.getDriver(DriverManager.java:253) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 

postgresql JDBC驱动程序位于我的CATALINA / lib文件夹中。

这是我的META-INF / context.xml:

       

这是我的WEB-INF / web.xml:

   ROOT  Read only webdb connector. jdbc/webdbro javax.sql.DataSource Container   Read write webdb connector. jdbc/webdbrw javax.sql.DataSource Container   Read only shadow db connector. jdbc/shadowdbro javax.sql.DataSource Container   index.jsp   

奇怪的是,我有两个其他webapps在同一个Tomcat服务器上运行使用完全相同的配置(web.xml和context.xml),因此他们可以使用JNDI方法连接到数据库,这些webapps的两个工作完全正常 – 我可以在这些应用程序中查询和更新数据库,没有任何问题或例外。 TIA …

为了让所有3个webapps正确使用相同的数据源,我必须将所有条目从META-INF / context.xml文件夹移动到服务器的$ CATALINA_BASE / conf / context.xml文件夹中。 不是一个很好的解决方案,但它确实有效

我遇到了同样的问题,结果是我在context.xml上的名称声明与web.xml上 name上定义的名称声明不匹配。

如上所述,一种解决方案是将条目移动到$ CATALINA_BASE / conf / context.xml

这里描述了另一种方法: http : //blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/

特别是,“将Context.xml文件复制到tomcat / conf / Catalina / localhost文件夹并将其重命名为.xml

根本原因可能是由于文件权限问题:“运行tomcat的用户没有写入这些文件夹的权限。所以我们将tomcat和/ etc / tomcat文件夹的组所有权更改为同一组这是tomcat用户所属的,神奇的一切都像以前一样开始工作。“

这个解决方案对我来说似乎“更清洁”,因为您可以将整个Web应用程序(包括数据库连接属性)包含在.war文件中。