Jakarta ee 重写EJB3无状态会话bean';s方法;纯粹的;班

Jakarta ee 重写EJB3无状态会话bean';s方法;纯粹的;班,jakarta-ee,ejb,ejb-3.0,Jakarta Ee,Ejb,Ejb 3.0,我们有一个带有EJB3.0模块的应用程序。我们希望覆盖EJB实现中的业务逻辑。可能吗 一旦重写,如何查找或注入被重写的会话bean public interface TestRemote { public String result(String arg1, String arg2); } @Stateless public class TestBeanOne implements TestRemote { public String result(String arg1, S

我们有一个带有EJB3.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;
}

是的,代码是可能的,您只需要对其进行注释。注释可以被部署描述符覆盖。

您应该理解,EJB本质上仍然是一个简单的Java类。Java类可以实现的一切都可以通过EJB实现。
因此,只需像查找任何会话Bean一样查找类。

假设
TestBeanTwo
类没有目的性的
@Stateless
,该类将不是无状态会话Bean,因此将无法作为EJB进行查找或注入。即使使用
@Stateless
ejb jar.xml
文件中的声明,
TestBeanTwo
bean类也不会公开
TestRemote
接口,而仅仅是一个恰好有
公共字符串结果(字符串,字符串)
可用的无接口视图

EJB3.1规范在
4.9.2.1会话Bean超类
(第121页)一节中指出:

一个会话bean类被允许拥有本身就是会话bean类的超类。但是,对于这种情况,没有适用于注释或部署描述符处理的特殊规则。为了处理特定的会话bean类,所有的超类处理都是相同的,不管这些超类本身是否是会话bean类。在这方面,将会话bean类用作超类仅代表实现继承的方便使用,而没有组件继承语义

在规范的同一页上:

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


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

检查是否可行需要最少的努力和时间,始终先尝试,然后提出遇到的问题。