Java与CORBA技术结合的前景展望

随着Internet、Intranet及Extranet在全球范围内的普及和发展,下一代的Web必须能够处理企业-企业(business-to- business)交易和客户-企业(consumer-to-business)多步骤交易过程中的复杂需求。为了实现这一目的,Web必须发展成为一种能够执行在线交易软件的一种成熟的客户机/服务器结构。现在的HTTP/CGI结构存在一些不足,它不能满足上述这些新的要求。而各种不同的CGI扩展规范,例如cookie、Microsoft Internet Services API(ISAPI)、Netscape Server API(NSAPI)以及Active Server page等,也都不能从根本上解决问题。为了能够满足不断发展的电子商务的要求,Web需要有分布式对象的功能。这就导致了人们所称的下一波的 Internet革命──对象化的Web(Object Web)有产生。


  建立Object Web的一种可行的方法,是使用COBRA(通用对象请求代理结构, Common Object Request Broker Architecture)和Java。如果没有Object Web的话,对大多数对企业级的客户机/服务器市场有兴趣的厂商,以及喜欢面向对象编程的人而言,CORBA及Java将只不过是一种容易使用的技术而已。因此业界都希望能将COBRA和Java各自的功能结合起来形成一种新的Object Web环境。软件界中除了Microsoft以外几乎所有其它的厂商所组成的联盟都力促COBRA和Java的结合以建立一个通用的Object Web环境。而Microsoft目前也正要据它的ActiveX/DCOM技术建立自己的Object Web环境。本文首先将分别对CORBA和Java进行介绍,接下来将会详述CORBA/Java以及Object Web的各种细节。


  首先,那些Java的拥护者必须清楚,CORBA不止是一种对象请求代理(ORB),它同时也是一个非常完整的分布式对象操作平台。CORBA能跨越网路、程序语言、组件界限以及操作系统,因此能够大大扩展Java应用软件的使用范围。


  对于那些CORBA的支持者,我们必须要指出的Java也不光只是一套能和CORBA结合的程序语言。Java不仅是一种面向对象的语言,同时也是具备对象功能的可移植性操作系统。Java允许CORBA对象在各种不同的机器上执行,无论是大型机、网路电脑(NC),甚至是蜂窝式电话等。Java简化了大型CORBA系统的程序分发──Java利用字节码使得用户开发的对象能到处运行,这同时也为CORBA便携式代理提供了一个切实可行的方案。现在人们都知道Java几乎是开发客户机/服务器CORBA对象的最理想的语言。它内建的多线程(multithreading)、垃圾收集(garbage collection)及错误管理(error management)功能,使人们可以很容易开发出可靠的面向对象的应用。


  这个方案成功的关键在于这两种技术的基础结构能够彼此互补。Java弥补了CORBA的一些不足,而CORBA则可以为Java带来可移植的面向对象的软件环境。


Java和COBRA如何结合


  对于如何将COBRA技术和Java技术结合起来,业界并目前没有一个统一的标准。这主要是因为推动COBRA发展的对象管理集团(OMG,Object Management Group)及推动Java发展的JavaSoft之间无法很清楚地划清界线。举个例子来说,当JavaSoft为不同的Java客户端之间,通过虚拟机(VM)的方式建立远程方法革新(Remote Method Invocation,RMI)时,它就已经在许多方面向OMG看齐了。以制定分布式对象标准为己任的OMG当然希望COBRA能成为Java的分布式对象模型,而JavaSoft则希望创建自己的分布式对象模型,但它又迟迟提不出自己的不同于COBRA的对象结构。


  不过据称这场分岐可能很快就要结束了。JavaSoft将采纳CORBA做为分布式的对象模型这个模型在OMG的帮助之下,将能够在CORBA/IIOP(Internet Interoperable ORB Protocol)上执行RMI API。今年六月所发布的这个消息,已经对消除CORBA及Java两个阵营之间的分岐起到了明显的效果。接下来我们介绍JavaSoft计划如何将CORBA加入Java的核心中。


  Java开发包(Java Development Kit;JDK)1.2版(97年第三季推出),包含一组纯粹由Java所发展的CORBA ORB。这组ORB将是Joe的一小部分,全部以Java开发的ORB将会包含在Sun的NEO这项产品中。此外,JDK 1.2版将会支持Java IDL(Java接口定义语言,Java Interface Definition Language),Java IDL是一套能从IDL中产生出CORBA识别标签及程序框架的开发环境。JDK 1.2版同时也将包含一组完全用Java所开发的CORBA命名服务(Naming Service)。Java RMI将运行在CORBA/IIOP结构上。这意味着JavaSoft将放弃目前所建立的专有ORB结构。


  将来的JDK将会支持Enterprise JavaBeans功能。Enterprise Beans将利用CORBA/IIOP以及其它的一些协议来与客户端的Beans进行通信。最重要的是, Enterprise JavaBeans将会支持Java交易服务(Java Transaction Service;JTS)功能,这个功能将建立在CORBA的对象交易服务(Object Transaction Service;OTS)的基础上。


  先前宣布的这些消息,对于低端以及高端的CORBA/Java市场有着非常深远的影响。在低端的市场方面,用户不仅可以从JDK提供厂商(即使是Microsoft也有可能)获得免费的CORBA/Java ORB,同时还可取得IDL开发环境。在高端的市场方面,用户将能取得具备交易功能的JavaBeans。交易功能为Beans带来ACID四种保护功能,


亦即不可分割性(Atomic)、一致性(Consistent)、隔离性(Isolated)以及持久性(Durable)。这个功能同时具有连接组件的功能,用户可利用这个功能使各个厂商所开发的Beans达到同步化。因为上述的各种原因,OMG和JavaSoft才有可能求同存异,实现COBRA与Java的顺利结合。
说了半天,读者可能要问,CORBA/Java ORB到底是什么呢?它实际上是为了具备可移植性而完全由Java所开发的CORBA/IIOP ORB。这个ORB必须要能够从CORBA IDL产生出能和Java语言相连结的组件。除此之外,由这个IDL编译器所产生的程序代码,必须完全由Java语言所组成,使用者只要下载这些程序码后,就能在任何具备Java运行环境的机器上运行。


  现在已经有三家公司推出了符合这些条件的ORB,它们分别是Sun的Joe、Iona的OrbixWeb以及Visigenic/Netscape的VisiBroker for Java。这三个ORB都得到了许多厂商的强力支持。Joe将会包含在JDK 1.2版中。OrbixWeb是ORB开发厂商的龙头老大Iona所推出的产品。VisiBroker for Java这套产品目前不但随着Netscape Communicator及Enterprise Server一起推出,而且也即将附加在Oracle的asp.cn/ class=wordstyle>网络计算结构(Network Computing Architecture,NCA)、Sybase的Jaguar,以及Novell的InternetWare等三项产品中。除了这些纯粹由Java所发展的ORB之外,许多由C++所开发出来的ORB现在也提供了与Java的结合能力,例如Expersoft的PowerBroker、IBM的Component Broker及BEA即将推出的ObjectBroker等就是这样的产品。

Web功能难以割舍
  Web起初只是一个用来出版及广播静态电子文件的一个媒体。w就基本功能而言,它只不过是一个以存放URL文件为主的巨型档案服务器。到了1995年后期,随著三层客户机/服务器CGI结构的推出,它才开始具备一些基本的交互操作功能。CGI目前已经应用在各种服务器环境中。
  CGI的HTTP结构使用起来不仅效率很低而且无法认证,同时它也不适用于开发目前流行的客户机/服务器应用程序。对具备面对对功能的Java客户端程序来讲, CGI并不是一种很合适的选择。为了打破HTTP/CGI的这些限制,Web服务器的开发厂商在这方面下了很大的功夫。厂商所研究出来的解决方案,通常是以他们专用的服务器扩展功能及新的API的方式表现出来的,如NSAPI、ISAPI、Next的WebObject以及WinCGI等。
  为了解决HTTP无法认证的问题,部分扩展规范要求客户端浏览器通过cookie(存在客户端的一些服务器信息)技术来实现认证的要求。其他的规范则更进一步的利用服务器端交易对象的特性来扩充cookie的功能,并且使用交易对象来代表使用者。然而这些尝试大部分都只符合特定的结构,而且还存在很严重的缺陷。
  此外,CGI的执行速度很慢。每当接到一个新的客户端请求时,CGI都会产生一个新的运行过程来满意这个请求。为了解决这个不足,许多厂商提出的扩展规范都提供了常驻内存的工作模式,例如DLL方式的执行程序(In-process DLL)、服务器plug-in、甚至是以ORB为基础的对象等。一般而言,为了有效的处理客户端的请求,服务器端会不计一切代价的将这个服务程序保留在内存中。但这样又会带来扩展规范标准不统一(或要求特殊操作平台)的问题。
  上面这些建议最主要的问题在于他们需要通过HTTP及Web服务器来调节客户端及服务器上所执行的对象。在客户端上的对象不能直接使用服务器上的对象。我们知道,使用HTTP表格只不过是客户机/服务器交互操作最基本的一个要求。但这种笨拙的操作模式并不适用于成熟的客户机/服务器应用软件,因为这些软件中的组件要求具有很强的交互操作性。此外,这种操作模式也没有弹性。
  到了1996年,Web终于开始具有了对象功能。Java applet是迈向开发客户机/服务器结构Object Web的第一步。在发展Object Web的过程上,虽然Java是必要可少的部分但但光有Java却还是不够的。Java需要具有分布式的基础设施才能变得更完整,而CORBA则刚好能弥补Java的这个不足。
  1997年6月,随着CORBA/Java ORB与Netscape Communicator一起面世,但意味着Object Web真正的诞生了。在Web服务器软件方面,每一套Netscape Enterprise Server 3.0版都同时包含有CORBA/C++及CORBA/Java这两种ORB一起出售。Java及CORBA交互操作的对象技术,是Object Web发展的第一个步骤。

Object Web中的交互操作

  在Object Web结构中,以Web为基础的客户端及服务器间的交互操作关系变得十分的简单∶
  1、Web浏览器下载用HTML编写的网页文件。在这种要求下,这个文件中将同时包含与Java applet的连结。

  2、Web浏览器从HTTP服务器中下载Java applet。HTTP服务器取得这些applet,并以字节码的型式将applet传送给浏览器。

  3、Web浏览器载入applet。这些applet必须先通过Java的安全检查,才会下载到本地硬盘上。

  4、Applet对CORBA服务器提出对象服务请求。Java applet中可以包含由IDL所产生的客户端识别标签,利用这个识别标签,applet就可以对CORBA服务器上的对象提出服务请求。Java applet以及CORBA对象之间的通信连接可以持续存在,直到任何一方决定中断连接。需注意的是要达到这项功能,用户必须使用具备IIOP功能的防火墙(firewall)设备。目前,由Iona所推出的WonderWall是唯一符合这一要求的产品。不久Netscape也很有可能将推出IIOP防火墙设备。

  5、服务器上的对象能够选择性地为用户产生下一页的HTML文件。当服务器准备好下一页文件后,它会通知客户端浏览器到特定的URL位址去下载这一页文件。

从Object Web结构来看,服务器通常不需要具备动态产生网页的功能。要在客户端上执行的软件会以单一HTML网页、内含象applet(或是Object标签中的JavaBeans)组件的方式封装起来。与HTTP/CGI结构相比,CORBA让使用者能快速地与服务器实现并互操作的效果,使用者只需用鼠标单击HTML文件的组件,而不需要再切换到不同的网页就能获得实现交互操作的目的。
CORBA/Java扩展Web结构

  利用CORBA/Java来扩展Web基本结构可立即看到下面两个好处∶

  1、CORBA避开了CGI的瓶颈困境。CORBA允许客户端程序直接调用服务器上的对象方法。客户端程序利用事先编译过的识别标签,直接将执行时所需要的参数传送给服务器,或是利用服务器上的CORBA动态请求服务程序,立即产生所需的参数。无论是那一种方式,服务器都会利用事先编译好的框架程序,直接接收客户端的服务请求。使用者可以调用服务器上任何一组由IDL定义出来的对象程序,而不光只是HTTP定义的服务程序。此外,使用者还可以传递任何形式的参数类别,而不再只局限于字符串型的参数。这说明这种结构对客户机/服务器环境的负载会很小,尤其是和原来HTTP/CGI的结构相比效果更为明显。

  2、CORBA提供了一种伸缩性很强的服务器与服务器之间进行通信的结构。每个服务器上的通信对象都可以利用CORBA ORB来相互通信。这些对象可以同时在多个服务器上执行,以便使来自客户端的各种服务请求能达到负载平衡。ORB会将服务请求分配给第一个可用的对象,同时会随着请求的增加而增加新的对象。通过对通信进行限制和相关的CORBA服务程序,CORBA允许服务器上的对象能以一致的行为来运行。而CGI应用程序会造成系统功能的瓶颈,因为它必须处理成千上万的服务需求。CGI不能将这些负载分散到不同的处理程序或是不同的处理器上执行。

三层式CORBA/Java Object Web

  Object Web上每个新的应用程序,都将设计或封装成组件的型式。用户可以在CORBA IDL中利用对象的接口来封装现有的程序代码。几乎每一种程序语言所编写出来的程序代码都能重新封装。举例来说,利用CORBA,用户可以像变魔术一样的使一百多万行COBOL程序看起来像是一个对象。任何由IDL所创建的对象,都能够以初始类别(first class)的方式运用在Object Web中。这种方法之所以能成功,是因为CORBA同Java一样,将对象的接口和对象的运行分得很清楚。
  一些主要的asp.cn/ class=wordstyle>电脑公司,包括Sun、IBM/Lotus、Netscape、Oracle、Sybase、Novell以及BEA等,都非常看好Object Web这个重量级的应用软件。这些公司同时选择CORBA/IIOP及JavaBeans作为与公司其它产品之间立即可使用的高级软件沟通方案。下面我们通过三层式结构(three-tier)的客户机/服务器结构来详细介绍一下Object Web。

◆客户端(client)

  结构中的第一层是由传统的Web浏览器及全新以Web为中心的桌面环境构成。相对于如今静态的网页而言,这些新对象将更能代表真实世界事物的样子。举例来说,用户将可以看到对象容器中包含有人、物体以及其它的对象容器。这个动态的网页内容,是由装载着可移动式对象容器的便携式容器软件内嵌的JavaBeans运行所产生的整体效果,像HTML网页或Jars等都可以算是便携式的容器软件。用户可以利用拖拉的动作或直接操作表格的方法来与这些对象达到交互操作的效果。位于客户端的Beans不仅可以和容器软件中其它客户端的Beans交互操作,同时也能和服务器上的Beans交互操作。

  此外,利用CORBA的事件或回叫(callback)模式,服务器上的Beans将可以直接调用客户端的对象程序。浏览器可以利用HTTP协议来下载Web网页、Jars以及图象文件等,而使用CORBA作为Java客户端到服务器,以及服务器到客户端的传输协议。

◆中间层(middle tier)

  结构中的中间层运行在每个服务器上,其主要的功能是为HTTP及CORBA客户端提供服务。几乎每种操作平台上的服务器都支持CORBA/HTTP这两种组合功能,如Unix、NT、OS/2、NetWare、MacOS、OS/400、MVS及Tandem NonStop Kernel等

CORBA对象将商业原则(business logic)封装到对象中,并在这个结构中起着中间接口应用程序服务器的作用,这些CORBA对象最后很有可能被封装成Enterprise JavaBeans。这些对象利用CORBA/IIOP与客户端的JavaBeans进行交互操作。一些可伸缩性差一些的软件,也可以利用HTML服务器网页上的script功能来调用这些对象。举例来说,Netscape的Web应用接口(Web Application Interface,WAI)就可以对应用软件提供这种服务。

  服务器上的CORBA对象会利用CORBA ORB来与其他服务器上的对象进行交互操作。这些对象也可以利用SQL/JDBC(Java数据库互连)或其它中间件(Middleware)来与第三层结构中现有的服务器应用软件通信。用户甚至还可以使用CORBA/IIOP服务器主干来作为普通数据的传送通道。这就是Oracle用来建立数据Plug-in的技术。

  现在I-Kinetics及Visigenic这两家公司,也推出了能将JDBC运用在IIOP上的数据传输软件。
  中间层的这个结构同时也必须提供服务器端“组件协调者(component coordinator)”的功能,这项功能也称为对象的TP纠察员(TP monitor)。这些组件协调者实际上是建立在ORB上的TP monitor。这些组件协调者不是用来管理远程的程序,而是用来管理对象。组件协调者会预先改变对象的共同成员、平衡对象的负载、提供容错的能力,并且协调多个组件之间的通信行为。如果没有组件协调者的话,根本无法管理服务器中成千上万的对象,而这项管理的功能却又是Object Web所需具备的能力。

  在以CORBA为基础的组件协调者中,比较有名的是IBM的Component Broker及BEA的Tuxedo/Iceberg。服务器端的组件是是一种包含一小部分组件服务功能CORBA服务器对象。Oracle的 Cartridge可算是这种组件中最具代表性的例子。Cartridge是著名的CORBA对象,它同时具有通信功能和保密功能,而且还能激发特定的事件。

用户可以对服务器端的组件进行可视化装配。这说明只要通过组件本身所提供的连结接口,用户就能利用可觉化工具软件将这些组件集成在一起。将来CORBA化的Enterprise JavaBeans中将提供服务器端组件的可视化装配功能。CORBA/JavaBean的这项技术已经集成到由Symantec、Penumbra、ParcPlace、IBM/Taligent、Borland及Sybase等公司所推出的可视化开发工具中。

  在CORBA/Java Object Web结构中的第二层,还必须具备能够存储组件名称、HTML网页及便携式对象容器的能力。这些对象可以存储在便携式的Java Jars中,并且通过面向对象的数据库管理系统(ODBMS)或传统的数据库管理系统(DBMS)来进行管理,不过使用面向对象的数据库管理系统要更合适一些。

◆后端服务器(back end)

  任何一种CORBA对象能够访问的资源,都可以算是此结构第三层的一部分。这包括程序性的TP monitor、中间件(middleware)、数据库管理系统、面向对象的数据库管理系统、Lotus Notes和电子邮件等。这样一来,利用CORBA对象来取代中间层中的CGI程序才能收到良好的效果。最后用户将可以取得封装大部分三层功能的CORBA/Java组件,这样就可以充分发挥CORBA的作用了。

结束语

  CORBA和Java为Object Web上各种产品的集成起着沾合剂的作用。这是软件工业界中第一个尝试即插即用(plug-and-play)功能的软件,而这个功能则是开放系统最终希望实现的。

  在其他厂商发展Object Web的同时,软件业的大腕Microsoft也不会甘于寂寞,它正努力的以自己的方式来诠释并试图主导Object Web的发展方向,而它所用的方法则是DCOM及ActiveX。Microsoft的Transaction Server(代号Viper)是一套DCOM组件协调软件,它是Microsoft计划用来统治Object Web的秘密武器。不过目前看来,Microsoft的Web环境还远不够成熟。相信随着Microsoft的Web环境的进一步发展,未来Object Web领域的竞争将会日趋激烈。

你可能感兴趣的:(Java与CORBA技术结合的前景展望)