我正在使用junit和OpenEJB容器测试我的应用程序,以便为我的bean提供上下文。它从类路径中找到所有bean并启动它们。不幸的是,有一些bean我想从上下文中删除,这样我就可以用其他实现替换这些bean,模拟某些功能。
我知道openejb.deployments.classpath.exclude的财产。我甚至尝试像this SO question中建议的那样使用它,如下所示的properties.put("openejb.deployments.classpath.exclude", ".*/CommonCache.*");。
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代码中的手动操作来实现,对我来说都无关紧要。
发布于 2017-06-28 13:55:16
如果有人感兴趣,我没有设法从上下文中删除bean。尽管上下文中有一个unbind()方法,但它似乎不能在OpenEJB上下文中工作。我成功地用rebind()手动替换了beans,但为时已晚,因为它们已经被注入到另一个beans中。
我解决问题的方法是在模拟实现中使用注释@Alternative。我还必须在beans.xml中添加条目,以显示容器这些bean,并将它们从@EJB注入到@Inject。
https://stackoverflow.com/questions/44675177
复制相似问题