EJB体系结构

J2EE/EJB/JMS 专栏收录该内容
6 篇文章 0 订阅
 什么是EJB
   EJB的结构是开发和部署于组件的分布式商务应用程序的一种组件结构。利用EJB结构开发的应用程序是可伸缩的、事物性的、多用户安全的。这些应用程序可能只需编写一次,然后可以部署在任何支持EJB规范的服务器平台上。
要点:
1.EJB是一种组件规范
    一个组件是一段实现一系列确定接口的程序代码。这些组件是可维护的,各自具有自己的逻辑。组件不是一个完整的应用程序,它们不能独自运行。它们是程序的组成模块,主要用于解决大型问题。
    EJB是Java技术中部署在服务器端的一种组件结构标准,它是一个协议。它为基于组件的服务器端应用程序提供了一种与厂商无关的Java接口,可以让任何符合EJB规范的组件运行于每一种符合EJB规范的服务器上。
2.EJB是基于分布式对象结构的
    所谓分布式对象结构,简单的说就是系统的不同部分被部署到不同的计算机上,这些计算机可能相隔很远;也就是说,分布式对象结构允许远程获得商务逻辑和数据。所有的分布式对象协议都建立在相同的基础结构之上,这样的结构也使得在一台计算机的一个对象看上去好像分布在不同的计算机上。
EJB的分布式对象结构使用的是代理对象。客户端并不直接访问Enterprise bean的实例,而是使用Enterprisebean的远程接口来访问Enterprise bean的实例。所以除了对Enterprisebean类本身进行编码外,EJB开发人员还必须为Enterprisebean定义一个本地接口和一个远程接口。这些接口类的实现通常由容器生成,因此部署EJB组件是开发人员和EJB容器的合作行为,这些接口类所实现的分布式对象称为EJB对象。 
3.EJB组件位于中间层
  对于基于WEB应用程序的开发,可扩展性是相当重要的,而传统的两层(c/s)应用程序不便于升级扩展,因此更加适合用于Internet的三层及多层结构便应运而生了。在三层结构中,表示逻辑层在客户端(第一层),商务逻辑在中间层(第二层),其它资源,如数据库,位于后端(第三层)。
EJB位于商务逻辑层,遵循EJB规范,应用程序开发者不用担心周围框架的实现和接口的连接问题,只需专心致志地实现所需的商务逻辑即可;在系统需要升级或扩展时,只需改动需要变动的局部代码,不会出现“牵一发而动全身”的局面。EJB服务器提供了分布式对象系统所需的所有任务,例如组件的生命周期的管理、负载平衡、资源池管理、安全性、实现高速缓存等等。这大大减轻了开发者的负担,也是EJB得以迅速流行的重要原因。
二EJB体系中各角色的分析
  在《EJB规范》中定义了六种不同的角色,并提倡构建EJB时分解成不同的部分进行。每一个角色可以由不同的团体来担任,而且每个角色所作的工作都必须遵循EJB规范,以保证彼此之间的兼容性。因为每个部分都是各自分别进行的,构建一个企业级部署所需的时间就会显著的减少。而且由于每个团体的分工明确,长期积累的经验可以使得系统的每个部分都达到较高的质量。
1.        EJB组件供应商(Enterprise Bean Provider)
EJB的供应商是某个应用领域的专家级企业,他们提供可复用的商业组件和EJB。EJB不是一个完整解决方案中的一个组件。EJB组件供应商不是精通系统级的编程专家,因此,他们通常不在EJB中提供系统级服务,如事务、同步、安全、分布式计算等,这些服务往往要由EJB服务器来完成。
EJB供应商以ejb-jar文件包的形式提供EJB组件,其中含有Enterprise Beans,每个EJB都要定义的remote和home接口,编写执行商业逻辑的EJB class,提供部署EJB的部署文件和环境属性。
2.        应用程序集成者(Application Assembler)
应用程序集成者负责整个应用程序的架构。他们有责任理解如何使用使各种各样的组件配合在一起,并编写应用程序整合这些组件。一个应用程序集成者可以依照这样的方法创建一些这样的组件。他们的工作是建造一个可以用大量可部署的组件构成的应用程序。应用程序集成者输出的可能是一个新的EnterpriseBeans,或是非Enterprise Beans的程序(如servlets、applets或scripts),集成者也可替应用程序写一个GUI.
应用程序集成者可以实现一些或所有这些任务:
1.        基于某个商业问题的知识,决定应该使用一个业已存在的组件,还是创建一个新的EJB;从大体上,设计应用程序的组成。
2.        提供用户接口(可能是Swing、servlet/Jsp、application/applet、或一个web service)。
3.        编写一个新的EJB来解决某个特定的商业问题。
4.        在一个组件中编写调用由Bean提供商提供现成的Bean.
5.        编写整合的代码来映射数据,使组件间可以相互通信。毕竟,组件自己不能神奇地组合在一起解决一个商业问题,特别是不同厂商之间的组件。
3. EJB部署者
   应用程序集成者做好一个应用后,必须部署在某个运行环境中。这时会以下一些难题:
1.        用一个防火墙或其他保护措施来保障安全。
2.        整合一个LDAP服务器实现安全的目录服务,如Lotus Notes或Microsoft Active Directory.
3.        选择提供所需性能级别的硬件。
4.        提供额外的硬件或其它资源来实现可靠性与容错性。
5.        调整系统性能。
EJB部署者熟悉特定的操作环境并掌握上面所列的技能。他们理解如何在服务器端部署Beans和如何为一个特定的系统定制Beans。EJB部署者可以改变Beans,也可以改变服务器,并决定在一个环境里哪些Bean应该被部署。
4.EJB容器供应商(EJB Container Provider)
   容器供应商提供EJB容器(应用程序服务器),这是Enterprise Beans 的运行环境。这个容器支持Enterprise Beans的中间件服务并管理他们。
   常见的容器:BEA: WebLogic      iPlanet: iPlanet Application server
IBM: WebSphere      Oracle: Oracle 9i
Macromedia: Jrun     Persistence: PowerTier
   Brokat: Gemstone/J    HP:Bluestone
IONA: iPortal         Borland: AppServer
开源: Jboss
另:bean---容器约定
在EJB服务器上包含bean的环境经常被认为是容器。容器更多的是一个概念,而不是一个模型。在概念上,容器作为bean类和EJB服务器的媒介物。容器管理EJB对象和一个特定类型bean的EJBhome,并帮助这些模型管理bean资源和给运行时bean实例提供诸如事务、安全、并发性、命名等基本服务。从概念上来说,一个EJB服务器可以有很多容器,每个容器可以包含一种或多种类型的Enterprise bean.
5.系统管理员(System Administrator)
一旦部署成功,系统管理员就要介入并检查系统的稳定性。利用EJB服务商提供的实事监控和管理工具。例如:Tivoli和Computer Associates公司的产品。
6.开发工具供应商(Tool Provider)
为了简化组件开发过程,应该有一些标准化方法来创建、管理、维护组件。在EJB开发过程中,有多种集成开发环境(IDE)可以帮助你快速地创建和调试组件。
例如:Webgain:   Visual Café
       IBM:       VisualAge for java
       Borland    Jbuilder
有一些工具帮助你用UML语言来创建组件模型
例如:Togethersoft:  Together/J
      Rational:      Rational Rose
组件组织工具: Flashline,ComponentSource
测试工具:     JUnit, RSW Software
创建工具:     Ant
EJB component开发简介
1.EJB component的分类:
1.        session bean
2.        entity bean
3.        message-drived bean
2.EJB Component 的组成部分:
#1.Enterprise Bean 类:
包含了组件的实现细节,是实际完成bean功能的地方。EJB容器根据需要调用这个类对bean进行实例化。EJB规范定义了很多标准接口,可供编写、实现bean的类继承,这些接口定义了一些bean类必须实现的接口,以便用户的bean类对外暴露所有的bean都必须提供的特定方法,因为EJB容器需要利用这些方法来对bean进行管理。这些接口集中在javax.ejb.EnterpriseBean接口中,它扩展了java.io.Serializable接口。这个接口是标记接口,实现它表明所编写的是一个真正的EnterpriseBean类。由于它没有扩展Remote接口,所以bean本身是不具备网络功能的,无法通过网络让客户端直接调用,相应的网络和中间件功能是通过下面的EJB对象提供的。不同类型的EnterpriseBean实现不同的接口,在这些接口中分别定义了一些必须的方法,这些方法都是管理bean的方法,是供容器调用的,bean的客户端永远也不会调用。在此基础上再添加用户所需的业务方法等。
#2.EJB对象:
    在服务器端,一个EJB对象是一个实现了bean的远程接口(具有网络功能)的分布式对象,它在服务器端上包装了bean的实例。EJB对象是容器供应商工具产生的,由EJB容器自动生成,事物处理、安全管理、持久性控制等中间件服务是由容器提供的,EJB对象由容器控制在适当的时机调用所需的服务,这些服务对客户而言是透明的。这种委托机制是EJB体系最大的优点之一。通过委托,用户在实现bean时可以只关注于自己要完成的业务逻辑。由EJB对象透明的完成其他复杂的功能。对客户端而言,所见到的只是EJB对象,只能调用它的方法,因而在EJB对象中,必须复制bean类的所有业务方法并暴露给客户端。注意,EJB对象的具体实现随容器的不同而不同,但客户端是感觉不到的。
#3.Remote接口
    遵照EJB规范,所有的Remote接口都必须来源于一个通用的接口,即javax.ejb.EJBObject接口,该接口扩展了java.rmi.Remote,包含了EJB对象必须实现的方法。除与应用程序本身有关的违例,远程接口中的每个方法都必须在自己的throws从句中声明java.rmi.RemoteException.这些方法是容器生成EJB对象时实现的。Remote接口中还必须复制bean中的业务方法。(RMI)接口的属性必须是public.作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远程接口,不可声明为实施类。
#4.Home对象
    客户端调用的是EJB对象的方法,而不是直接调用bean的方法。但客户端如何获得EJB对象的引用的呢?由于EJB对象可能分布在网络上,客户端无法直接生成EJB对象的实例。同时,EJB倡导位置透明性,客户端是不知道EJB对象的具体位置的。为了获得EJB对象的引用,客户端代码从home对象处要求得到一个EJB对象,home对象也是容器自动生成的,它是EJB对象的“制造工厂”它能够完成以下功能:生成、查找(仅限于实体bean)、删除。
#5.Home接口
     它继承了javax.ejv.EJBHome 接口,而它扩展了java.rmi.romote接口。开发者必须定义home接口,容器厂商则提供从home接口中产生home对象实现的方法。
#6.Local接口和EJBLocal对象
    它们分别是remote接口和EJB对象的另一种更高性能的实现。在原来的规范中,remote接口是将bean的方法暴露在网络上,对这些方法的调用都是通过RMI实现的,而不管所调的bean处于什么位置。在某些情况下,比如客户端所调用的bean与自身在同一个java虚拟机上,由于不得不按照RMI的方法完成,付出了不必要的网络开销,导致性能下降。为了解决这个问题,引入了Local接口,它不扩展Remote接口,是标准的java接口,包含了与Remote接口相似的方法。
#7.LocalHome接口和LocalHome对象
#8.XMl文件
     描述了我们的bean对中间件服务方面的要求。
3.EJB Component的调用流程
EJB Component在部署到应用服务器上之后,客户端就可以调用它来完成各种功能。过程如下:
1.        客户端首先通过JNDI服务检索Home对象。在EJB应用部署到应用服务器上之后,容器会自动获得Home对象的信息并将其加入到JNDI中。
2.        JNDI服务返回所查找的Home对象的引用。
3.        Home对象的创建或者查找EJB对象。
4.        Home对象将获得的EJB对象返回给客户端。
5.        客户端利用获得的EJB对象引用,调用业务方法。
6.        EJB对象获得对应bean的一个实例并将相应的业务方法调用传递给该实例。
7.        Bean实例通过其实现代码,完成相应的业务逻辑并将结果返回给EJB对象。
8.        EJB对象将方法的结果返回给客户端。
4.EJB Component开发实例
1.        编写组成EJB Component的各个.java文件,包括接口文件、EJB类文件以及helper等其他需要的文件并编译成.class文件。
2.        编写EJB Component的部署描述。
3.        用jar工具形成EJB-jar文件,其中包含.class文件和部署描述符。
4.        在实际的EJB Server上部署bean,配置相应的参数以及bean需要的资源,这个过程随EJB Server的不同而有所不同。
5.        编写客户端代码对bean的功能进行测试,这一步是可选的
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值