我刚刚开始使用CORBA。基本上,我必须实现充当CORBA客户端的Java应用程序。
此时,我主要使用的是Sun JDK(JDK6)工具,包括idlj.exe(用于编译我给出的IDL)和orbd.exe(用于测试我的代码),到目前为止,我已经能够使用idlj和IDL来创建Java类,我还编写了一个测试服务器应用程序和测试客户端应用程序,它们现在都在工作(我必须编写小型服务器应用程序,以便我可以测试我的客户端应用程序)。
正如我上面所说,我正在使用orbd.exe作为我测试的ORB。
最初,我有orbd.exe,我的Java服务器应用程序和我的Java客户端应用程序,它们都运行在同一台机器上,并且运行良好。
我还在一个更加分散的配置中进行了测试,在那里我在另一台机器(testxp)上运行orbd.exe和我的Java服务器应用程序,在另一台机器上运行我的Java客户端应用程序,这样就可以了。
我的问题如下:我见过很多文件,网页等。 CORBA的图表显示了两个ORB,例如,一台机器上的服务器应用程序和ORB,以及另一台/第二台机器上运行的客户端应用程序和另一台/第二ORB,两个ORB相互通信:
客户端应用==> ORB1 ----> ORB2 ==>服务器应用
然而,在我的测试中,使用orbd.exe作为ORB,我只使用了一个ORB。
所以,我想知道如何在上面有两个ORB的情况下配置测试配置?
我可以使用orbd.exe执行此操作,还是orbd.exe无法在该类型的配置中使用?
另外,如果可以使用orbd.exe完成,我该怎么做?
谢谢, 吉姆
答案 0 :(得分:1)
CORBA是一种在网络中传达应用程序的架构和基础架构。 ORB是对IIOP的调用进行序列化(编组)和反序列化(解组)的组件。使用CORBA,您可以使用C#编写代码(使用IIOP.NET)并使用Java与服务器进行通信。
所以,你是对的,在ORB之间进行沟通。
|客户端应用程序| < ==> ORB1< - (IIOP) - > ORB2< ==> |服务器应用|
ORBD是带命名服务器的ORB。理想的情况是,您只有一个名称服务,您可以阅读有关名称服务here的信息。
最后,您有很多方法可以在ORB之间启动通信。 (a)激活POA中的servant并调用方法* poa.object_to_string(servant)*,将该字符串写入文件,然后使用* poa.string_to_object(fileAsString)*在客户端中读取它。 (b)定义服务器主机和端口并使用corbaloc。 (c)在名称服务器(最佳选项)中订阅。
尝试在测试中使用三个过程。名称服务器,客户端,服务器。
PS:我喜欢JacORB然后是JDK Orb
编辑: 添加一些代码来帮助:
orb = org.omg.CORBA.ORB.init(args, props);
org.omg.CORBA.Object obj = this.orb.resolve_initial_references("RootPOA");
this.rootPOA = POAHelper.narrow(obj);
POAManager manager = this.rootPOA.the_POAManager();
manager.activate();