用“纯”类覆盖EJB 3无状态会话bean的方法

时间:2013-02-14 05:21:29

标签: java-ee ejb ejb-3.0

我们有一个带有EJB 3.0模块的应用程序。我们希望覆盖EJB实现中的业务逻辑。有可能吗?

一旦我覆盖,如何查找或注入被覆盖的会话bean?

public interface TestRemote {
    public String result(String arg1, String arg2);
}

@Stateless
public class TestBeanOne implements TestRemote {
    public String result(String arg1, String arg2) {
        return "TestBeanOne " + arg1 + arg2;
}

//Is the below code possible?
public class TestBeanTwo extends TestBeanOne {
    public String result(String arg1, String arg2) {
        return "TestBeanTwo " + arg1 + arg2;
}

3 个答案:

答案 0 :(得分:0)

是的,代码是可能的,你只需要注释它。注释可以被部署描述符覆盖。

答案 1 :(得分:0)

您应该理解EJB仍然是一个简单的Java类。使用EJB可以实现Java类的所有功能。 所以只要像任何会话Bean那样查找类。

答案 2 :(得分:0)

假设TestBeanTwo类没有故意使用@Stateless,该类将不是无状态会话bean,因此无法查找或注入EJB。即使使用@Statelessejb-jar.xml文件中的声明,TestBeanTwo bean类也不会公开TestRemote接口,而只是一个碰巧有public String result(String, String)接口的无接口视图{1}}可用。

EJB 3.1规范在4.9.2.1 Session Bean Superclasses(第121页)一节中说明:

允许会话bean类具有自己的会话bean类的超类。但是,对于此案例,没有适用于注释处理或部署描述符的特殊规则。出于处理特定会话bean类的目的,无论超类本身是会话bean类,所有超类处理都是相同的。在这方面,将会话bean类用作超类仅仅代表了实现继承的方便用法,但没有组件继承语义。

在规范的同一页面上:

特定会话bean公开的客户端视图不会被也定义会话bean的子类继承。

我认为规范中的这两个摘录很好地解释了这个问题。