1

我在将注入的概念以及 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");

我在这里的第一篇文章,所以我希望我问得正确。谢谢您的帮助!

4

1 回答 1

1

好的。两天后,我发现我的错误不在 EJB 本身的代码中,而是在调用 EJB 的 JSP 的配置中!我的错误是我以某种方式调用了 EJB 类的方法作为 POJO,而不是通过容器。自从调用 EJB 方法后,我就假设容器已正确地将 EJB 注入到 JSP 中。但它没有。我在 JSP 中进行了 JNDI 查找,一切都自行解决了。感谢大家的回应!

于 2013-07-14T23:32:36.983 回答