一、EJB概要
EJB规范说明定义了Java的服务器端构件模型。目前,已有很多可供使用的、由第三方供应商提供的、用于客户端的构件,但用于服务器端的构件还不 多。由于服务器端构件缺乏或很难构造,因此基本上每一个开发人员不得不从头开始构造服务器体系结构。EJB方法扩充了Java的客户端构件模型 JavaBeans,以支持服务器端应用系统的开发。在EJB规范说明中,服务器中的很多功能由EJB容器提供,开发人员可以集中精力开发应用系统的核心 功能。采用EJB技术可以大大减轻开发服务器端应用系统的工作量。因此,EJB规范说明一经发布,立即引起许多开发人员的极大兴趣。
Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。采用 EJB可以使开发商业应用系统变得容易,应用系统可以在一个支持EJB的环境中开发,开发完之后部署在其他的环境中,随着需求的改变,应用系统可以不加修 改地迁移到其他功能更强、更复杂的服务器上。
EJB简化了多层体系结构应用系统的开发过程。在分布式应用系统的开发中,采用多层体系结构的方法有很多优点,如增加了应用系统的可伸缩性的、可靠 性、灵活性等。因为服务器端构件可以根据应用需求迅速地加以修改,且构件在网络中的位置和应用无关,因此系统管理员可以很容易地重新配置系统的负载。多层 体系结构非常适合于大数据量的商业事务系统,特别是在基于Web的应用中,需要多层体系结���支持瘦客户机及浏览器的快速Applet下载。目前,越来越多 的系统开始采用多层体系结构的方法。
EJB把Java的"Writeonce,runanywhere"思想提到一个新的高度,服务器端构件在构件执行系统内运行,规范说明定义了构件执行系统所需要的服务。遵从EJB规范说明开发的构件可以在任何一个支持EJB的系统中运行。
通过使用RMI,EJB支持远程的客户端存取。RMI是一个高级程序设计接口,它使得服务器的位置对于客户机来说是透明的,RMI产生一个对象,这个 对象被安装在客户机系统中,作为存取服务器对象的代理对象,EJB开发人员为每一个可存取的接口定义一个Java远程接口。
通过使用IIOP协议(InternetInter ORBProtocol),EJB也可以和其他的非Java客户机进行通信。IIOP允许EJB系统和CORBA的集成,EJB可以存取CORBA服务器,CORBA客户机也可以存取EJB服务器。
一个开发商可以开发一个新的支持EJB的执行系统,但通常的做法是供应商对已有的系统进行改进以支持EJB。可以进行改进以支持EJB的系统包括:
· 数据库管理系统,如Oracle、Sybase、DB2等;
· Web应用服务器,如JavaWebServer、NetscapeEnterpriseServer、OracleApplicationServer等;
· CORBA平台,如IonaOrbix/OTM、BorlandVisiBroker/ITS等;
· 事务处理监控器,如IBMTXSeries(CICSandEncina)、BEA公司的Tuxedo等;
· 构件事务服务器,如SybaseJaguarCTS或MicrosoftTransactionServer等。
二、软构件模型
软构件模型的思想是创建可重用的构件并将其组合到容器中,以得到新的应用系统。构件模型定义了构件的基本体系结构、构件界面的结构、与其他构件及容器 相互作用的机制等。利用构件模型规范说明,构件开发人员开发那些实现了应用系统逻辑的构件,而应用系统开发人员则把这些预先开发好的构件组合成应用系统, 这些应用系统也可以作为新的构件。软构件模型思想已经在软件开发界迅速流行,因为它可以达到以下这些目的:重用、高层开发、通过工具进行自动化开发,简化 开发过程等。JavaBeans、EJB、COM/DCOM等都是软构件模型的例子。
有两种类型的软构件模型:客户端构件模型和服务器端构件模型。客户端构件模型如JavaBeans是专门用于处理程序的表示及用户界面问题的;服务器端构件模型如EJB则向面向事务的中间件提供基础设施。
服务器端构件模型把构件模型的开发和中间件联系在一起。企业级应用的中间件以其复杂性著称,它不仅涉及到应用逻辑、并发性和伸缩性问题,而且涉及到如 何把不兼容的系统组合在一起的问题。服务器端构件模型解决了中间件开发的复杂性问题,它使中间件开发人员集中于应用系统的逻辑部分,而不用处理同步、可伸 缩性、事务集成、网络、分布式对象框架等一些分布式应用系统中存在的复杂的细节问题。EJB构件模型如图1所示:
EJB构件模型给开发者提供了以下的一些支持:
· 构件包含应用系统逻辑
· 可重用的构件
· 可伸缩性
· 资源管理
· 事务支持
· 并发性管理。
三、EJB构件模型的目标
在EJB1.0规范说明中,列出了设计EJB构件模型的目标,其中的一些如下:
(1)EJB将成为用Java语言开发分布式的、面向对象的商业应用系统的标准构件体系结构,EJB使得通过组合构件得到分布式应用系统成为可能。
(2)EJB使得应用系统开发更容���,应用系统开发人员不需要理解底层的事务处理细节、状态管理、多线程、资源共享管理以及其他复杂的底层API细节。
(3)EJB遵循Java的"Writeonce,runanywhere"的原则,一旦一个EJB开发完成之后,那么就可以部署在任何支持EJB的平台上,而不需要重新编译或对源代码进行修改。
(4)EJB定义了一个协议,使得用不同供应商提供的工具开发和部署的构件能在运行时互操作。
(5)EJB体系结构和已有的服务器平台、其他的JavaAPI、CORBA等兼容。
(6)EJB将支持EnterpriseBeans和其他的非Java应用系统的互操作性。
采用EJB开发应用系统有很多优点,如标准的Java技术使得应用系统可以在许多不同的服务器平台上运行;修改应用系统变得容易,对单个构件进行增 加、修改、删除等操作,对应用系统体系结构的影响很小;应用系统经过划分之后,使得构件之间相互独立,又可以相互协作,提供给用户的是该用户所需要的构 件;应用系统的开发变得容易,基本上是即插即用的方式;应用系统从本质上说是可伸缩的,可以运行在多线程、多处理机的环境中;EJB可以在新的应用系统中 得到重用,减少了开发时间。
当然,和其他的新技术一样,EJB也存在一些缺点,主要有:EJB的数量可能非常多,以至在软件开发库中很难对这些EJB进行跟踪和管理;如果应用开 发人员不能正确地使用EJB,可能导致不恰当的应用系统设计,结果使得应用系统的总体性能下降;除非JVM及编译器的性能得到提高,否则EJB应用系统的 性能仍将是一个问题;由于EJB技术出现时间不长,因此目前可用的EJB还不多,要想得到大量的商业性EJB还需要一段时间。
四、EJB和其他技术的关系
1.EJB和JavaBeans的关系
很多人往往把JavaBeans和EJB混淆,JavaBeans提供了基于构件的开发机制,一般JavaBeans是可视化的构件,也有一些 JavaBeans是非可视化的,JavaBeans可以在多个应用系统中重用。一个标准的JavaBean是一个客户端构件,在运行时不能被其他客户机 程序存取或操作。但客户端的JavaBeans容器可以根据JavaBeans的属性、方法、事件的定义在设计时或运行时对JavaBeans进行操 作,JavaBeans不一定要用于Client/Server系统。
EJB没有用户界面,并完全位于服务器端,EJB可以由多个JavaBean组成,规范详细说明了EJB容器需要满足的需求以及如何与EJB构件相互 协作。EJB可以和远程的客户端程序通信,并提供一定的功能。根据规范说明,EJB是Client/Server系统的一部分,如果不和客户端程序交 互,EJB一般不执行具体的功能,EJB和JavaBeans的一个重要区别是EJB提供了网络功能。
2.EJB和CORBA的关系
根据规范说明中的需求,以下的一些功能是需要的:
· 一个CORBA客户机(用CORBA支持的语言写的程序)可以存取基于CORBA的EJB服务器上的构件。
· 一个客户机在一个事务过程中可以同时调用CORBA和EJB对象。
· 一个事务可以同时利用多个由不同开发商提供的基于CORBA的EJB服务器。
为了保证多个开发商之间的基于CORBA的EJB产品之间的互操作性,规范说明定义了EJB到CORBA的映射,分为四个部分:
(1)分布映射:定义了EJB和CORBA对象之间的关系,以及EJB规范说明中定义的JavaRMI远程接口到OMGIDL的映射。
(2)命名映射:说明了如何利用COS命名服务来确定EJBHome对象。
(3)事务映射:定义了EJB的事务支持到OMGObjectTransactionService(OTS)v1.1的映射。
(4)安全性映射:定义了EJB中的安全性特征到CORBA安全性的映射。
映射确保了不管哪一种类型的客户机,通过生成相同的字节流���可以和基于CORBA的EJB服务器进行互操作,如图2所示。
从以上的论述中可以知道,对于EJB服务器来说,有两种类型的客户机可以使用EJB:
(1)EJB/CORBA客户机:一个使用EJBAPI的Java客户机。客户机利用JNDI确定对象,利用IIOP协议上的JavaRMI来调用远 程方法,其中CORBAIDL的使用是隐含的,也就是说,开发人员只使用Java代码,开发客户机程序时可以不用了解CORBA及其IDL知识。
(2)纯CORBA客户机:用CORBAIDL支持的任何语言写的客户机。客户机用COS命名服务来确定对象,用CORBAIDL来调用远程方法,用 对象事务服务OTS来执行事务,其中程序设计人员要创建一个IDL文件,即CORBAIDL的使用是显式的。
3.EJB和网络计算由JavaBeans构造的应用系统可以根据用户的需求分解成不同的构件,根据用户当前所需要的功能提供相关的构件,并随着用户新的需求随时下载新的构件。