我在應用注入的概念以及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");
我的第一篇文章,所以我希望我問得好。謝謝您的幫助!
檢查在這裏:http://stackoverflow.com/questions/6500632/how-to-lookup-jndi-resources-on-weblogic如果它真的只是'datasourceName'它看起來像'context.lookup(「datasourceName」 );'應該工作。您可以在管理控制檯中查看另一件事,轉到「服務器摘要 - >您的服務器名稱 - >查看JNDI樹」,並確保您的datasourceName顯示出來。 –
@better_use_mkstemp - 感謝您的回覆。數據源工作正常。這意味着,如果我嘗試直接使用以下代碼對數據源進行JNDI查找:DataSource ds =(DataSource)context.lookup(「myDataSource」);'我可以訪問數據源。我在這裏想要做的是使用XML配置將一個String直接提供給EJB。我希望澄清。 –
如果使用@Resource(name =「datasourceName」),那麼'java:comp/env/datasourceName'是正確的查找字符串。也就是說,我不知道爲什麼在註釋和XML中指定了相同的名稱時注入不起作用;這應該是工作。 –