将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。
EJB体系结构中涉及以下 6 类软件构件:
1.Enterprise Java Bean(简称 Enterprise Bean)
分别是会话Bean(SessionBean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
SessionBean:
用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。SessionBean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。
Entity Bean:
是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象。事实上,创建一个EntityBean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将EntityBean的状态和数据库同步。
MessageDriven Bean:
是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态SessionBean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。
2.Home 接口
Home 接口(HomeInterface)包含 EJB生命周期管理的相关的方法,客户程序使用 Home接口创建或删除 EJB 的实例。
3.Remote 接口
Remote接口中包含 EJB 实现的方法的声明,它实际上约定了 EJB 所提供的服务。在 EJB 中,客户程序只能通Remote 接口来间接地访问 EJB实现的商业方法,不能直接进行调用。
4. EJB 容器
EJB容器为 EJB 构件提供运行环境并管理运行于其中的 EJB,理论上讲,一个 EJB 容器可以包含任何数量的EJB,但是由于实际资源的限制,实际的 J2EE 平台的容器往往有一个能够包含 EJB构件的上限。EJB 容器为 EJB 的执行提供系统级的服务,如自动将 EJB 相关的 Home 接口注册到一个目录服务中,自动注册服务支持客户应用查找定位EJB 的实例。
5. EJB 服务器
EJB服务器是遵循 EJB 定义的构件模型的 CTM 实现,一个 EJB 服务器可以包含一个或多个 EJB 容器,EJB服务器为 EJB容器的运行提供公共服务框架。公共服务框架支持系统级服务,如 JNDI 服务。从使用服务的角度来看,开发人员可以不区分 EJB 容器与 EJB 服务器,可以认为EJB 容器和 EJB 服务器提供的服务都是由容器提供的。
6. EJB 客户端
EJB客户端泛指调用 EJB 构件提供的业务操作的软件实体,EJB 构件的客户端可以有多种形式。如 EJB 的客户端可以是独立的Java 程序,也可以是运行在 Web 容器中的 Servlet或 JSP 构件,Servlet 或 JSP 形式的 EJB 客户端响应 Web 客户的请求;EJB的客户端还可以是其它的 EJB,例如 Session Bean 经常作为Entity Bean 的客户端来访问持久数据。
二、主要技术
分布式对象技术:
分布式对象技术提供客户端访问分布式对象的基本支持。除了EJB之外,其它的分布式对象技术包括 Java RMI、 CORBA、 DCOM等,所有的分布式对象技术都会使用某个特定的远程方法调用协议, EJB中最常用的远程方法调用协议是RMI/IIOP。不论其采用什么具体的远程方法调用协议,现有分布式对象技术一般均采用Stub/Skeleton结构来支持客户端与分布式对象之间的交互。
服务端构件技术:
服务端构件技术用于中间层应用服务器,支持分布式商业对象的开发。服务端构件技术以组件方式提供系统的可重用性与可扩展性,随着实际商业系统的变化,可以重新组装、修改、甚至删除商业对象,而不必重新重写整个应用系统。
CTM( Component Transaction Monitor)技术:
简单地说,CTM 是一个应用服务器,它为分布式商业对象提供公共服务框架,CTM 公共服务框架支持大量的系统级服务,如事务(Transaction)管理等。
综上所述,EJB采用的构件技术为我们刻画了 EJB 构件的基本特征:EJB 构件是由公共服务框架自动管理的分布式的服务端商业构件,其中, CTM技术提供了公共服务框架的支持,分布式对象技术提供了分布式对象的支持,而服务端构件技术提供了服务端构件管理的基本支持。
三、特点
公共服务框架:
EJB将实现商业对象所使用的服务框架的任务划分给了 EJB 应用服务器,服务框架支持大量的、由应用服务器提供的系统级服务。 EJB应用服务器提供的服务框架使得应用开发者可以关注于应用商业逻辑的实现,从而大大提高了开发效率,缩短了应用的开发周期。
平台独立性:
平台独立性一方面得益于EJB 沿袭了 Java 技术的平台无关性,另一方面,EJB/J2EE 规范的开放性使得构成 EJB 应用的商业对象可以移植到任何符合 EJB 规范的应用服务器上。
封装特性:
EJB规范提供对服务的封装特性(Wrap and Embrace),封装特性使得 EJB 应用可以使用现有的基础性服务(如目录服务),EJB 通过定义一系列标准的服务 API 来封装现有的基础性服务,EJB 构件通过这些标准的 API 来使用服务。如JNDI接口支持访问现有的命名目录服务(如 LDAP、COS),通过使用JNDI,EJB 应用服务器厂商可以将 LDAP 服务集成到其产品中,而不需去重新实现LDAP。EJB 的封装特性可以使应用服务器厂商节省IT投资,厂商可以使用现有的基础性服务,而不必去重新实现这些服务。
可定制性:
EJB构件可以在不修改源代码的基础上进行定制化,EJB 构件的定制是指修改 EJB 构件的运行时配置以满足特定用户的需求。EJB构件的定制主要通过布署描述符完成,如可以利用布署描述符改变EJB 构件的事务管理特性。除了 EJB 模块中标准的布署描述符 ejb-jar.xml 外,J2EE平台提供商通常还会提供特定的辅助布署描述符以支持更强的可定制特性,如Websphere中的ibm-ejb-ext.xmi、Weblogic中的weblogic-ejb-jar.xml 等。
协议无关性:
该特性指EJB 构件支持客户端通过多种 EJB 访问 EJB 构件 EJB 规范并没有强制约定只能通过 IIOP 协议来访问 EJB构件,客户端可以通过其它通信协议,如Weblogic 中支持的t3 协议(一种基于 HTTP 的协议)来访问远程 EJB 构件。协议无关性使得 EJB支持多种类型的客户端,不同类型的客户端使用不同的通信协议与 EJB 应用通信。
通用性:
通用性指EJB 规范可方便支持不同规模的应用系统,即可以在任何时间增加客户系统,而不需修改核心的应用系统。通用性通常意味着系统资源的可伸缩性,系统资源在软件构件处理客户请求时要使用到,如处理器(CPU),随着系统规模的增大,构件可能要处理来自大量的客户请求,这里往往需要增加冗余的系统资源,如提供多个处理器(服务器),同时还需要一种合理的负载均衡机制将客户端请求均匀地分发到不同的服务器上。基于EJB容器的基本支持,Java企业版平台(尤其是商用的平台)可以方便的支持不同规模的应用系统,如 Websphere 提供的克隆机制可以支持管理员将某个J2EE 应用复制多份在多个服务器上运行,同时为多份服务提供自动的负载均衡机制。
四、EJB构件与 Java Bean 的比较
EJB 与 JavaBeans 都是基于Java 语言的构件模型,开发应用时,可以选择 EJB 模型,也可以选择 JavaBeans 模型。 EJB 与 Java Bean 的区别主要包括以下几点:
1.在大型的 Java 企业版应用中, EJB 构件通常用于服务端应用开发,而 Java Bean 构件通常用于客户端应用开发或作为服务端EJB 构件的补充。当然也可以用 Java Bean 构件进行服务端应用的开发,但是与 EJB 构件相比, Java Bean 不能使用 Java企业版平台提供的公共服务框架的支持,当应用需要使用关键的公共服务(如事务控制服务)时,使用普通的Java Bean 构件显然不适合。
2. EJB 构件是可布署的,即 EJB 构件可以作为独立的软件单元被布署到 EJB 应用服务器上,是应用构(application components);而 Java Bean 是开发构件,不能被部署为独立的单元。
3.EJB 构件是布署时可定制的,开发人员可以通过布署描述符对 EJB 构件的运行时配置进行定制;而 Java Bean构件的定制通常仅发生在开发阶段,开发人员只能利用开发工具创建并组装 JavaBeans 构件,部署时不能对其进行定制。
4. EJB 构件是分布式对象,可以被客户应用或者其它 EJB 构件进行远程访问;而普通的 Java Bean 构件只能在其构成的应用中使用,不能提供远程访问的能力。
5.EJB 构件是服务端构件,运行在服务端,没有人机交互界面,对终端用户不可见;而部分 JavaBeans 构件对终端用户可见,如 GUI应用中使用的按钮构件等。
综上所述,从对比的角度看,可以认为EJB 是 Java 语言提供的服务端构件模型,而 JavaBean 则是 Java语言提供的客户端构件模型,具体开发时可根据应用的具体需求,结合 EJB和 Java Bean的特点,灵活的选择 EJB 或者 Java Bean。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/222937.html原文链接:https://javaforall.cn