OpenEJB - 排除单个bean

时间:2017-06-21 11:46:08

标签: java junit ejb openejb

我正在使用junit和OpenEJB容器测试我的应用程序,以便为我的bean提供上下文。它从类路径中找到所有bean并启动它们。不幸的是,我想从上下文中删除一些bean,所以我可以用其他实现替换那些bean,嘲笑某些功能。

我了解openejb.deployments.classpath.exclude财产。 我甚至尝试按照以下properties.put("openejb.deployments.classpath.exclude", ".*/CommonCache.*");使用它,因为它在this SO question中被消化了。

OpenEJB看到了这个属性,但bean仍在启动,如下面的日志所示。

Using 'openejb.deployments.classpath.exclude=.*/CommonCacheBean.*'
Auto-deploying ejb CommonCacheBean: EjbDeployment(deployment-id=CommonCacheBean)
Jndi(name="java:global/ejbs/CommonCacheBean!my.package.ICommonCache")
Created Ejb(deployment-id=CommonCacheBean, ejb-name=CommonCacheBean, container=Default Stateless Container)

所以有我的问题。有没有办法从OpenEJB上下文中排除单个bean?如果它将通过这种配置方式或通过java代码中的手动操作实现,对我来说无关紧要。

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,我没有设法从上下文中删除bean。虽然在上下文中有一个unbind()方法,但它似乎不适用于OpenEJB上下文。 我成功地用rebind()手动替换bean,但为时已晚,因为它们已经注入另一个bean。

他们解决我的问题的方法是在模拟实现上使用注释@Alternative。我还必须在beans.xml中添加条目以向容器显示这些bean并更改我从@EJB注入@Inject的方式。