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之类的东西吗? @jtahlborn jboss-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?的主要内容,如果未能解决你的问题,请参考以下文章

带有依赖库的 Maven EJB 打包

ejb与客户端工件 - 运行时依赖?

在 Eclipse 中设置 EJB 构建类路径

JBoss 7 里一个EJB依赖其他jar的几种方式

@Inject 和 @EJB 有啥区别

通过构造函数的依赖注入对EJB bean不起作用