软件构件与中间件技术 - EJB续 - 林慧苹

目录

EJB 构件分类

EJB 构件主要分为三类:

  1. 会话构件(Session Bean)
    • 有态会话构件
    • 无态会话构件
  2. 实体构件(Entity Bean)
    • BMP 实体构件(Bean-Managed Persistence)
    • CMP 实体构件(Container-Managed Persistence)
  3. 消息驱动构件(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 对比

特性EJBCOM
基础Java 语言C、C++、Basic 等
实现方式独立于操作系统与操作系统密切相关
生命周期管理通过容器实现通过类厂实现
规范系统性系统性好系统性不足

思考题

  1. EJB 构件包含哪些接口?
  2. EJB 构件是如何封装的?
  3. EJB 构件是如何分类的?
  4. COM 与 EJB 有什么异同?

相关笔记