2009-09-09 55 views
0

我在GlassFish 2.1中遇到了一個奇怪的問題 - 我是這個容器的初學者,而且我很難解決這個問題。java.lang.ClassNotFoundException:Glassfish中的DataSource

我有一個全新安裝的GlassFish 2.1,它帶有一個名爲testDerbyPool的JDBC連接池。然後我定義了一個名爲jdbc/testDerbyPool的資源,該資源指向該池。資源類型是javax.sql.DataSource,我可以成功地對池進行ping操作。

然後我有一個單獨的類與此聲明中的Web應用程序:

@Resource(name="jdbc/testDerbyPool") 
private javax.sql.DataSource source; 

該聲明在我的web.xml:

<resource-ref> 
    <res-ref-name>jdbc/testDerbyPool</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 

當我嘗試部署應用程序,我得到這個錯誤:

[#|2009-09-09T21:40:47.582+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=24;_ThreadName=Thread-32;_RequestID=1ca4ab80-ae39-4920-be18-f535b025bb51;|WebModule[/cptest1]PWC1275: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener 

和一個巨大的堆棧跟蹤,開始:

java.lang.NoClassDefFoundError: LDataSource; 
at java.lang.Class.getDeclaredFields0(Native Method) 
at java.lang.Class.privateGetDeclaredFields(Class.java:2291) 

與根源:

Caused by: java.lang.ClassNotFoundException: DataSource 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1498) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 

我不明白如何數據源可以是 '找不到'!有任何想法嗎?

+2

確保您的應用程序沒有自己的javax.sql.DataSource副本,它可能與Glassfish的副本發生衝突。 – skaffman 2009-09-09 20:55:40

+0

這可能是發生了什麼,歡呼聲 – Brabster 2009-09-09 20:56:44

回答

2

下次我回過頭去問問題時,發現Eclipse中有一個構建錯誤,不知何故在標記爲'unbound'的路徑中獲得了額外的JRE。環顧我的系統,我在啓動Eclipse和執行構建/部署之間自動獲得了JVM點版本更新。

無論如何,刪除它,再次嘗試,工作。

因此,如果看到此問題,請檢查構建錯誤並構建路徑問題。

+1

感謝您建議尋找構建錯誤和警告。自上午以來得到了一個N​​oClassDefFound異常,原因被記錄爲警告。 – Ramesh 2010-01-31 01:48:10