OpenEJB - 排除单个 bean

OpenEJB - exclude single beans

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

我知道 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 代码中的手动操作来实现,对我来说都没有关系。

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

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