一份简洁、权威的EJB 2.0介绍(zz地址忘了,汗啊,有知道的麻烦告诉一下,谢谢)
2005-02-27 10:05
387 查看
引言:
本文对EJB 2.0做了极为简洁的介绍。预期的读者为,那些有分布式对象技术背景、但不熟悉EJB的开发者和项目经理。
两种技术的联姻:
EJB规范阐述了这样两种技术的结合:传统的TP monitors和分布式组件服务。TP monitors是强有力、可靠并富有弹性的平台,这种平台主要用于运行过程式语言,比如用COBOL、PL/1写的应用。平台管理完整的应用环境,其中包括事务、安全、资源管理、负载均衡和容错。常见的TP monitors,比如CICS、TUXEDO和Encina,是许多企业级、关键性(mission-critical)应用的基石。TP monitors采用先进的三层体系机构,并将三层具体划分为,表示层、商业逻辑层和后端资源层。
分布式组件系统给这样的三层体系结构提供了更为优秀的方式。在该类系统中,运行在中间层上的对象、组件可以通过其自身的远程代理(remote proxies)使得其他进程可以访问自己的目的。这些远程代理通过网络将请求发送给分布式组件。
分布式组件服务,比如Java RMI,、CORBA,和DCOM,在业界已经得到了广泛的应用。分布式组件和在传统TP monitors中基于过程的应用相比,提供了更好的重用性和灵活性,因为在开发商务应用中,可以将分布式组件集成成各种各样的组合。但另一方面,这些分布式组件的开发较为困难,因为缺少TP monitors所提供的健壮的基础架构。
组合TP monitors和分布式组件的优点,EJB服务器为分布式组件提供了类似TP monitors的环境。一方面,EJB平台中的TP monitors自动管理完整的应用环境(其中包括,事务、安全、并发控制、持久性、负载均衡和容错机制)的特征减少了开发应用程序的复杂程度。梁一方面,EJB平台中的分布式组件特征使得开发者可以将有富有弹性、可重用的组件集成起来,从而提高开发效率。
在EJB中的分布式组件称之为,企业beans(简称,enterprise beans)。EJB用Java开发,并可以用于建模应用的商业逻辑。一旦一个企业beans开发成功,我们就可以将这个企业beans和其他的企业beans打包到应用程序中,并发布到EJB服务器上。在EJB的发布过程中,配置人员可以通过修改配置描述文件达到修改企业beans的事务性、持久性和安全性。最终的结果是,EJB使得开发健壮、三层的企业应用变得很简单。软件公司在分发用CORBA, DCOM, 或者Java RMI开发的分布式系统时,往往是一种复杂的过程,但如果用EJB开发分布式应用会更简单、有效率。
EJB规范
EJB规范定义了组件开发者和EJB服务器厂商各自的职责。组件开发者遵循规范中定义的编程模型来开发商业组件(即,企业beans),符合规范的EJB可以在所有的EJB服务器中移植。因为EJB服务器遵循规范,它们可以运行任何的EJB,并且自动管理EJB的完整环境。
EJB体系结构
EJB服务器运行在三层构架的中间层。架构的表示层由Java客户组成,并且通过JNDI 和Java RMI-IIOP访问EJB。资源层由一个或多个后端资源构成,通常都包含数据库。这只是展示EJB如何配置在应用架构中的逻辑视图,并没有描述出层的物理位置。比如,表示层可以是桌面Java应用程序、Servlets、其他的EJB。[/b]
EJB一般由4部分组成:home 接口、remote接口、bean类和XML配置描述文件。home 接口申明Java开发人员用于创建新EJB、定位现存EJB、销毁EJB的方法。remote[/b]接口申明[/b]EJB[/b]在运行时[/b]Java[/b]客户所调用的商务方法。[/b]bean类封装EJB的应用逻辑并实现了remote接口中申明的商务方法。配置描述文件是以XML形式存在的文件,用于描述EJB,并给出EJB运行时属性,其中这种属性依赖于目标服务器。EJB开发者需要完成这4部分的工作,并把它们打包成一个.jar文件用于发布到目标服务器上。
当完成EJB的发布后,发布者可以用EJB服务器提供的工具(译者注:比如,WebLogic提供的Builder工具)来打开.jar文件,并且可以查看XML配置描述文件。在XML配置描述文件中的信息用于配置EJB的运行时属性,使得EJB可以在EJB服务器上正确的运行。EJB运行在EJB容器中,这种容器是EJB服务器中宿主EJB实例哪一部分。容器管理EJB的运行时事务、安全、并发性、持久性和资源。另外,容器生成[/b]EJBHome [/b]和[/b] EJBObject [/b]代理([/b]proxies[/b]),这些代理分别实现了[/b]home [/b]和[/b]remote[/b]接口[/b]。这些分布式组件代理给位于表示层的Java客户提供了访问中间层上的EJB的能力。对于每一个EJB配置,都有一个EJBHome 和 一个EJBObject以用于引用EJB。(这个代理在我们的平台上就是我们的对象池和生命周期管理所做的工作。将对象资源进行管理和分配。)[/b]
位于表示层上的[/b]Java[/b]客户通过[/b]Java[/b]命名目录服务得到对[/b]EJB[/b]的[/b]EJBHome[/b]的远程引用([/b]proxy[/b])[/b]。JNDI是独立于厂商的Java应用编程接口,可以和任何的命名或者目录服务,比如CORBA 命名或者轻型目录访问协议(LDAP),使用。EJB[/b]服务器必须实现某种[/b]JNDI[/b]兼容的命名或目录服务以支持对[/b]EJBHome[/b]的访问。[/b]一些EJB服务器有自己开发的JNDI兼容的命名或目录服务,另一些用第三方提供的。
客户使用EJBHome以产生或者查找宿主在EJB容器总特定的EJB。如果该EJB存在,则返回对EJBObject的远程引用。EJBObject实现了EJB的远程接口,并将客户的请求转发给EJB实例。[/b]
Java客户不是直接访问EJB,而是通过EJB提供的EJBHome 和EJBObject远程代理来访问。EJB[/b]容器截获远程代理产生的每一个方法调用,这样一种方式使得容器可以管理和该调用相联系的[/b]EJB[/b]运行环境。对[/b]EJBHome[/b]的方法调用引起[/b]EJB[/b]容器创建,或查找[/b]EJB[/b],并提供[/b]EJBObject[/b]代理给该客户。对[/b]EJBObject[/b]的方法调用被委派给[/b]bean[/b]类,该[/b]bean[/b]类含有响应该请求的商业逻辑。[/b]EJB容器可能实例化多个bean类以支持多个客户。从而使得EJB服务器可以负荷大的客户负载。
目前在EJB 2.0中有3种EJB类型:会话、实体和消息驱动[/b]。消息驱动EJB 是EJB 2.0新加入的成员,会话、实体EJB是在1998年发布的EJB 1.0中介绍的。会话、实体EJB类似于典型的分布式组件:宿主在中间层并处理客户产生的同步远程方法调用。(类似[/b]Remoting[/b]机制)[/b]另一方面,消息驱动EJB不是一个分布式组件,它借助于JMS处理异步消息。([/b]MSMQ[/b]机制)[/b]
会话EJB是一种非持久性、支持事务、服务器端的组件。这种类型的组件用于建模过程、服务、客户和服务器端的会话。会话[/b]EJB包括有状态、无状态两种。
每个stateful会话EJB只能给创建它的Java客户服务。stateful会话EJB的类定义实例变量,以用于保存会话过程中的会话数据,从而使得方式之间是相互关联的。该特性使得[/b]stateful[/b]会话[/b]EJB[/b]作为客户的扩展、在[/b]EJB[/b]服务器上维护会话数据并为客户完成所要的任务。[/b]stateful[/b]会话[/b]EJB[/b]用于建模代表代理、角色之类的商业概念,其中这里的代理、角色是针对特定客户的。[/b]比如,银行出纳员处理货币交易、在线购物的购物车、或者旅行代理商所要完成的机票、旅店和汽车租润过程都是stateful会话EJB可以采用的情景。
stateless [/b]会话[/b]EJB[/b]可以在多个客户之间共享。[/b]这种机制给stateless 会话EJB实例更多的弹性,但同时也不可以在EJB服务器中维护Session数据。stateless 会话EJB中,方法调用之间没有什么关系。每个方法调用是无状态的、类似于Java类中的static方法。stateless 会话EJB用于建模无状态服务,比如,信用卡处理、财务计算和库存查找。
实体[/b]Beans[/b]是持久的、事务性的、服务器端组件。[/b]([/b]与我们的容器中间件的对[/b]component [/b]的定义是相同的[/b])[/b]
这类Beans用于建模商业领域中的对象,比如银行账号、订单和产品。这些Beans具有数据和行为信息,一般情况下会储存在数据库中。
根据如何管理持久性可以把实体Beans分为两种。其中一种,[/b]Bean[/b]管理持久性([/b]BMP[/b])的实体[/b]Beans[/b],这种[/b]Beans[/b]需要[/b]Beans[/b]自己管理数据库中的关系和持久状态[/b]。BMP开发者需要把数据库访问逻辑直接写到bean类中。另外一种,容器管理持久性([/b]CMP)[/b]的实体[/b]Beans[/b],相比之下,[/b]EJB[/b]容器完成管理数据库中的关系和持久状态[/b]。[/b]CMP开发者不需要些数据库访问代码,在配置阶段自动会生成。EJB 2.0种,CMP有很重要的改动。
消息驱动[/b]Beans[/b]是无状态、服务器端组件。[/b]主要用于接收、处理Java客户通过JMS发送的消息。这种Beans用于建模企业内部消息中的过程、路由。开发者可以用消息驱动Beans集成遗留系统和EJB系统,或者完成B2B交互。然而,消息驱动Beans只是由bean类和XML配置描述文件构成,没有home或者remote接口。消息驱动[/b]Beans[/b]不是分布式组件,没有[/b]EJBOject[/b]和[/b]EJBHome[/b]引用。他们仅仅对来自[/b]JMS[/b]的异步消息作出响应。[/b]
结论:
EJB规范为分布式计算定义了强有力的平台。规范不仅定义了应用开发者使用的组件模式、而且还定义了应用服务器厂商实现的基础框架。这样一种规范给开发者提供了一个健壮、灵活、可移植于不同厂商产品的商业解决方案平台。
相关文章推荐
- 一份简洁、权威的EJB 2.0介绍(zz地址忘了,汗啊,有知道的麻烦告诉一下,谢谢)
- 请介绍一下Slackware。越详细越好,谢谢各位大大了
- 开发webapp与普工pc页面有所区别,下面介绍一下开发webapp需要注意哪些内容,做好一下设置,会让你避免不少麻烦
- 我的BLOG开通了,介绍一下我自己,以后我会多发表文章,谢谢大家支持
- 求教:关于一款笔记本的性能,知道的麻烦说一下!!
- 简单介绍一下vue2.0
- easyui的datebox控件如何只要年月不要日谢谢知道的说一下
- 有没有朋友介绍一下forte下怎样集成混淆器,谢谢!
- NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 (ZZ)
- js怎么获取访问页数记录(知道的能不能告诉我一下)
- ENode 2.0 - 介绍一下关于ENode中对Command的调度设计
- 小数据分析师学 Python 之 Seaborn(二):定量数据的线性模型(谁知道原文出处告诉我一下谢谢)
- NET2.0系列介绍(二).NET 2.0 WebPart初探(ZZ)
- 帮我把这个改一下~写个正确的~谢谢 用C++求两个整数的最大值 谁来告诉我这个程序错在哪儿啦
- 谁那有j2EE的 在局域网内IP扫描得到在线机器的相关信息源代码 麻烦分享一下 谢谢了。
- 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作
- 谢谢 能把它的播放地址给我吗 c.k有一首叫《只想唱歌给你听》知道不
- 因为老板让我做一个WAP 游戏!所以百分求!WAP版的斗地主游戏 地址!我玩一玩参考一下!希望有玩过的给我一个连接!谢谢
- 简单介绍一下Vue2.0
- 简单介绍一下vue2.0