2011-08-23 133 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

相關問題