6

我有一个兼容 ejb-3 的 ejb,比如说

@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 存根生成器工具生成存根。但我不想使用任何平台特定的工具。

4

2 回答 2

4

不,您必须使用 WAS_HOME/bin/createEJBStubs。Java SDK 中包含的 rmic 命令(通常用于生成存根)不能用于未扩展 java.rmi.Remote 的“纯”EJB 3 远程接口。

请注意,如果您使用应用程序客户端容器 (WAS_HOME/bin/launchClient) 或您的“客户端”是另一台服务器,那么您不需要生成存根:容器将为您生成一个。如果您使用的是非托管瘦客户端,则只需要使用 createEJBStubs。

于 2012-07-25T16:27:44.700 回答
0

我为 createEJBStub 脚本创建了一个maven-plugin 包装器。

为什么?

这使我们能够构建测试 maven 项目,这些项目作为 CI 设置的一部分在部署后针对我们的应用程序运行。

更具体地说,与 maven 一起,这使我们的测试项目能够:

  1. 利用 Maven 依赖管理将我们发布的 API jar 提取到我们的内部 nexus 存储库
  2. 创建存根类作为“生成源”maven 生命周期的一部分
  3. 使用 EJB 针对应用程序服务器运行 junit 测试用例以进行集成测试。
于 2013-05-08T17:06:32.740 回答