2013-02-14 80 views
0

我们有一个EJB 3.0模块的应用程序。我们想要覆盖EJB实现中的业务逻辑。可能吗?用“纯”类覆盖EJB 3无状态会话bean的方法

一旦我重写,如何查找或注入重写的会话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; 
} 
+0

只需花费很少的精力和时间来检查是否可行,总是先尝试一下,然后提出遇到的问题。 – 2013-02-15 04:00:26

回答

0

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

0

您应该明白,EJB仍然是一个简单的Java类。使用EJB可以实现Java类的所有功能。 因此,只要按照您的要求查找任何会话Bean即可。

0

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

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

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

及规范在同一页上:

由一个特定的会话bean暴露客户的意见没有被一个子类,也恰好定义会话bean继承。

我认为这两个规范摘录可以很好地解释这个问题。

相关问题