EJB 是 J2EE 平台的核心,也是 J2EE 得到业界广泛关注和支持的主要原因。众所周知
J2EE 的一个主要目的就是简化企业应用系统的开发,使程序员将主要精力放在商业逻辑的
开发上。
EJB 正是基于这种思想的服务器端技术,它本身也是一种规范,该规范定义了一个
可重用的组件框架来实现分布式的、面向对象的商业逻辑;其核心思想是将商业逻辑与底层
的系统逻辑分开,使开发者只需关心商业逻辑,而由
EJB 容器实现目录服务、事务处理、持
久性、安全性等底层系统逻辑。
一个可部署的
EJB 组件包含 3 个部分:Remote 接口、Home 接口和 Enterprise Beans 类。
(1)
Remote 接口 Remote 接口定义 EJB 组件中提供的可供用户调用的方法,也就是
通常所说的实现商业逻辑的函数或过程(如计算商品价格的函数),以供远程客户端调用。
在
EJB 组件部署到容器的时候,容器会自动生成 Remote 接口相应的实例,即 EJB 对象,
它负责代理用户的调用请求。
(2)
Home 接口 Home 接口定义了一组方法来创建新的 EJB 对象,查找、定位和清除
已有的
EJB 对象。在 EJB 组件部署时,容器也会自动生成相应的 Home 对象,该对象负责查
找和创建
EJB 对象,返回 EJB 对象的引用给客户;用户利用该引用调用 EJB 组件的方法,
得到结果;最后
Home 对象清除 EJB 对象。可以形象地称 Home 接口为 EJB 对象的工厂。
(3)
Enterprise Beans 类 Enterprise Beans 类是商业逻辑的具体实现类。它可供用户调
用的方法在
Remote 接口中定义。根据功能不同,EJB 2.0 规范中定义了三种 Enterprise
Beans: 会 话 Beans ( Session Beans ) 、 实 体 Beans ( Entity Beans ) 和 消 息 驱 动
Beans(Message-driven Beans)。
① 会话 Beans 分无状态和有状态两种。一般无状态的会话 Beans 模拟商业逻辑,比如计
算价格等。有状态的会话
Beans 通常模拟一个客户会话,它会临时保存客户信息,根据客户
要求调用其他
Beans 来存取数据。两种会话 Beans 都不保存状态信息或数据,当客户断开连
接或服务器关闭时,会话
Beans 也随之消失。一个会话 Beans 的典型例子是网站上的购物车
② 实体 Beans 模拟商业数据,并表示一个数据存储,可以是状态信息或数据库中的一
条记录。实体
Beans 在客户断开连接或服务器关闭后,仍有服务保证其数据得以保存。一个
实体
Beans 的典型例子就是客户账号信息。
③ 消息驱动 Beans 在行为上很像会话 Beans。不同的是仅在需要向这些 Beans 发送消息
时才调用消息驱动
Beans,比如在需要的时候发送用户确认信息等。
另外,在提交和部署
EJB 组件时,还需要两个文件:部署描述文件,容器根据该文件
来部署
Enterprise Beans,提供所要求的服务;EJB jar 文件,它是提交给 EJB 容器的一个部
署单元,容器(应用服务器)在部署时解开它,装入
Enterprise Beans。
EJB 容器非常复杂,一般由专业的 J2EE 应用服务器开发商提供,比较流行的 EJB 容器
由
IBM 的 WebShpere、BEA 公司的 WebLogic Server、Sun 公司的 iPlant 等应用服务器提供
EJB 容器除了为 EJB 提供事务处理、目录服务、持久性管理和安全性服务外,还负责 EJB 的
部署、发布和生命周期管理。
3.平台标准服务
服务是组件和容器之间,以及容器和
J2EE 服务器之间的接口,在实现层面上它就是一
系列
API 和协议。J2EE 平台定义了一组标准的服务,其中有些服务是由 J2SE 提供的,有些
则是
J2EE 对 Java 的扩展。
(1) 目录服务 JNDI(Java Name and Directory) API 为应用程序提供了一个统一的接口
来完成标准的目录操作,由于
JNDI 是独立于目录协议的,应用程序可以用它访问各种目录
服务,如
LDAP、NDS、DNS 等。
(2) 数据访问 JDBC(Java Database Connectivity) API 为访问不同类型的数据库提供了
统一的途径,屏蔽了不同数据库的细节,具有平台无关性。
J2EE 平台除了要求核心的 JDBC
3