【问题标题】:javax.naming.NamingException: Could not create resource factory instancejavax.naming.NamingException:无法创建资源工厂实例
【发布时间】:2011-08-23 12:28:58
【问题描述】:

首先,我不是 Java 开发人员。我只需要获取一个简单的 jsp 示例,它可以连接到 postgres 数据库并检索一些信息。

我让它在本地环境中运行,但是当我尝试在生产服务器(Apache Tomcat 6.0.29)上运行时,它就不起作用了。页面显示如下异常:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver found for jdbc/postgres"
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我注意到当我重新加载应用程序时,catalina.out 显示以下问题:

Aug 23, 2011 2:21:07 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]

在 WEB-INF/lib 我有以下文件:

# ls -lh
total 1.3M
-rwxr-xr-x 1 tomcat tomcat  17K Aug 23 14:15 jstl.jar
-rwxr-xr-x 1 tomcat tomcat 160K Mar  5  2007 naming-factory-dbcp.jar
-rwxr-xr-x 1 tomcat tomcat 528K Aug 23 14:18 postgresql-9.0-801.jdbc4.jar
-rwxr-xr-x 1 tomcat tomcat 313K Aug 23 14:16 standard.jar
-rwxr-xr-x 1 tomcat tomcat 248K Aug 22 22:18 tomcat-dbcp.jar

我尝试用谷歌搜索,但所有解决方案都提到了已经存在的naming-factory-dbcp.jar。关于我应该做什么的任何想法?

谢谢!

编辑

这是我的 tomcat 库:

-rw-r--r-- 1 tomcat nobody  11K Jun  8  2009 lib/annotations-api.jar
-rw-r--r-- 1 tomcat nobody  49K Jun  8  2009 lib/catalina-ant.jar
-rw-r--r-- 1 tomcat nobody 121K Jun  8  2009 lib/catalina-ha.jar
-rw-r--r-- 1 tomcat nobody 1.1M Jun  8  2009 lib/catalina.jar
-rw-r--r-- 1 tomcat nobody 225K Jun  8  2009 lib/catalina-tribes.jar
-rw-r--r-- 1 tomcat nobody  28K Jun  8  2009 lib/el-api.jar
-rw-r--r-- 1 tomcat nobody 101K Jun  8  2009 lib/jasper-el.jar
-rw-r--r-- 1 tomcat nobody 501K Jun  8  2009 lib/jasper.jar
-rw-r--r-- 1 tomcat nobody 1.4M Jun  8  2009 lib/jasper-jdt.jar
-rw-r--r-- 1 tomcat nobody  75K Jun  8  2009 lib/jsp-api.jar
-rw-r--r-- 1 tomcat nobody  86K Jun  8  2009 lib/servlet-api.jar
-rw-r--r-- 1 tomcat nobody 732K Jun  8  2009 lib/tomcat-coyote.jar
-rw-r--r-- 1 tomcat nobody 193K Jun  8  2009 lib/tomcat-dbcp.jar
-rw-r--r-- 1 tomcat nobody  65K Jun  8  2009 lib/tomcat-i18n-es.jar
-rw-r--r-- 1 tomcat nobody  43K Jun  8  2009 lib/tomcat-i18n-fr.jar
-rw-r--r-- 1 tomcat nobody  48K Jun  8  2009 lib/tomcat-i18n-ja.jar

【问题讨论】:

  • 您可能没有以正确的方式初始化 jdbc/postgres 驱动程序。请检查语法并检查项目类路径中是否加载了所需的库。正确的做法是jdbc:postgresql://server_name
  • 很好,您包含Tomcat/lib 的列表。但是 home 回答的关键点是,您应该永远在 webapp 的 /WEB-INF/lib 中包含特定于服务器的库。它使 webapp 无法移植到不同品牌/版本的服务器。这会导致类路径问题。您是否将它们从/WEB-INF/lib 中删除? Tomcat/lib 文件夹应保持不变。最高时,您将 JDBC 驱动程序放在那里,但绝对不要更改或删除 Tomcat 自己的库。
  • @Rakesh 嗨,它看起来是正确的。同一个应用可以在我的本地主机上运行,​​但不能在生产服务器上运行。
  • @BalucC 是的,刚刚从我的应用程序库中删除了命名工厂-dbcp.jar 和 tomcat-dbcp.jar。但我仍然得到同样的错误。

标签: jsp tomcat


【解决方案1】:

dbcp 类应该已经在tomcat/lib 中可用。没有必要在你的 WAR 文件中包含 then - 如果你使用错误的版本,它可能会导致类加载器的烦恼。尝试从 WEB-INF/lib 目录中删除 ...dbcp.jar 文件,将 postgres...jar 放入 tomcat/lib 并重新启动 Tomcat。

【讨论】:

  • 我试图从中删除 dbcp.jar 文件,但没有成功,同样的错误。我编辑了我的问题以显示我的 tomcat 的 lib 文件夹内容。
  • 所以你的代码在本地环境下工作,但在服务器上不行,对吧?
  • 对。不同之处在于,在本地环境中,我运行的是 6.0.33 版。
  • 好的,也许你修改了本地环境中的一些其他文件,但不记得更新服务器上的那些文件,例如context.xml?再次查看手册,也许你漏掉了什么:tomcat.apache.org/tomcat-6.0-doc/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2014-06-09
相关资源
最近更新 更多