EJB3无状态会话Bean是否允许继承?

时间:2012-06-04 12:34:52

标签: java java-ee-6 cdi ejb-3.1 openejb

假设我有一个无状态bean:

@Stateless(name = "fooBean")
@LocalBean
public class Foo {
...
}

我想创建一个用于测试的模拟(使用CDI)

@Alternative @Specializes
public class FooMock extends Foo {
...
}

我在beans.xml注册模拟,当我用OpenEJB运行它时,我得到以下异常:

...
Caused by: javax.naming.NameAlreadyBoundException:
openejb/Deployment/fooBean/com.company.Foo!LocalBeanHome

在我看来,容器为Foo创建了一个界面,因为@LocalBean现在也由FooMock实现。@Stateless。 OpenEJB尝试使用相同生成的接口的相同名称绑定这两个类,这是不可能的。

当然,如果我在@LocalBean课程中发表评论Foo和{{1}},那就可以了。

有任何想法或建议要解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

而是做类似的事情:

@Local
public interface Foo {
...
}

@Stateless
public class FooBean implements Foo {
...
}

然后做你的模拟。

@Alternative
@Specializes
public class FooMock implements Foo {
...
}

但是我建议你看一下Arquillian它会让你的测试变得如此简单,而不需要@Alternative和特殊的beans.xml条目进行测试。