EJB 依赖于另一个 EJB?
Posted
技术标签:
【中文标题】EJB 依赖于另一个 EJB?【英文标题】:EJB depending on another EJB? 【发布时间】:2013-01-05 22:45:22 【问题描述】:我正在使用 Jboss 7 并且有两个单独的部署,它们都包含单例 EJB。
我需要一个 EJB 才能访问另一个 EJB 并能够调用其方法,但是,当应用服务器启动并尝试部署它们时,似乎无法保证哪个 EJB 先启动(即使您将Dependencies: deployment.xxx.jar
设置为一个到另一个)。
我似乎无法使用 @DependsOn
注释,因为它命名了一个特定的 EJB,这似乎在单独的部署中不可行,让我将 @EJB(lookup=JNDI_STRING)
作为我唯一的选择。然而,这种注入似乎并不能保证您所依赖的 EJB 在查找发生时会真正启动,从而导致 NPE。显然,如果您只是使用 @PostContruct
方法中的 InitialContext
通过 JNDI 查找第二个 EJB,也会发生这种情况。
所以,我基本上需要保证一个部署中的一个 EJB 将在另一个部署中的另一个 EJB 之前在同一个应用服务器上启动。我认为,如果我从 HttpServlet
设置为 run-on-startup 懒惰地初始化依赖 EJB,它可能会起作用,但这并不理想。
也许我缺少一些明智的方法来做到这一点?我真的不想在 EJB 启动之前轮询它。
【问题讨论】:
为什么不延迟加载引用,在第一次需要时查找它? @jtahlborn 这是一种注册商/注册人设置,所以基本上需要尽快,所以等待一段时间然后尝试查找很尴尬 你看过this thread之类的东西吗? @jtahlbornjboss-deployment-structure
方法应该与问题中提到的 Dependencies: x
方法相同 - 这似乎并不能保证您所依赖的东西实际上已经开始 - 它似乎只是让你访问它的类。紧随其后的帖子提到了一些有趣的事情,但我不确定它是否指的是完全独立的部署(例如,我很确定您不能跨 TLD 使用 @DependsOn 注释,因为它只需要一个名称)跨度>
EJB 是否在不同的 .EAR 中?
【参考方案1】:
你可以在jboss-deployment-structure.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="deployment.app1.ear" />
</dependencies>
</deployment>
</jboss-deployment-structure>
来源mastertheboss
【讨论】:
以上是关于EJB 依赖于另一个 EJB?的主要内容,如果未能解决你的问题,请参考以下文章