客户端访问许可证:集成EJB和CORBA/CORBA客户端访问EJB(1)

  EJB和CORBA集成能力对于集成基于JAVA或非JAVA应用来说是很重要本文描述了如何实现个EJB和个CORBAC应用相集成它阐述了几个重要集成问题尤其是那些EJB采用JAVA固有或是用户定义对象作为参数或返回值思路方法时涉及问题

  EJB对于用JAVA来开发关键业务应用是非常重要但是业务应用不是孤立存在当今企业需要集成各种应用从而把基于EJB解决方案和现有应用系统集成起来就变得越来越重要了

  在本文中我将介绍说明如何从个非JAVA语言编写应用中访问EJB更加特别地是我将讨论从个CORBAC客户端访问会话和实体Bean(它使用同步IIOP协议进行通信)我没有提到消息驱动Bean尽管你可能想从其它语言编写应用中使用MOM产品来访问它们

  1、RMI-IIOP

  会话Bean和实体Bean使用远程思路方法(RMI)来进行同步通信J2EE1.3要求JAVA客户端使用RMI-IIOPRMI-IIOP采用CORBAIIOP协议这使得RMI-IIOP和CORBA相兼容换句话说不是基于JAVA开发客户端可以通过CORBA和EJB进行通信

  要实现这点你必须使用符合J2EE1.3应用服务器以前EJB规范标准没有要求你去用RMI-IIOP协议而是应用服务器采用了RMI-JRMP或是其它私有协议另外你必须使用符合CORBA2.3.1或更高版本ORB以前CORBA版本没有实现和RMI-IIOP协议进行互操作所必需规范标准尤其是后来集成中CORBA规范标准和JAVA到IDL语言映射规范标准中用值传递对象规范标准

  值类型语言增加了用值来传递对象概念是由RMI引来加入到CORBA中CORBA最初并不支持这项功能;但是这个概念对于实现JAVA和CORBA的间互操作是至关重要

  JAVA到IDL语言映射规范标准定义了如何把JAVA接口映射到CORBAIDL语言这个定义使CORBA分布对象可以访问本来不具有CORBAIDLEJB(还有那些RMI-IIOP分布对象)特别这个规范标准定义了个JAVARMI子集叫RMI/IDL它可以让你映射到IDL用IIOP(或是更通用是GIOP协议)作为通信底层协议

  2、RMI/IDL

  许多RMI/IDL数据类型遵循约束;我们来看下那些最重要类型更详细信息请参看JAVA到IDL语言映射规范标准

  表1显示了JAVA基本类型到IDL映射

  表1:JAVA到IDL映射

   Java OMG IDL
void void
boolean boolean
char wchar
octet


long long
float float
double double



  JAVA包映射为IDL模块RMI/IDL中远程接口映射为IDL接口并具有相对应名字但是那些用JavaBean命名方式用来只读或读写属性思路方法被映射为IDL属性后面我将提到这个

  JAVA中可序列化对象映射为CORBA值类型值类型为CORBA提供了用值来进行传递语义值类型是属于本地不能被远程它们不注册到ORB中也不需要标识符它们值就是它们标识符更详细信息请参阅Professional J2EE EAI和CORBA/IIOP规范标准2.6版

  就象我已经提到过所有JAVA或序列化对象包括JAVA固有和用户定义都将映射为值类型但是这个规则也有些例外----例如当你想把java.lang.String映射到IDL时如果把它定义为常量(final )这个对象将被映射为IDLw在其它情况下包括作为思路方法参数或返回值该对象都被映射为值类型CORBA::WStringValue这个值类型是CORBA模块部分IDL定义如下:

  valuetype WStringValue w;

  这等同于下面IDL定义:

  valuetype WStringValue
{
public w data;
};


  但是要记住种定义能够更干净地映射到JAVA表2列出其它特殊映射情况

  表2:其它重要特殊映射情况

Java OMG IDL
java.lang.Object ::java::lang::_Object
java.lang.String ::CORBA::WStringValue or w
java.lang.Class ::javax::rmi::CORBA::ClassDesc
java.io.Serializable ::java::io::Serializable
java.io.Externalizable ::java::io::Externalizable
java.rmi.Remote ::java::rmi::Remote
org.omg.CORBA.Object Object

  3、实现集成

  后面我将返回来讨论值类型先讨论用户定义再讨论内嵌如Vectors、Collections和Enumerations现在让我们看下CORBA和EJB集成基本方式首先我们需要个EJB在第个例子中我们使用个简单会话Bean它只使用简单数据类型作为思路方法参数和返回值我们没有强行去用值类型(注意:从CORBA客户端访问实体Bean跟访问会话Bean过程)

  这个方式是最简单;但是你不能把它用在复杂接口上好处是:你可以使用不支持值类型ORB许多CORBA产品都是这样(不支持值类型)尤其是那些不是用C实现产品

  这个例子中我将使用C版本ORBacus4.1.0作为CORBAORB使用VC6.0作为编译客户端代码编译器为部署这个例子中EJB我将使用JBoss3.0.0你可以从网上下载ORBacus4.1.0(也可以从IONA网站WebSite上下载)和JBoss3.0.0

  你可以使用任何支持CORBA2.3.1或更高版本ORB产品(只要它支持到C映射)、个相对应C编译器和个支持J2EE1.3规范标准应用服务器理论上讲不需要修改代码;但是如果你使用其它产品改动可能是必要

Tags:  javacorba corba 客户端访问许可 客户端访问许可证

延伸阅读

最新评论

发表评论