3

我正在寻找有关如何通过 CORBA 访问 EJB(或底层 MBean)的教程或任何其他信息。

这就是我发现的全部: http ://www.jboss.org/jbossiiop

我有一个现有的 CORBA 服务器(基于 java,但非标准),我想让它调用我的 JBoss MBean。该 MBean 已经使用 EJB (v2.1) 通过 RMI 公开。

当前的 AppServer 目标版本是 jboss-eap-4.3。


编辑:我希望我的问题太模糊而无法回答,所以这里有一个更新:

我希望在 JBoss 中运行的 EJB 注册到在远程单独服务器上运行的 Corba ORB。至少我认为我会。现有的 CORBA 客户端通过我试图通过 JBoss EJB 实现的定义的 IDL/接口连接到服务。此时,所述客户端连接到同一接口的多个实例,以通过该接口拉取信息并管理本地(同一进程)服务。我希望将 JBoss EJB 作为这个 CORBA IDL 的另一个实现加入。

我对 CORBA 的理解一开始就生疏且薄弱,所以我并没有走得太远。我可以很容易地在 JBoss 中运行 ORB,但是我不清楚如何设置绑定以便“旧版”CORBA ORB 可以找到它。我可以更改 JBoss 实现的任何部分来完成这项工作,但更改其他服务器很困难。

EJB 有没有办法向远程服务器(ala jndi)注册自己?现有客户端是否能够在不添加 jboss 特定类的情况下连接到 Jacorb?

4

2 回答 2

3

简而言之,您必须实现一个适配器,将其部署在 Jboss 中,将其注册到远程 NamingService。在您的适配器实现中,您调用您的 MBean。

现在更详细了 你有一个 CORBA idl,你生成存根和骨架。

interface Stock {
    int getQuote( in string company);
};

您提供必要的实施

public class StockImpl extends StockPOA {
  public int getQuote(String company) {
     //forward a call to MBean here
  }
}

您执行通常的 CORBA 注册工作。就像是:

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(...);
org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

poa.the_POAManager().activate();

NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

NameComponent [] name = new NameComponent[1];

org.omg.CORBA.Object o = poa.servant_to_reference( new StockImpl(orb,poa));
name[0] = new NameComponent( "Stock", "server");
nc.bind(name, o);

orb.run();

现在您的对象已在远程 NamingService 中注册,并且可以通过 CORBA 访问。

您必须在 JBOSS 类路径中包含 CORBA jar。

于 2011-02-27T10:13:06.973 回答
1
  1. Corba orb 是一个套接字监听器,所以最好使用 JBoss 控制下的那个,即标准的 orb:

    ObjectName ORB_NAME = ObjectNameFactory.create("jboss:service=CorbaORB"); ORB orb = (ORB)server.getAttribute(ORB_NAME, "ORB");

  2. 在 JBoss Service mbean 中自动启动 Corba 服务:http: //community.jboss.org/wiki/examplehelloworldservice

  3. 为了避免编译 IDL,您可以使用动态调用接口。看看 Axis2 CORBA 模块是如何做到的:http ://wso2.org/library/2807

  4. 如果您使用 JBoss “all”配置,则不需要在类路径上使用 Orb,这包括 Corba。

于 2011-03-18T12:20:30.640 回答