在 JBoss 中实现 CORBA 接口
Posted
技术标签:
【中文标题】在 JBoss 中实现 CORBA 接口【英文标题】:Implementing CORBA interface in JBoss 【发布时间】:2011-02-23 15:47:54 【问题描述】:我正在寻找有关如何通过 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?
【问题讨论】:
这不是太模糊,只是你可能用一只手就能数出***上的CORBA开发人员的数量。 @skaffman 在我掌握了 CORBA 之后,我必须找到一个 Ada 问题。 【参考方案1】:简而言之,你必须实现一个适配器,在 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。
【讨论】:
谢谢!这行得通。我希望使用 JBoss CORBA 机制(基于反射)并避免使用 idlj 以保持 CORBA 的缺陷。我可能最终会使用反射重新实现某些东西,以避免为每个 MBean 编写新的 CORBA 适配器。【参考方案2】:Corba orb 是一个套接字侦听器,因此最好使用 JBoss 控制下的那个,即标准 orb:
ObjectName ORB_NAME = ObjectNameFactory.create("jboss:service=CorbaORB"); ORB orb = (ORB)server.getAttribute(ORB_NAME, "ORB");
要自动启动您的 Corba 服务,请在 JBoss 服务 mbean 中执行此操作: http://community.jboss.org/wiki/examplehelloworldservice
为避免编译 IDL,您可以使用动态调用接口。 看看 Axis2 CORBA 模块是如何做到的:http://wso2.org/library/2807
如果您使用 JBoss “all”配置,则在类路径中不需要 Orb,这包括 Corba。
【讨论】:
以上是关于在 JBoss 中实现 CORBA 接口的主要内容,如果未能解决你的问题,请参考以下文章