Apusic应用处事器和CORBA互操纵
CORBA(Common Object Request Broker Architecture, 民众工具请求署理体系布局)是由OMG(工具打点组织,Object Management Group)提出的应用软件体系布局和工具技能类型,被遍及的用来开拓漫衍式系统。Apusic应用处事器是以RMI-IIOP(Remote Method Invocation Internet Inter-ORB Protocol)协议为基本完身漫衍式的工具的长途会见,因此可以和CORBA工具举办相互挪用。而且,Apusic应用处事器还完整的实现了CORBA-EJB映射类型,可以或许在多个应用处事器实例和CORBA客户端之间流传事务、安详等上下文信息。CORBA和EJB的互操纵类型包括以下四个方面: EJB接口到CORBA接口的映射;
JNDI名字到CORBA名称处事(CosNaming )的映射;
EJB和CORBA之间的事务流传;
EJB和CORBA之间的安详流传。
本文将通过一个典型展示CORBA客户端会见陈设在Apusic上的EJB。固然这是Apusic和CORBA互操纵最简朴的一个方面,而且不涉及安详和事务的流传,但已经显示了Apusic在互操纵方面的本领和开拓的一般步调。
首先先容一下处事器和客户端的开拓运行情况。处事器端的情况为:
Windows 2000 Server
JDK1.4.2
Apusic应用处事器3.0
客户端的情况为:
Windows 2000 Professional
JDK1.4.2
Apusic应用处事器完全支持尺度的EJB-CORBA映射,也就是说,EJB的home和remote也是CORBA工具。我们可以利用JDK提供的RMI编译器rmic -idl为EJB发生CORBA视图的IDL接口。用来定位EJB home接口的JNDI(Java naming service)被映射成CORBA naming service,这样,CORBA客户端就能查找和定位home接口并象CORBA工具一样利用它们。下图描写了CORBA客户端会见EJB的一般步调:这些步调包罗:
开拓并陈设EJB;
利用RMI编译器rmic -idl为EJB长途接口发生IDL;
利用CORBA IDL编译器按照客户端的措施语言为客户端产保留根(stub);
设置EJB处事器利用CORBA名称处事。Apusic缺省就利用CORBA名称处事作为JNDI 处事的提供者;
CORBA客户端在CORBA名称处事中查找和定位EJB;
CORBA客户端象会见普通CORBA工具一样会见EJB;
首先开拓一个EJB模块,编译并陈设到Apusic应用处事器上。这个例子中的EJB很是简朴,是一个Stateless Session Bean,只包括一个业务要领sayHello。
public java.lang.String sayHello(java.lang.String name) {
String result = "hello, " + name;
System.out.println("invoke sayHello() : " + result);
return result;
}
然后利用RMI编译器rmic -idl为EJB长途接口发生IDL:
rmic -idl -noValueMethods
-classpath %apusic_home%/lib/apusic.jar;../ejb/build
-d idl samples.ejb.Hello samples.ejb.HelloHome
理论上可以利用任何CORBA类型支持的措施语言开拓CORBA客户端。本典型展示的是Java CORBA客户端的开拓。利用JDK1.4.2提供的idlj编译上一步获得的IDL:
idlj -emitAll -i ./idl -i %java_home%/lib
-fclient
-pkgPrefix java apusic
-pkgPrefix javax apusic
-pkgPrefix samples apusic
-td src
./idl/samples/ejb/Hello.idl
idlj -emitAll -i ./idl -i %java_home%/lib
-fclient
-pkgPrefix java apusic
-pkgPrefix javax apusic
-pkgPrefix samples apusic
-td src
./idl/samples/ejb/HelloHome.idl
留意,我们为IDL文件中的java、javax和samples模块在生成代码时增加了“apusic”作为package的前缀,这样可以制止同Java焦点API的斗嘴。
JDK1.4.2提供的idlj编译器生成的Java代码包括了bug,必需手工变动这些错误。将类_Exception.java,CreateException.java和RemoveException.java中的_read和 _write要领注释或删掉。
这时,我们按照IDL编译器编译生成的Java文件,提供客户端实现,主措施的代码片段如下:
ORB orb = ORB.init(args, null);
// Look up the HelloHome, create an Hello and use it.
NamingContextExt nc =
NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
HelloHome home =
HelloHomeHelper.narrow(nc.resolve_str("ejb/CORBAClientSample"));
Hello hello = home.create();
String str = (String) hello.sayHello("apusic,corba client");
System.out.println(str);
System.exit(0);
从上面的代码中我们看到了CORBA客户端如安在CORBA名称处事中查找和定位EJB,而且如何象会见普通CORBA工具一样会见EJB。
最后我们编译并运行客户端。留意,我们并不需要编译所有idlj生成的Java源文件,只要编译包apusic.sample.ejb和我们编写的客户端主措施。Java编译器会按照类的毗连环境自动编译类中引用的其他类。
javac -d ../build -sourcepath ./ apusic\samples\ejb\*.java
javac -d ../build -sourcepath ./ CorbaClient.java
确认EJB已经陈设在Apusic上而且处事器正常运行。在呼吁行启动CORBA客户端,通过启动参数汇报客户端Apusic的位置和端口,来担保客户端ORB的正确初始化。假定Apusic运行在本机上,端口为6888:
java CorbaClient -ORBInitialHost localhost -ORBInitialPort 6888
假如前面的步调都正确完成,我们将在客户端的屏幕上看到: hello, apusic,corba client
#p#分页标题#e#
这个例子只是简朴的展示了CORBA客户端可以或许会见EJB组件的业务要领。实际上CORBA和EJB的互操纵巨大的处地址于事务和安详的映射,因此要求开拓者对CORBA类型和开拓较量熟悉。并且Java到IDL的映射大概碰着许多问题,譬喻:ValueType映射,荟萃的利用等,这就使CORBA客户端会见EJB在许多环境下不能乐成。纵然如此,Apusic支持和CORBA的互操纵,依然对我们集成已有的CORBA系统、开拓异构情况的漫衍式应用提供了很大的辅佐,只是对开拓人员的技能要求较量高。