EJB(EntERPrise JavaBeans)入门(3) 本章节主要讲述:什么是一个会话 Bean (Session Bean);无状态和有状态会话 Bean 的区别;无状态会话 Bean 的生命周期 ;构建一个 Bean 所需的 Java 类型;如何在 VisualAge for Java 中开发和测试无状态会话 Bean 等。 本章讲述内容 - 什么是一个会话 Bean (Session Bean)?
- 无状态和有状态会话 Bean 的区别
- 无状态会话 Bean 的生命周期
- 构建一个 Bean 所需的 Java 类型
- 如何在 VisualAge for Java 中开发和测试无状态会话 Bean
什么是一个会话 Bean? - 在客户端与服务器间的关系
- 每个客户端有它自己的会话 Bean
- 会话 Bean 通常不会被共享
- 短暂存在:会话 Bean 通常用来提供服务,它们不代表长期存在的事物
- 示例:计算器、购物车、命令处理器
Stateless 与 Stateful 会话 Bean 区别 - 无状态 (Stateless)
- 在不同方法调用间不保留任何状态
- 事务处理必须在一个方法中结束
- 通常资源占用较少;可以被共享(因为它是无状态的)
- 有状态 (Stateful)
- 可以在不同的方法调用间保持针对各个客户端的状态
- 与客户端的联系必需被维持;通常开销较大
会话 Bean 的生命周期 - 注意:
- 客户端可以通过下列方法保持对对象的引用:对象的 stub (远程引用)保存下的对象 Handle
- 这同时也避免了对象被回收
Bean 的引用可存放在 javax.ejb.Handle 类中,而它是可序列化的获得 Handle 的方法EJBObject.getHandle()从 Handle 取回 Bean 的引用Handle.getEJBObject()可以调用 isIdentical() 来判断不同引用所代表的 Bean 是否为同一个实例.  · 无状态会话 Bean 的生命周期 - 生命周期非常简单:容器可以调用 Bean 的 remove() 方法来回收 Bean,来控制资源的使用

 · 实例池 (Instance Pooling) - 每个客户端认为它们有独享的实例
- 它们, 实际上, 与其它客户端共享资源
- Bean 被保留在池中直到被请求:它们从池中被激活,完成操作然后被返回
- isIdentical() 对无状态会话 Bean 而言,永远返回 true
· 开发一个 Bean - 对无状态会话 bean 而言非常简单
- 对其它类型的 bean,home 接口有更重要责任
 (图片较大 请放大查看) - 定义您的 bean 的协议:客户端如何访问您的 bean?
- 所有的方法必需抛出 java.rmi.RemoteException,也可抛出其它与应用相关的异常
- 不要将 'remote' 接口与 java.rmi.Remote 混淆---不同的概念
 - 提供您的 bean 的行为:实现在 remote 接口中定义的方法; 不直接 'implements' remote 接口
 三种类  ■开发人员编写 □由容器生成 Calculator Stub 实现 Calculator 吗? - 客户端只与 Interface 类型交互--客户端永远无法存取 bean 类
- 申明为接口类型的变量可以包容该接口的任意实现体--Stub 实现接口
- Interface 定义协议--描述了 bean 所能理解的消息集合
· EJB 容器 - 管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean
- 生成代码来实现对 Bean 的存取访问
- 强制事务处理的限制
- 创建、初始化和回收 Bean
- 管理持久数据的存储
· 在 VisualAge 的 EJB 开发 - 'EJB' 标签--通过添加特征出现在工作台 (Workbench) 上
- EJB 组
- 一组相关的 bean (VAJ 独有的概念)
- 通常成为单个服务器/容器
- 测试客户机--自动生成的客户端来测试您的 bean
- 在 VisualAge for Java 直接调试部属--VisualAge 可用工具: debugger, inspectors, ...
· 开发一个无状态会话Bean 流程 - 创建一个 'EJB 组'
- 创建一个 Bean
- 添加方法到 Bean
- 提升方法到 'Remote' 接口中
- 生成部属代码
- 配置部属描述符 (deployment descriptor)
- 启动服务器
- 运行测试客户机
· 创建一个 'EJB 组'   · 创建一个 Bean   · 添加方法到 Bean 中 · 提升方法到 Remote 接口   · 生成部署代码 - 您可以:
- 针对 EJB 组,将生成组中所有 bean 的部属代码
- 针对单个 bean
 生成的部属代码在哪? - 通常,您不需要考虑这些代码
- 但您仍可以查看它们
- 大量的部属代码是自动生成的
 配置部属描述符(deployment descriptor) - 选取您的 EJB 组然后选择 'Add to > Server Configuration'
- 在服务器配置窗口中,您可以配置部属信息
  启动 Name Server - 从 'Workspace > Tools' 菜单中启动 WebSphere Test Environment
 · 启动 EJB Server   运行测试客户机 :选取您的 bean,从弹出菜单中选择 'Run Test Client'  设置断点  - 您可以如常规代码来设置断点:使用 debugger 来单步跟踪代码的执行
- 在出现未被处理的异常时 debugger 也将被弹出:注意您要 kill 的线程
回顾: 创建无状态会话 Bean - 创建一个 'EJB 组'
- 创建一个 Bean
- 添加方法到 Bean
- 提升方法到 'Remote' 接口中
- 生成部属代码
- 配置部属描述符 (deployment descriptor)
- 启动服务器
- 运行测试客户机
(未完待续)
|