EJB 3 存根生成

7

我有一个符合ejb-3标准的ejb,例如

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

我需要为这个EJB生成存根(stub),但是我不想使用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存根生成器工具生成存根。但我不想使用任何特定于平台的工具。

需要生成存根是由于EJB 2.x的互操作性还是为什么你必须生成存根? - Mikko Maunu
2个回答

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依赖管理从我们发布到内部nexus存储库的API jar中提取依赖项
  2. 作为“generate-sources”maven生命周期的一部分创建Stub类
  3. 针对具有EJB的应用程序服务器运行junit测试用例以进行集成测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接