Enterprise JavaBean

来自ITwiki,开放的信息技术大百科

(重定向自EJB)

EJB(Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。

J2EE里,Enterprise Java Beans(EJB)称为Java 企业柄,是Java的核心代码,分为整体柄和片段柄和消息柄三个部分。

EJBsun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软.com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。


EJB的背景


Java由于其良好的跨平台行而成为服务器端的理想语言,为了利用Java实现服务器端的计算,SUN推出了一个完整的开发平台J2EE,其目的是为基于Java的服务器端配置提供一个独立于平台的可携带的多用户企业级的安全平台,而J2EE的基石就是Enterprise JavaBeans(EJB),EJB是建立基于JAVA的服务器端组件的标准,它定义了如何编写服务器端组件,提供了组件与管理组件的应用服务器之间的标准约定,EJB是一种组件架构,使得开发人员能够快速开发出具有伸缩性的企业级应用。


EJB 架构


EJB 从技术上而言不是一种"产品", 而是一个技术规范。

为了满足架构的目标,规范中描述了服务器 (Server),容器 (ContAIner), (Class) 和实例 (Instance),Home 和 Remote 接口,客户端 (Client)。


EJB简化的编程模型


关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ... 通用的编程模型:各种服务的高层 API

Java 是其编程语言

1.EJB 特点

由一个 EJB 容器在运行时创建和管理 EJB,在部署 EJB 时定制其运行方式,由 EJB 容器和服务器来协调客户端的访问,可以部署到任何兼容的 EJB 容器中,客户端对 EJB 的视图是由 Bean 开发人员决定。

2.EJB 服务器

管理 EJB 容器 (它管理 Bean),提供对操作系统服务的存取,提供 Java 相关的服务,尤其是通过 JNDI 访问命名空间基于 OTS 的事务处理服务。

3.EJB 容器

管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean生成代码来实现对 Bean 的存取访问 强制事务处理的限制,创建、初始化和回收 Bean,管理持久数据的存储对客户端而言 EJB 容器是透明的。

4.在一个 EJB 服务器中的容器

目前容器通常是由 EJB 服务器本身提供的,在 EJB 1.0 或 1.1 规范中没有定义容器-到-服务器的接口,各厂商可以根据他们的见解来实现服务器和容器的各自责任。

5.容器提供服务: 数据存储

容器决定何时载入/储存状态,Container-Managed Persistence(容器管理存储/CMP),容器负责存储您的 Bean,容器生成必要的类和代码

Bean-Managed Persistence(Bean 管理存储/BMP)

Bean 开发人员提供存储代码,开发人员决定 如何存储, 容器仍然决定 何时进行。

6.容器提供服务: 事务处理

可以由容器代理来实现,容器将得到业务逻辑方法的事务处理需求,容器提供事务控制代码,也可以由程序员通过代码实现。

7.容器提供服务: 其它服务包括

命名 (NAMing),安全 (Security),线程管理 (thread management),这些服务由容器代理完成将减少应用开发人员的负担。

8.分布式对象运算

远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大,Enterprise JavaBeans 永远运行在服务器上:对 Bean 的访问永远是远程调用。

9.Stub 和 Skeleton

由 EJB 生成:"Stub" 对要传递出去的信息编码,"Tie/Skel" 将接受到的信息解码并传递给目标对象。

10.分类: Enterprise JavaBeans

+---Entity Beans--CMP/BMP Ejb--|

+---SESsion Beans--Stateful/Stateless

会话 Bean (Session Bean):根据 EJB 规范,一个会话 Bean 是:

代表单个客户端来执行;可以参与到事务处理中;不直接代表共享于数据库中的数据,但它能访问和更新这些数据;相对而言是短暂存在的;当 EJB 容器失效后就不存在---客户端需要重新建立一个信新的会话对象来继续运算

实体 Bean (Entity Bean):根据 EJB 规范,一个实体 Bean 是:提供在数据库中数据的对象视图,允许被多个用户共享存取访问,可以是长期存在 (只要它存在于数据库中),实体 Bean, 它的主键对象, 以及它的远程引用将能跨 EJB 容器的宕机而存在。

11.EJB 类和实例

构建 EJB 应用包括来自三方的代码,开发人员编写的代码,由 EJB API 定义的类和接口,由容器自动生成的代码,开发人员编写的代码包括,Bean 类 (定义了业务逻辑),Home 接口 (如何查找或创建 bean),Remote 接口 (如何存取 bean)。


EJB的体系结构


目前,EJB最新的标准是2.1,EJB3.0规范正在讨论中,预计将于明年推出。EJB2.1定义了三种企业Bean,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。

1.Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。

2.Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

调用一个EJB组件要比调用一个JavaBean麻烦些,由于EJB组件可以分布在多台服务器上,因此必须首先获得远程或本地Home接口,然后使用Home接口创建EJB之后就可以调用EJB的方法了。


EJB设计模式


通常项目中,客户端往往需要频繁的对服务器端数据进行操作。当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作。这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差。

因此有必要在客户端与实体EJB层间加入Session EJB层,在Sessino EJB中实现商业逻辑并封装对实体EJB的操作。