【发布时间】:2018-02-28 11:11:37
【问题描述】:
我目前正在编写一组与一些旧 EJB2 代码交互的 EJB。作为其中的一部分,我有一个 ejb-jar.xml 部署描述符,其中包含会话 bean 的资源引用和 ejb-refs。所有这些定义基本上是相同的——它们之间只有会话 bean 的名称不同。显然,这并不理想 - 每次添加新 bean 时,我都必须复制和粘贴一大块 XML。
结构看起来像这样:
<ejb-jar
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
<enterprise-beans>
<session>
<ejb-name>/* redacted */</ejb-name>
<resource-ref>
<res-ref-name>/* redacted */</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Application</res-auth>
<lookup-name>/* redacted */</lookup-name>
</resource-ref>
<ejb-ref>
<ejb-ref-name>/* redacted */</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>/* redacted */</home>
<remote>/* redacted */</remote>
</ejb-ref>
/* about 20 more ejb-refs later... */
</session>
/* several near identical session beans here ... */
</ejb-jar>
有没有办法在多个定义中重复使用这些引用而不重复?或者,是否有更好的方法来实现我所缺少的相同最终结果?
【问题讨论】:
-
这是 websphere,如果是,是什么版本?在 websphere 7 之前(除非修补了 7),没有解决方案,因为 Java EE 5 附带了这些解决方案。JEE6 确实具有全局资源引用,您可能必须检查与您的特定产品相对应的文档。此外,如果您使用的是适当版本的 RAD,它可能会自动处理此问题。
-
@Gautam:WebSphere 8/JEE 6,谢天谢地 - 我们的应用程序是遗留的,但它不是 遗留的:p 由于我们还必须支持 JBoss 7,所以有点复杂,尽管。我会研究一下全球资源参考,谢谢你的建议。
-
您可能想从这里开始查看JEE namespaces。
-
每个会话 bean 是否实际使用所有这些 ejb-refs?每一个都用于从每个 bean 的调用范围内进行单独的“java:comp/env/...”JNDI 查找。看起来您可能正在为所有事情使用相同的大胖“定位器”服务......
-
@SteveC:可能不是全部——我正在迁移一个应用程序,该应用程序用于通过一个 EJB 路由所有内容以具有多个 EJB/JAX-WS 端点,所以这是所有 EJB 的完整列表在应用程序中 - 可能会缩小范围......
标签: java jakarta-ee ejb ejb-3.0 ejb-3.1