2012-07-25 69 views
6

我有一個ejb-3兼容EJB,說EJB 3存根代

@Remote 
interface Hai{ 
    String sayHai(); 
} 
Stateless(name = "xxx", mappedname="yyy") 
public class HaiImpl implements Hai{ 
    public String sayHai(){ 
     return "Hai"; 
    } 
} 

,我需要生成存根此EJB。但我不想使用websphere工具或maven工具。 有沒有什麼方法可以使用jdk生成存根?

當您創建遠程客戶端

Hai hai = (Hai)ctx.lookup("yyy#com.zz.Hai"); 
System.out.println(hai.sayHai()); 

將在WebLogic或JBoss的工作,但在WebSphere中,即使是EJB 3,你需要寫這樣

Object o = ctx.lookup("yyy"); 
Hai hai = (Hai)javax.rmi.PortableRemoteObject.narrow(o,Hai.class); 
System.out.println(hai.sayHai()); 

在這種情況下,如果存根不在客戶端呈現,它會拋出異常,有一種方法可以使用websphere ejb stub生成器工具生成存根。但我不想使用任何平臺特定的工具。

+0

是否需要生成受EJB 2.x互操作性驅動的存根控件或爲什麼必須生成存根控件? – 2012-07-25 11:57:56

+0

請參閱更新問題。 – 2012-07-25 12:22:58

回答

4

不,您必須使用WAS_HOME/bin/createEJBStubs。包含在Java SDK中的rmic命令(通常用於生成存根)不能用於不擴展java.rmi.Remote的「純」EJB 3遠程接口。請注意,如果您使用應用程序客戶端容器(WAS_HOME/bin/launchClient),或者您的「客戶端」是另一臺服務器,則不需要生成存根:容器將爲您生成一個存根。如果您使用不受管理的瘦客戶端,則只需使用createEJBStubs。

0

我爲createEJBStub腳本創建了maven-plugin wrapper

爲什麼?

這使我們能夠構建測試maven項目,作爲我們CI配置的一部分,在部署後針對我們的應用程序運行。

與Maven更具體地在一起,這讓我們的測試項目:

  1. 利用Maven的依賴管理來拉我們發佈到我們的內部關係庫的API罐子
  2. 爲部分創建存根類「生成源」maven生命週期
  3. 運行junit測試用例針對具有EJB的應用程序服務器進行集成測試。