不久前,我在Jboss 4.2.3(JavaEE 5)上下文中提出了这个问题,并获得了尝试使用Spring进行配置的答案,但是我宁愿在不需要时也不添加其他框架。

现在有了JavaEE 6和7,我感觉有一个解决我问题的简单方法。但是,我并不是很幸运地进行搜索,因此,如果您能使我步入正轨,我将非常感谢您的帮助。

这是问题所在:

假设我们有一个EJB接口IEjb和一个提供该接口实例的库。还有其他一些库可以提供更多的EJB,并且其中一些包含EjbA,即它们需要对EJB的引用,该EJB公开了接口@EJB IEjb ref

现在,需要用替代实现IEjb完全替换EjbA,即EjbB永远不要在整个应用程序中使用。

有一些选项是我们无法使用的,或者需要进行较大的更改:


“不要部署包含EjbA的库”:这是不可能的,因为还需要其他EJB。
“从库中提取EjbA”:这将需要对我们的库和使用它们的应用程序进行相当大的更改
“将EjbA作为非EJB实现,在需要时对其进行子类化,并使该子类成为EJB”:与上述情况相同,这将需要进行较大的更改
“删除EjbA”:还有其他应用程序需要使用它,它目前只是一个应使用替换项的应用程序。


因此,我可以想到几种方法:


告诉服务器不要部署EjbA,以便EjbA的唯一实现是IEjb并且依赖项注入会很好
告诉依赖项注入在需要EjbB实例时总是使用EjbB(类似于CDI的IEjb但对于EJB-在JavaEE 7中可能吗?)


有什么想法吗?这可能吗(我感觉是),如果可以,怎么办?


关于环境的说明:我们当前正在JBoss 7.2.0上运行,但是如果只能使用Wildfly可以实现,则可以选择(尽管我们不希望已经被迫进行更新)。

最佳答案

一些想法:


如果仍然不能使用,请删除EjbA
除去EJB批注
使用@Inject注入本地EJB(无论如何建议)。我认为CDI可让您指定默认的实现AFAIK。

关于java - 在JBoss中专门研究EJB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23016898/

10-10 03:21