我无法应用注入概念以及JNDI和EJB,我希望得到您的帮助。我正在学习这个,我真的想要理解并应用XML配置的@Resource和/或JNDI查找技术。我似乎无法在我的JNDI查找中找到任何初始参数。现在,在我继续之前,如果我手动输入数据源的JNDI名称,一切都很好。我正在尝试做的(再次作为练习)是使用@Resource或JNDI来获取JNDI数据源名称本身,然后对数据源执行JNDI查找。我知道你可以直接注入一个DataSource对象但是如果我不能注入一个String,我就要从这开始。
首先,这是我的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和lookup(使用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) - 这会产生一个NNDException,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");
我在这里的第一篇文章,所以我希望我能正确地问。谢谢你的帮助!
答案 0 :(得分:1)
确定。两天后,我发现我的错误在EJB本身的代码中没有,但是在调用EJB的JSP配置中!我的错误是我以某种方式调用了EJB类的方法作为POJO而不是通过容器。我假设自从调用EJB方法以来容器已经将EJB正确地注入到JSP中。但事实并非如此。我在JSP中进行了JNDI查找,一切都自行解决。感谢大家的回复!