2011-08-23 547 views
2

首先,我不是Java开发人员。我只需要获得一个简单的jsp示例,它连接到postgres数据库并检索一些信息。javax.naming.NamingException:无法创建资源工厂实例

我知道它运行在本地env,但是当我尝试在生产服务器(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 

我试着用谷歌搜索这个,但所有的解决方案都提到了已经存在的命名工厂dbcp.jar。我应该做什么的想法?

谢谢!

编辑

这里是我的Tomcat的lib:

-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 
+0

您可能没有正确初始化jdbc/postgres驱动程序。请检查语法并检查所需的库是否加载到项目类路径中。正确的方法是'jdbc:postgresql:// server_name' – Rakesh

+0

很好,你包含了'Tomcat/lib'的列表。但家中回答的关键点是,您应该从不**在webapp的'/ WEB-INF/lib'中包含特定于服务器的库。它使得webapp不适用于不同制造/版本的服务器。这会导致类路径问题。你从'/ WEB-INF/lib'中删除了它们吗?应该保持'Tomcat/lib'文件夹不变。最高的情况下,您将JDBC驱动程序放在那里,但绝对不要更改或删除Tomcat自己的库。 – BalusC

+0

@Rakesh嗨,它看起来是正确的。相同的应用程序在我的本地主机上运行,​​但不在生产服务器上运行。 – Fernando

回答

2

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

+0

我试图从它删除dbcp.jar文件,但它没有奏效,同样的错误。我编辑了我的问题以显示我的tomcat的lib文件夹内容。 – Fernando

+0

所以你的代码在本地环境中工作,但不在服务器上,对吧? – home

+0

没错。不同的是,在本地环境我正在运行版本6.0.33。 – Fernando