2012-07-25 70 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的应用程序服务器进行集成测试。