【发布时间】:2012-06-08 12:42:49
【问题描述】:
假设我有一个无状态 bean:
@Stateless(name = "fooBean")
@LocalBean
public class Foo {
...
}
我想创建一个用于测试的模拟(使用 CDI)
@Alternative @Specializes
public class FooMock extends Foo {
...
}
我在 beans.xml 中注册了 mock,当我使用 OpenEJB 运行它时,我得到以下异常:
...
Caused by: javax.naming.NameAlreadyBoundException:
openejb/Deployment/fooBean/com.company.Foo!LocalBeanHome
在我看来,容器为Foo 创建了一个接口,因为@LocalBean 现在也由FooMock 实现。 OpenEJB 试图将两个类同名的同一个生成接口绑定,这是不可能的。
当然,如果我在Foo 类中注释掉@Stateless 和@LocalBean,它就可以正常工作。
有解决这个问题的想法或建议吗?
【问题讨论】:
-
应该可以继承 EJB 类;子类不会是 EJB,但如果您只是在测试,那也没关系。你得到了什么例外?
标签: java java-ee-6 cdi ejb-3.1 openejb