2013-02-14 125 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繼承。

我認爲這兩個規範摘錄可以很好地解釋這個問題。

相關問題