Java EJB技术研究
作者:王少锋 王克宏 来自:未知
[摘 要]Java的EJB技术代表的是一种前沿技术,它使得复杂的多层结构应用系统的开发变得容易,本文分析了EJB构件模型的体系结构、技术特点及应用前景,以及和其它相关技术的比较。
[关键词]Java,EJB,可重用构件
一、EJB{Enterprise JavaBeans}技术
98年3月在San Francisco召开的JavaOne98开发者大会上,Sun公司正式 发布了业界期待已久的EJB1.0版规范说明,在众多的大公司和开发人员中引起了巨大的反应,这标志着用Java开发企业级应用系统将变得简单。这次Ja- vaOne大会也被称之为"EJB展览会",许多公司纷纷表示要推出有关EJB的 产品,已经推出或正准备推出EJB产品的公司有:Sun、IBM、Inprise、BEA、 Gemstone、Informix、NCR、Netscape、Novell、Oracle、Persistence Progress、Secant、Sybase、Symantec等。目前,EJB已成为Java企业计算平台的核心技术,今年5月10日Sun公司发布了EJB1.1版本规范说明草案,对1.0版本中的一些特征作补充说明和改进。
Java平台包含许多用于开发企业级的、多层体系结构的、分布式应用系统的关键技术,如Java RMI JDBC、JNDI、Java管理API(JMAPI)、Java消息服务(JMS)、Java事务服务(JTS)、EJB等,每种技术都有各自不同的特点,本文主要讨论在企业级应用系统中极为重要的EJB技术。
Sun公司发布的EJB规范说明中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。采用EJB可以使得开发商业应用系统变得、容易,应用系统可以在一个支持EJB的环境中开发,开发完之后部署在其它的环境中,随着需求的改变,应用系统可以不加修改地迁移到其它功能更强、更复杂的服务器上。
在分布式应用系统的开发中,采用多层体系结构的方法有很多优点,如增加了应用系统的可伸缩性、可靠性、灵活性等。因为服务器端构件可以根据应用需求迅速地加以修改,且构件在网络中的位置和 应用无关,因此系统管理员可以很容易重新配置系统的负载。多层体系结构非常适合于大数据量的商业事务系统,特别是在基于Web的应用中,需要多层体系结构支持瘦客户机及浏览器的快速applet下载。
通常一个多层体系结构的企业级应用系统的开发非常复杂,因为涉及到很多事务处理,姿态管理,多线程,资源调度,安全性操作以及其它许多底层的细节。EJB简化了多层体系结构应用系统的开发过程,使企业计算的开发人员专注于应用系统的解决方案,而不需将过多的精力放在底层的计算细节,而且开发的组件能够运行于所有支持四B的环境之中,具有可复用性。
一个开发商可以开发一个新的支持EJB的执行系统,但通常的做法是供应商对已有的系统进行政进以支持EJB,可以进行改进以支持EJB的系统包括:
· 数据库数理系统,如Oracle,Sybase,DB2等;
· web应用服务器,如Java Web Server, Netscape enterprise Server,Oracle Application Server等;
· CORBA平台,如Iona Orbix/OTM,Borland VisiBroker/IT3等;
· 事务处理监控器,如IBM TXSeries(CICS and Encina),BEA公司的Tuxedo等;
· 构件事务服务器,如Sybase Jaguar CTS 或 Microsoft Transaction Server等。
二、软构件模型
软构件模型的思想是创建可重用的构件并将其组合到容器中以得到新的应用系统,软构件模型定义了构件的基本体系结构、构件界面的结构、和其他构件及容器相互作用的机制等。利用软构件模型规范说明,构件开发人员开发那些实现了应用系统逻辑的构件,而应用系统开发人员把这些预先开发好的构件组合成应用系统。软构件模型思想已经在软件开发界迅速流行,因为它可以达到以下这些目的:复用、高层开发、简化开发过程,降低开发费用,提高所开发产品的质量等。
有两种类型的软构件模型一一客户端构件模型和服务器端构件模型。客户端构件模型如JavaBeans是专门用于处理程序的表示(presentation)及用户界面问题的;服务器端构件模型如EJB则向面向事务的中间件提供基础设施。
服务器端构件模型把构件模型的开发和中间件联系在一起。企业级应用系统的中间件以其复杂性著称,它不仅涉及到应用逻辑、并发性和伸缩性问题,也涉及到如何把不兼容的系统组合在一起的问题。服务器端构件模型解决了中间件开发的复杂性问题,它使得中间件开发人员集中于应用系统的逻辑部分,而不用处理同步、可伸缩性、事务集成、网络、分布式对象框架等一些分布式应用系统中存在的复杂的细节问题。EJB构件模型如图1所示:
EJB Server负责与操作系统有关的底层细节,诸如和其它组件或系统的通讯协议、多线程、负载平衡等,EJB Container提供EJB的生存环境和各种服务(如Transaction Server),EJB Container和Server共同组成了EJB运行环境。
通过使用RMI(Remote Method Invocation),,EJB支持远程的客户端存取。RMI产生一个对象,这个对象被安装在客户机系统中,作为存取服务器对象的代理对象,它使得服务器的位置对于客户机来说是透明的,EJB开发人员为每一个可存取的接口定义一个Java远程接口。
通过使用IIOP协议(Interne InterORB Protocol ),EJB也可以和其他的非Java客户机进行通讯,IIOP允许EJB系统和CORBA的集成,EJB可以存取CORBA服务器,CORBA客户机也可以存取EJB服务器。 EJB构件模型给开发者提供的支持包括以下一些特征:
· 可重用的构件
· 可伸缩性
· 资源管理
· 事务支持
· 并发性管理
· 安全性管理
EJB构件与Container之间有统一的界面,每一个EJB构件都可以运行在所有的运行环境中。在EJB构件模中有两种类型的EJBsession bean和entity bean,这两种类型的EJB代表了两种不同类型的事务逻辑的抽象。Session bean是短暂的对象,运行在服务器端,并执行一些应用逻辑处理,它由客户端应用程序建立,并仅被该应用程序所使用,其数据需要自己来管理,当系统停机后,session bean 不会再被恢复。Entity bean 是持久的对象,可以被其他对象调用,entity bean必须在建立时确定一个唯一的标识,并提供相应的机制允许客户应用程序根据entity bean标识来定位bean实例,多个用户可以并发访问entity bean,当系统停机时,entity bean可以被恢复。Entity bean在EJB1.0规范中可选的特征,但EJB技术发展非常快,在EJB规范说明1.I版本的草案中,已经规定entity bean是必须实现的特征,而不再是可选的特征。
需要注意的是,对于不同的EJB服务器来说,其对客户机的格式的要求是不同的,例如,客户机和服务器建立连接的方式随服务器的不同而不同,但客户机的这些差异并不影响EJB的跨平台性。
三、EJB构件模型的特点
在EJB1.O规范说明中,列出了设计EJB构件模型的目标,其中的一些如下:
· EJB将成为用Java语言开发分布式的、面向对象的企业级应用系统的标准构件体系结构,EJB使得通过组合构件得到分布式应用系统成为可能。
· EJB使得应用系统开发变得容易,应用系统开发人员不需要理解底层的事务处理细节、状态管理、多线程、资源共享管理、以及其它复杂的底层API细节。
· EJB遵循Java的"write once,run anywhere"的思想,一旦一个EJB开发完成之后,就可以部署在任何支持EJB的平台上,而不需要重新编译或对源代码进行修改。
· EJB定义了一个协议,使得用不同供应商提供的工具开发和部署的构件能在运行时互操作。
· EJB体系结构和已有的服务器平台、其它的Java APL、CORBA等兼容。
· EJB将支持enterprise Beans和其它的非Java应用系统的互操作性。
采用EJB开发应用系统有很多优点,如:(1)标准的Java技术便利应用系统可以在许多不同的服务器平台上运行;(2)修改应用系统变得容易,对单个构件进行增加、修改、删除等操作不会对应用系统体系结构产生很大影响;(3)应用系统经过划分之后,使得构件之间相互拙立,又可以相互协作,提供给用户的是该用户所需要的构件:(4)应用系统的开发变得容易,基本上是即插即用的方式;(5)应用系统从本质上说是可伸缩的,可以运行在多线程、多处理机的环境中;(6)UB可以在新的应用系统中得到重用,减少了新系统的开发时间。
当然,和其它的新技术一样,EJB也存在一些缺点,主要有:(1)EJB的数量可能非常多,以致在软件开发库中很难对这些EJB进行跟踪和管理;(2)如果应用开发人员不能正确地使用EJB,可能导致不恰当的应用系统设计,结果使得应用系统的总体性能下降;(3)除非WM及编译器的性能得到提高,否则EJB应用系统的性能仍将是个问题;(4)由于EJB技术出现时间不长,目前可用的EJB还不多,要想得到大量的商业性EJB还需要一段时间。
四、EJB和其它技术的比较
4.1 EJB和JavaBeans的比较
很多人往往把JavaBeans和EJB混淆起来,JavaBeans提供了基于构件的开发机制,JavaBeans可以在多个应用系统中重用,开发者可以通过属性表或通过定制的方法来定制JavaBean。多个JavaBean可以组合在一起构成Java applet或Java应用程序,或建立新的JavaBean,JavaBean容器可以根据JavaBean的属性、方法、事件的定义在设计时或运行时对JavaBean进行操作。
在JavaBean构件模型中,重点是允许开发人员可以在开发工具中可视化地操作构件,为此,JavaBean详细地描述了API的细节,以及构件之间事件注册和发送,属性的识别和利用,定制,永久性等细节。
EJB是一种非可视化的构件,完全位于服务器端,规范说明详细说明了EJB容器需要满足的需求以及如何和EJB构件相互协作。EJB可以和远程的客户端程序通讯,并提供一定的功能,根据规范说明,EJB是client/Server系统的一部分,如果不和客户端程序交互,EJB一般不执行具体的功能,EJB和JavaBean的一个重要区别是EJB必须在网络计算环境下使用才有意义。
EJB的重点是给出服务框架模型,以保证Java构件可以进行可移植性的部署,因此,在EJB规格说明中,并没有提到事件,因为典型的EJB构件不发送和接收事件,EJB规范说明中也没有提到属性。和一般的JavaBean一样,EJB是高度可定制的,对EJB进行定制不需要存取源代码,但对EJB可以进行定制不是在开发阶段,而是在部署阶段用部署描述符进行定制。
需要说明的是,JavaBean不仅可用于客户端应用程序的开发,也可以用于服务器端应用程序的开发,但和EJB的区别是,如果用JavaBean创建服务器端应用程序,还必须同时实现服务框架,在多层结构分布式应用系统中,服务框架的实现是非常繁琐的,对于EJB来说,服务框架已经提供,因此大大简化了系统的开发过程。
4.2 EJB和CORBA
CORBA是目前分布式对象处理的事实工业标准,大部分厂商都宣布支持CORBA标准,同样,在EJB规范中,也考虑到对CORBA的支持。规范主要规定如下:
· 一个CORBA客户机(用CORBA支持的语言写的程序)可以存取基于CORBA的EJB服务器上的构件。
· 一个客户机在一个事务过程中可以同时调用CORBA和EJB对象。
· 一个事务可以同时利用多个由不同开发商提供的,基于CORBA的EJB服务器。
为了保证多个开发商之间的基于CORBA的EJB产品之间的互操作性,规范说明定义了EJB到CORBA的映射,分为四个部分:
1、分布映射--定义了EJB和COR-BA对象之间的关系,以及EJB规范说明中定义的Java RMI到OMG IDL的映射。
2、命名映射--说明了如何利用COS命名服务来确定EJBHome对象。
3、事务映射--定义了EJB的事务支持到OMG Object Transaction Service(OTS)v1.1的映射。
4、安全性映射定义了EJB中的安全性特征到CORBA安全性的映射。
映射确保了不管哪一种类型的客户机,通过生成相同的字节流,可以和基于CORBA的EJB服务器进行互操作。
从以上的论述中可以知道,对于EJB服务器来说,有两种类型的客户机可以使用EJB:
1.EJB/CORBA客户机一个使用EJB API的Java客户机。客户机利用JNDI定位对象,利用HOP协议上的JavaRMI来调用远程方法,其中CORBA IDL的使用是隐含的,也就是说,开发人员只使用Java代码,开发客户机程序时可以不必了解CORBA及IDL知识。
2.纯CORBA客户机用CORBA IDL支持的任何语言写的客户机。客户机用COS命名服务来定位对象,用CORBA IDL来调用远程方法,用对象事务服务OTS来执行事务,其中开发人员要创建一个IDL文件,即CORBA IDL的使用是显式的。
4.3 EJB和网络计算
由Beans构造的应用系统可以根据用户的需求分解成不同的构件,根据用户当前所需要的功能提供相关的构件,并随着用户新的需求随时下载新的构件,而用户没有用到其功能的构件可以驻留在服务器上,这就是网络计算所倡导的概念。
很多人并没有完全理解Java的概念,他们认为为了在一个客户端上运行Java程序,需要把一个庞大的、可能达几兆字节的Java应用程序一次性通过网络传输到客户端,事实上,这也是一些开发人员计划用Java开发应用系统时易犯的错误。
把Java应用于服务器端的应用系统可以真正体现Java的威力,EJB是Java的服务器端构件模型,该模型保证开发出来的构件可以被部署在任何支持EJB规范说明的系统中,即使该系统是由不同的开发商提供的。在网络计算环境中利用Java的最好途径是由EJB提供服务器端的构件,而由JavaBean提供客户端的构件,两者结合在一起,将向"网络就是计算机"之路迈出一大步。
五、总结
对象技术、构件技术、快速应用开发等是计算机界的热门话题,Java的EJB技术的主要思想就是让"恰当的专家做恰当的事情",应用领域的开发人员将开发精力放在应用逻辑方面,而不用考虑底层的计算技术;而计算机专业开发人员去处理底层的计算技术细节,而不用考虑应用领域的专业知识。
EJB计算技术代表的是一种前沿技术,它使得复杂的多层结构应用系统开发变得容易。EJB技术建立在已取得极大成功的Java语言之上,采用EJB技术能有效地进行软件复用,提高开发人员的效率,降低软件的开发和维护成本,提高软件的质量,控制所构建系统的复杂性。EJB技术将使得Java在企业计算中的地位得到加强,为基于Java的应用系统提供了一个框架,和目前的许多系统和模型相比,EJB具有许多优越性,种种迹象表明,EJB有可能成为多层结构分布式应用系统的服务器端构件模型的首要选择。