Java 版 (精华区)
发信人: kaola (不是我不小心!), 信区: Java
标 题: EJB-Java服务器端构件模型
发信站: 哈工大紫丁香 (2001年01月13日13:23:14 星期六), 站内信件
EJB-Java服务器端构件模型—模型介绍 作者:jintao 发布时间:2000/12/29
文章摘要:
1998年3月在SanFrancisco召开的JavaOne98开发者大会上,Sun公司正式发布了业界
期待已久的EJB1.0版(EnterpriseJavaBeans1.0)规范说明,在众多的大公司和开发人
员中引起了巨大的反应,这标志着用Java开发企业级应用系统将变得非常简单。这次Ja
vaOne大会也被称之为"EJB展览会",许多公司纷纷表示要推出有关EJB的产品,已经推出
或正准备推出EJB产品的公司有:IBM、Inprise、Gemstone、Informix、NCR、NetDynam
ics、Netscape、Novell、Oracle、PersistenceSoftware、Progress、Secant、Sybase
、Symantec、Weblogic等。目前,EJB已经成为Java技术研究中的重点。
----------------------------------------------------------------------------
----
正文:
EJB-Java服务器端构件模型
(一)模型介绍
1998年3月在SanFrancisco召开的JavaOne98开发者大会上,Sun公司正式发布了业界
期待已久的EJB1.0版(EnterpriseJavaBeans1.0)规范说明,在众多的大公司和开发人
员中引起了巨大的反应,这标志着用Java开发企业级应用系统将变得非常简单。这次Ja
vaOne大会也被称之为"EJB展览会",许多公司纷纷表示要推出有关EJB的产品,已经推出
或正准备推出EJB产品的公司有:IBM、Inprise、Gemstone、Informix、NCR、NetDynam
ics、Netscape、Novell、Oracle、PersistenceSoftware、Progress、Secant、Sybase
、Symantec、Weblogic等。目前,EJB已经成为Java技术研究中的重点。
一、EJB概要
EJB规范说明定义了Java的服务器端构件模型。目前,已有很多可供使用的、由第三
方供应商提供的、用于客户端的构件,但用于服务器端的构件还不多。由于服务器端构
件缺乏或很难构造,因此基本上每一个开发人员不得不从头开始构造服务器体系结构。
EJB方法扩充了Java的客户端构件模型JavaBeans,以支持服务器端应用系统的开发。在
EJB规范说明中,服务器中的很多功能由EJB容器提供,开发人员可以集中精力开发应用
系统的核心功能。采用EJB技术可以大大减轻开发服务器端应用系统的工作量。因此,E
JB规范说明一经发布,立即引起许多开发人员的极大兴趣。
Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的
、面向对象的Java应用系统的跨平台的构件体系结构。采用EJB可以使开发商业应用系统
变得容易,应用系统可以在一个支持EJB的环境中开发,开发完之后部署在其他的环境中
,随着需求的改变,应用系统可以不加修改地迁移到其他功能更强、更复杂的服务器上
。
EJB简化了多层体系结构应用系统的开发过程。在分布式应用系统的开发中,采用多
层体系结构的方法有很多优点,如增加了应用系统的可伸缩性的、可靠性、灵活性等。
因为服务器端构件可以根据应用需求迅速地加以修改,且构件在网络中的位置和应用无
关,因此系统管理员可以很容易地重新配置系统的负载。多层体系结构非常适合于大数
据量的商业事务系统,特别是在基于Web的应用中,需要多层体系结构支持瘦客户机及浏
览器的快速Applet下载。目前,越来越多的系统开始采用多层体系结构的方法。
EJB把Java的"Writeonce,runanywhere"思想提到一个新的高度,服务器端构件在构
件执行系统内运行,规范说明定义了构件执行系统所需要的服务。遵从EJB规范说明开发
的构件可以在任何一个支持EJB的系统中运行。
通过使用RMI,EJB支持远程的客户端存取。RMI是一个高级程序设计接口,它使得服
务器的位置对于客户机来说是透明的,RMI产生一个对象,这个对象被安装在客户机系统
中,作为存取服务器对象的代理对象,EJB开发人员为每一个可存取的接口定义一个Jav
a远程接口。
通过使用IIOP协议(InternetInterORBProtocol),EJB也可以和其他的非Java客户
机进行通信。IIOP允许EJB系统和CORBA的集成,EJB可以存取CORBA服务器,CORBA客户机
也可以存取EJB服务器。
一个开发商可以开发一个新的支持EJB的执行系统,但通常的做法是供应商对已有的
系统进行改进以支持EJB。可以进行改进以支持EJB的系统包括:
· 数据库管理系统,如Oracle、Sybase、DB2等;
· Web应用服务器,如JavaWebServer、NetscapeEnterpriseServer、OracleApplicati
onServer等;
· CORBA平台,如IonaOrbix/OTM、BorlandVisiBroker/ITS等;
· 事务处理监控器,如IBMTXSeries(CICSandEncina)、BEA公司的Tuxedo等;
· 构件事务服务器,如SybaseJaguarCTS或MicrosoftTransactionServer等。
二、软构件模型
软构件模型的思想是创建可重用的构件并将其组合到容器中,以得到新的应用系统
。构件模型定义了构件的基本体系结构、构件界面的结构、与其他构件及容器相互作用
的机制等。利用构件模型规范说明,构件开发人员开发那些实现了应用系统逻辑的构件
,而应用系统开发人员则把这些预先开发好的构件组合成应用系统,这些应用系统也可
以作为新的构件。软构件模型思想已经在软件开发界迅速流行,因为它可以达到以下这
些目的:重用、高层开发、通过工具进行自动化开发,简化开发过程等。JavaBeans、E
JB、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提供了基于构件的开发机制,一般J
avaBeans是可视化的构件,也有一些JavaBeans是非可视化的,JavaBeans可以在多个应
用系统中重用。一个标准的JavaBean是一个客户端构件,在运行时不能被其他客户机程
序存取或操作。但客户端的JavaBeans容器可以根据JavaBeans的属性、方法、事件的定
义在设计时或运行时对JavaBeans进行操作,JavaBeans不一定要用于Client/Server系统
。
EJB没有用户界面,并完全位于服务器端,EJB可以由多个JavaBean组成,规范详细
说明了EJB容器需要满足的需求以及如何与EJB构件相互协作。EJB可以和远程的客户端程
序通信,并提供一定的功能。根据规范说明,EJB是Client/Server系统的一部分,如果
不和客户端程序交互,EJB一般不执行具体的功能,EJB和JavaBeans的一个重要区别是E
JB提供了网络功能。
2.EJB和CORBA的关系
根据规范说明中的需求,以下的一些功能是需要的:
· 一个CORBA客户机(用CORBA支持的语言写的程序)可以存取基于CORBA的EJB服务器上
的构件。
· 一个客户机在一个事务过程中可以同时调用CORBA和EJB对象。
· 一个事务可以同时利用多个由不同开发商提供的基于CORBA的EJB服务器。
为了保证多个开发商之间的基于CORBA的EJB产品之间的互操作性,规范说明定义了
EJB到CORBA的映射,分为四个部分:
(1)分布映射:定义了EJB和CORBA对象之间的关系,以及EJB规范说明中定义的Jav
aRMI远程接口到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构造的应用系统可以根据用户的需求分解成不同的构
件,根据用户当前所需要的功能提供相关的构件,并随着用户新的需求随时下载新的构
件,而用户没有用到其功能的构件可以驻留在服务器上,这就是网络计算所倡导的概念
。
很多人并没有完全理解Java的概念,他们认为为了在一个客户端上运行Java程序,
需要把一个庞大的、可能达几兆字节的Java应用程序一次性通过网络传输到客户端。事
实上,这也是一些开发人员计划用Java改写旧的应用系统时易犯的错误。
在网络计算环境中利用Java的最好途径是由EJB提供服务器端的构件,而由JavaBea
ns提供客户端的构件,两者结合在一起,将向"网络就是计算机"之路迈出一大步。
五、结论
只有把Java应用于服务器端的应用系统开发才能真正体现Java的威力,EJB是Java的
服务器端的构件模型,该模型保证开发出来的构件可以被部署在任何支持EJB规范说明的
系统中,即使该系统是由不同的开发商提供的。采用EJB可以提高开发人员的生产率,构
件开发人员和应用开发人员不需要实现系统中的一些复杂的逻辑结构,因为构件的容器
已提供对这些服务的自动管理和控制,采用EJB开发的应用系统不用修改就可以从一个服
务器迁移到另一个功能更强的服务器上。
作者会员名:piex
----------------------------------------------------------------------------
----
我是: 读者 出版商 销售商
读者评价:
评论:
[查看他人对本书的看法]
推 荐 给 朋 友
您的称呼: 您的昵称:
您的Email: 您朋友的Email:
(以下是预设的信件内容,可根据您的需要修改)
近来好吗?
我正在网上浏览中国互动出版网,看到对你有用的文章(http://www.china-pub.com/co
mputers/eMook/0612/info.htm), 特推荐给你,希望对你有所帮助。
[关闭此窗口]
--
我怕水,我怕谁?
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.247.254]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.567毫秒