分类: Java
2006-10-08 21:48:23
EJB概述
1.什么是 EJB?
一个技术规范:EJB 从技术上而言不是一种"产品"EJB 是一种标准描述了构建应用组件要解决的:
可扩展 (Scalable)
分布式 (Distributed)
事务处理 (Transactional)
数据存储 (Persistent)
安全性 (Secure)
2.Sun 对 EJB 的期望
提供一个标准的分布的、基于 OO 的组件架构屏蔽复杂的系统级功能需求Write once, run anywhere与非 Java 应用之间的互操作能力兼容 CORBA 标准
3.为什么选择 EJB?
EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现,而不是底层的实现机制(类似于 4GL 语言设计的目标)
支持事务处理
多个业务操作同时成功,或全部失败可以通过在代码外的描述来定义事务处理级别。
可扩展性
EJB 可以根据您应用的增长而扩展EJB 服务器往往还提供了负载均衡和安全性:由 EJB 服务器提供资源的访问权限控制。
4.EJB 架构
为了满足架构的目标,规范中描述了
服务器 (Server)
容器 (Container)
类 (Class) 和实例 (Instance)
Home 和 Remote 接口
客户端 (Client)
5. 简化的编程模型
关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ... 通用的编程模型:各种服务的高层 APIJava 是其编程语言。
6.EJB 特点
由一个 EJB 容器在运行时创建和管理 EJB,在部署 EJB 时定制其运行方式,由 EJB 容器和服务器来协调客户端的访问,可以部署到任何兼容的 EJB 容器中。客户端对 EJB 的视图是由 Bean 开发人员决定的 。
7.EJB 服务器
管理 EJB 容器 (它管理 Bean);提供对操作系统服务的存取;提供 Java 相关的服务,尤其是通过 JNDI 访问命名空间;基于 OTS 的事务处理服务
8.EJB 容器
管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean,生成代码来实现对 Bean 的存取访问。强制事务处理的限制;创建、初始化和回收 Bean;管理持久数据的存储;对客户端而言 EJB 容器是透明的。
9.在一个 EJB 服务器中的容器
目前容器通常是由 EJB 服务器本身提供的,在 EJB 1.0 或 1.1 规范中没有定义容器-到-服务器的接口,各厂商可以根据他们的见解来实现服务器和容器的各自责任。
10.容器提供服务: 数据存储
容器决定何时载入/储存状态;Container-Managed Persistence(容器管理存储/CMP);
容器负责存储您的 Bean;容器生成必要的类和代码;Bean-Managed Persistence(Bean 管理存储/BMP);Bean 开发人员提供存储代码;开发人员决定 如何存储, 容器仍然决定 何时进行 。
11.容器提供服务: 事务处理
可以由容器代理来实现;容器将得到业务逻辑方法的事务处理需求;容器提供事务控制代码,
也可以由程序员通过代码实现。
12.容器提供服务: 其它服务
其它服务包括:命名 (Naming);安全 (Security);线程管理 (Thread management);这些服务由容器代理完成将减少应用开发人员的负担。
13.分布式对象运算
远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大。Enterprise JavaBeans 永远运行在服务器上:对 Bean 的访问永远是远程调用。
14.Stub 和 Skeleton
由 EJB 生成:"Stub" 对要传递出去的信息编码;"Tie/Skel" 将接受到的信息解码并传递给目标对象
15.分类: Enterprise JavaBeans
+---Entity Beans--CMP/BMP
Ejb--|
+---Session Beans--Stateful/Stateless
会话 Bean (Session Bean):根据 EJB 规范,一个会话 Bean 是:代表单个客户端来执行,可以参与到事务处理中,不直接代表共享于数据库中的数据,但它能访问和更新这些数据,相对而言是短暂存在的。当 EJB 容器失效后就不存在---客户端需要重新建立一个信新的会话对象来继续运算。实体 Bean (Entity Bean):根据 EJB 规范,一个实体 Bean 是: 提供在数据库中数据的对象视图,允许被多个用户共享存取访问,可以是长期存在 (只要它存在于数据库中)。实体 Bean, 它的主键对象, 以及它的远程引用将能跨 EJB 容器的宕机而存在。
16.EJB 类和实例
构建 EJB 应用包括来自三方的代码:开发人员编写的代码;由 EJB API 定义的类和接口;由容器自动生成的代码。
开发人员编写的代码包括:
Bean 类 (定义了业务逻辑)
Home 接口 (如何查找或创建 bean)
Remote 接口 (如何存取 bean)
其它组件,根据 bean 实际要求
17.EJB Home 接口
每个 bean 有一个用于:创建新的 bean 实例、查找现存的 bean (只能是实体 bean)。
Remote 接口:定义 bean 的公共接口---只有在 Remote 接口中定义的方法才能被客户端访问。
EJB 客户端可以为 servlet, JSP, 应用程序或其它 bean,通过 JNDI 来查找 EJB home 接口,步骤为:
创建一个 JNDI Context (initial context)
使用 JNDI Context 来查找 bean home 接口
使用 bean home 接口来创建/查找 bean 实例
使用 bean 实例完成业务操作
实际的存取 (对 EJB) 是通过容器生成的类来完成
EJB 架构:客户端对 bean 访问永远不是直接的EJBObject (tie) 是由容器自身提供的:用来帮助管理 bean 的生命周期。
EJB 中的角色:
EJB 服务器供应商: 开发并销售 EJB 服务器
EJB 容器供应商: 开发并销售 EJB 容器
Enterprise bean 开发人员: 开发并销售 EJB
应用组装人员: 将不同的 EJB 搭建成应用
部属人员: 使用相应工具在运行环境下配置 EJB
系统管理员: 监视运行时情况
您学到了哪些?
EJB 是构建健壮,可扩展并支持事务处理的分布式对象技术规范有两种类型的 EJB: Session Bean 和 Entity Bean。一个 EJB 服务器使用 EJB 容器;容器来管理其所包容 bean 的生命周期每个 bean 将有三个类: bean 类, home 接口和 remote 接口。