软件构件与中间件技术 - EJB续 - 林慧苹
目录
EJB 构件分类
EJB 构件主要分为三类:
- 会话构件(Session Bean)
- 有态会话构件
- 无态会话构件
- 实体构件(Entity Bean)
- BMP 实体构件(Bean-Managed Persistence)
- CMP 实体构件(Container-Managed Persistence)
- 消息驱动构件(Message-Driven Bean)
会话构件
有态会话构件
- 示例:HotelClerk Bean
- 管理客户会话状态
- 实现预订房间、支付等功能
- 代码示例:
public class HotelClerkBean implements SessionBean { InitialContext jndiContext; Customer cust; Vector resVector = new Vector(); public void ejbCreate(Customer customer) { cust = customer; } public void addReservation(Name name, RoomInfo ri, Date from, Date to) { ReservationInfo resInfo = new ReservationInfo(name, ri, from, to); resVector.addElement(resInfo); } }
无态会话构件
- 示例:CreditService Bean
- 处理信用卡验证和收费
- 无状态,适用于高并发场景
- 代码示例:
public class CreditServiceBean implements SessionBean { public void verify(CreditCard card, double amount) { String response = post("verify:" + card.postString() + ":" + amount); if (response.substring("approved") == -1) throw new CreditServiceException("denied"); } }
实体构件
BMP 实体构件
- 构件自己管理持久性(如存储到数据库、读取状态等)
- 示例:Customer Bean
- 实现类:
CustomerBean - 远程接口:
Customer - 从属对象:
Name、Address、CreditCard
- 实现类:
CMP 实体构件
- 容器管理持久性,减轻开发者负担
- 实现复杂,但提高开发效率
消息驱动构件
- 特点:
- 为单个客户发出的消息服务
- 生命周期相对较短
- 无状态
- 示例:处理异步消息的构件
EJB 3.0
- 简化了 EJB 开发过程
- 使用纯旧式 Java 对象(POJO)取代抽象 Bean 类
- 示例:
@Stateless @Remote({HelloWorld.class}) public class HelloWorldBean implements HelloWorld { public String SayHello(String name) { return name + "说:你好!"; } }
EJB 与 COM 对比
| 特性 | EJB | COM |
|---|---|---|
| 基础 | Java 语言 | C、C++、Basic 等 |
| 实现方式 | 独立于操作系统 | 与操作系统密切相关 |
| 生命周期管理 | 通过容器实现 | 通过类厂实现 |
| 规范系统性 | 系统性好 | 系统性不足 |
思考题
- EJB 构件包含哪些接口?
- EJB 构件是如何封装的?
- EJB 构件是如何分类的?
- COM 与 EJB 有什么异同?