在JBoss中实现CORBA接口

时间:2011-02-23 15:47:55

标签: jboss ejb corba iiop

我正在寻找有关如何通过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)注册自己? 现有客户端是否能够连接到Jacorb而不添加特定于jboss的类?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

  1. Corba orb是套接字监听器,所以最好使用JBoss控制下的套接字监听器,即标准orb:

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

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

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

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