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;
}
4

3 回答 3

0

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

于 2013-02-14T11:08:57.087 回答
0

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

于 2013-02-14T05:37:07.410 回答
0

假设TestBeanTwo该类不是@Stateless故意的,则该类将不是无状态会话 bean,因此无法作为 EJB 查找或注入。即使在文件@Stateless中有声明, bean 类也不会暴露接口,而只是一个碰巧可用的无接口视图。ejb-jar.xmlTestBeanTwoTestRemotepublic String result(String, String)

EJB 3.1 规范在该部分4.9.2.1 Session Bean Superclasses(第 121 页)中说:

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

在规范的同一页面上:

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

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

于 2013-02-15T00:04:14.277 回答