循环ejb依赖项:规范说什么?

时间:2015-07-30 10:20:30

标签: ejb ejb-3.0

我从经验中知道,在EJB中注入循环依赖项确实有效,至少在某些应用程序服务器中是这样。

我已经多次使用自注射(例如,获取@TransactionAttribute的EJB代理,@ RolesAllowed,@ Asynchronous等工作)。

我也使用了更复杂的图表(A-> B-> A等),这显然也有效。

我至少在Glassfish 3/4,Weblogic和JBoss 7.3中完成了它。也许是Weblogic,不确定。

现在,我一直试图从规范中找到一些精确的保证,但没有成功。在CDI中有这方面的规定,但我找不到有关它为什么适用于EJB的任何解释。可能有一些间接的吗?

我正在从EJB规范的一些参考资料中看到这一点。

1 个答案:

答案 0 :(得分:2)

我不相信EJB规范明确禁止自注入,这意味着它隐式允许它,因为bean自己的接口没有理由与其他EJB的接口不同。在实践中,自注入只能用于无状态(和EJB 3.1中的单例)并且不具有状态,因为每次查找/注入有状态bean都会创建一个新实例,这将导致无限的重复。对于有状态,您可以注入SessionContext并使用getter方法返回“自代理”而不是使用注入。此技术也适用于无状态/单例,并且它可能比使用注入稍微快一些(特别是如果您将结果缓存在实例字段中与注入相同),因为EJB容器可能更直接地返回自代理而不是通过注入/ JNDI。

我能给出这个答案的唯一附加权限是我5年来一直是WebSphere Application Server中EJB容器的主要开发人员/维护者之一。要添加到产品列表中,我知道自我注入在WebSphere Application Server上也可以实际运行。