【发布时间】:2015-09-04 06:15:24
【问题描述】:
我在带有@Resource 注释的EJB 中指定了一个字符串资源。 EJB 封装在一个 EJB 模块中。 ejb.jar 有一个 ejb-jar.xml,它指定了 String 资源的默认值。 ejb.jar 与 web 模块一起打包在一个 ear 存档中。
当 ear 部署到 WebSphere 时,EJB 模块的环境条目部分显示 三个 EJB 条目:
- 我为 ejb 模块映射的字符串资源;
- 我为ejb模块映射的String资源,只是这次叫
EJB_fully_qualified_name/resource_name; - 资源的完全限定名称相同,但现在映射到 Web 模块。
除非我为以上所有变体提供默认值,否则不会注入资源。如果我将 ejb-jar.xml 添加到 Web 模块,WebSphere 会显示 四个 条目(每个模块的资源的一个简单名称和一个完全限定名称)。这是 WebSphere 的怪癖还是我做错了什么?我在集群环境中使用 WebSphere 8.5.5.3。
这是豆子:
@Singleton
@Startup
public class ConfigSingleton {
@Resource
private String serviceLookup;
}
这里是 ejb-jar.xml:
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>ConfigSingleton</ejb-name>
<env-entry>
<env-entry-name>serviceLookup</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>value</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>
【问题讨论】:
-
请添加您的 EJB 片段和资源,以及定义资源的 ejb-jar.xml 片段。可能资源引用名称不同,这就是您看到的原因 2. 关于 web 模块 - 检查您的 ejb.jar 是否也没有错误地添加到
WEB-INF/lib,它应该只在耳朵级别添加。 -
Web 模块的 WEB-INF/lib 中确实有 ejb 模块 - 我在新构建中删除了它,但 WebSphere 仍然显示 Web 模块的 ejb 条目。至于映射,我以here 的身份完成了它。
-
也许你没有重新部署?将名称添加到 ejb-jar.xml 中的
@Resource(name="myRef") and also use samemyRef` 名称。如果您提供代码片段,而不是指向第三方页面,会容易得多。 -
@Gas 添加了示例。我不仅重新部署而且重新安装了整个应用程序。
-
我看到特蕾西已经为你解释过了。