不久前,我在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/