2011-06-21 74 views
2

我無法嘗試在Java EE 6和Glassfish 3.1(嵌入式)中使用@Resource註解。我想查找一個JNDI數據源,所以我試圖讓它在Glassfish中使用默認數據源。在我的代碼中,我有:使用@Resource爲Java EE 6和Glassfish 3.1注入資源

@Resource(lookup = "java:global/env/jdbc/__default") 
DataSource dataSource; 

它編譯得很好。我正在使用Maven +的建議here

然而,當我部署我的.war我總是得到以下錯誤:

WARNING: Incorrect @Resource annotation class definition - missing lookup attribute 
    symbol: FIELD 
    location: javax.sql.DataSource ResourceLookup.dataSource 

這是這樣一個簡單的例子,我會感到非常驚訝,如果它是一個錯誤。我一定做錯了什麼。有任何想法嗎?

回答

3

作爲測試,您可以嘗試「jdbc/__ default」作爲查找字符串嗎?對於我的數據源,我使用我指定的jndi名稱查找它們,始終使用模式「jdbc/MyDataSourceName」。

@Resource(lookup =「jdbc/MyDataSourceName」)效果很好。從未嘗試查找默認的ds,特別是不通過java:global命名空間。

+0

P.S.我希望你不要在生產中使用jdbc/__ default,它是默認安裝Glassfish的德比數據庫。 – Jim

+1

進一步看,當Glassfish顯示這個錯誤時,這是​​因爲它得到了NoSuchMethodError異常,這意味着你得到了Resource註解編譯代碼的錯誤版本。最有可能的是類路徑問題。你有沒有j2ee.jar捆綁在你的.war或類似的東西?如果你的戰爭只有你的代碼,並且沒有j2ee或者jee庫,那麼可以試試Glassfish的新副本。也可能你的JDK太舊了。 – Jim

+1

查看[Glassfish來源](http://grepcode.com/file/maven.glassfish.org/content/repositories/glassfish-releases/org.glassfish.deployment/dol/3.0.1/com/sun/enterprise/deployment /annotation/handlers/ResourceHandler.java)在底部。這個鏈接是3.0代碼,我無法在線快速找到3.1代碼,但是我已經在我的機器上找到了它,並且評論如下: //可能意味着lib認可dir未設置,而舊版本 //資源正在從JDK中挑選出來。 //不要將其視爲致命錯誤。 – Jim

相關問題