2013-07-11 36 views
1

我在應用注入的概念以及JNDI和EJB方面遇到問題,我希望得到您的幫助。我正在學習這一點,我真的很想理解和應用XML配置中的@Resource和/或JNDI查找技術。我似乎無法在我的JNDI查找中找到任何初始參數。現在,在我繼續之前,如果我手動輸入數據源的JNDI名稱,那麼一切正常。我試圖做的(再次作爲練習)是使用@Resource或JNDI來獲取JNDI數據源名稱本身,然後在數據源上執行JNDI查找。我知道你可以直接注入一個DataSource對象,但是如果我不能注入一個String,我必須從這開始。使用@Resource和JNDI查找時遇到問題

首先,這裏是我的ejb-jar.xml中的重要組成部分:

<env-entry> 
    <description>DataSource JNDI lookup name</description> 
    <env-entry-name>datasourceName</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>myDataSource</env-entry-value> 
</env-entry> 

在使用@Resource我已經試過我試過在EJB以下字段注入方面

@Resource(name = "datasourceName") 
String dsName; 

我也有mappedName和查找(使用JNDI查找)沒有什麼是未來在嘗試然後我試着JNDI查找如下:

// get JNDI name from environment entry in EJB Context and use to lookup DataSource 
Context context = new InitialContext(); 
String dsName = (String) context.lookup("java:comp/env/SRS/datasourceName"); 

(應用程序的名稱是SRS) - 這出現了一個NamingException,JNDI查找沒有找到任何東西。我試過以下查找:

String datasourceName = (String) context.lookup("java:comp/env/SRS/Status/datasourceName"); // name of EJB is Status 
String datasourceName = (String) context.lookup("datasourceName"); 
String datasourceName = (String) context.lookup("SRS/datasourceName");   
String datasourceName = (String) context.lookup("SRS/Status/datasourceName");   
String datasourceName = (String) context.lookup("java:global/SRS/datasourceName"); 
String datasourceName = (String) context.lookup("java:global/SRS/Status/datasourceName"); 

我的第一篇文章,所以我希望我問得好。謝謝您的幫助!

+1

檢查在這裏:http://stackoverflow.com/questions/6500632/how-to-lookup-jndi-resources-on-weblogic如果它真的只是'datasourceName'它看起來像'context.lookup(「datasourceName」 );'應該工作。您可以在管理控制檯中查看另一件事,轉到「服務器摘要 - >您的服務器名稱 - >查看JNDI樹」,並確保您的datasourceName顯示出來。 –

+0

@better_use_mkstemp - 感謝您的回覆。數據源工作正常。這意味着,如果我嘗試直接使用以下代碼對數據源進行JNDI查找:DataSource ds =(DataSource)context.lookup(「myDataSource」);'我可以訪問數據源。我在這裏想要做的是使用XML配置將一個String直接提供給EJB。我希望澄清。 –

+0

如果使用@Resource(name =「datasourceName」),那麼'java:comp/env/datasourceName'是正確的查找字符串。也就是說,我不知道爲什麼在註釋和XML中指定了相同的名稱時注入不起作用;這應該是工作。 –

回答

1

好的。兩天後,我看到我的錯誤在EJB本身的代碼中沒有出現,但是在調用EJB的JSP配置中!我的錯誤是我以某種方式調用了EJB類的方法作爲POJO而不是通過容器。自從EJB方法被調用以來,我就假設容器已經正確地將EJB注入JSP。但事實並非如此。我在JSP中進行了JNDI查找,並且所有事情都自行解決了。感謝大家的迴應!