我正在使用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代码中的手动操作实现,对我来说无关紧要。
答案 0 :(得分:0)
如果有人有兴趣,我没有设法从上下文中删除bean。虽然在上下文中有一个unbind()
方法,但它似乎不适用于OpenEJB上下文。
我成功地用rebind()
手动替换bean,但为时已晚,因为它们已经注入另一个bean。
他们解决我的问题的方法是在模拟实现上使用注释@Alternative
。我还必须在beans.xml
中添加条目以向容器显示这些bean并更改我从@EJB
注入@Inject
的方式。