我在将注入的概念以及 JNDI 与 EJB 应用时遇到了麻烦,我希望得到您的帮助。我正在学习这一点,我真的很想了解和应用 @Resource 和/或 JNDI 查找与 XML 配置的技术。我似乎在我的 JNDI 查找中找不到任何初始参数。现在,在我继续之前,如果我手动输入数据源的 JNDI 名称,一切正常。我正在尝试做的(再次作为练习)是使用@Resource 或JNDI 来获取JNDI 数据源名称本身,然后对数据源进行JNDI 查找。我知道你可以直接注入一个 DataSource 对象,但如果我不能注入一个字符串,我必须从这个开始。
首先,这是我的 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");
我在这里的第一篇文章,所以我希望我问得正确。谢谢您的帮助!