EJB中的设计模式

来源:互联网 发布:什么是数据漫游 编辑:程序博客网 时间:2024/05/17 04:35
下面我们从设计模式的角度看看EJB的框架是怎样的?在这之前假设你已经大概了解了设计模式。专门的设计模式阐述请见我的设计模式之系列.

  EJB是采取多层结构,原先我们数据库开发基本是应用程序(商业逻辑运算)直接调用数据库驱动,在EJB中,为将商业逻辑计算和数据库截然分开,使用多个结构式模式:Adapter模式和Bridge模式等.这样做的好处显然有三个:

  1.分离了商业逻辑层和数据访问层;
   2.能同时支持多个数据库;
   3.但数据库类型更换时,不会设计到商业逻辑代码的大量修改.

  EJB中将对数据库进行调用(如发出select等语句)称为会话bean(Sessionbean),而将对应数据库一个个记录的bean称为实体bean(Entity bean);由这两种类型的bean完成对数据库的访问.

  会话bean一般和客户端应用是一一对应,而和数据库端联系紧密的是实体bean,EJB在实体bean(或直接在会话bean)和数据库之间使用了Adapter模式和Bridge模式,无意在实体bean和数据库之间又多了一层,称之为DAO(Data Access Object ),DAO实际就是设计模式的混合体.

  我们以Java的宠物店中的Catalog为例,这是专门处理宠物店中的宠物类别,在对数据库访问中,有两个主要程序:CatalogEJB和CatalogDAO,我们从具体代码中看看设计模式是怎么应用的.

  Bridge模式和Adapter模式
   我们首先看看CatalogEJB代码:

public class CatalogEJB implements SessionBean {
   protected CatalogDAO dao;

  //从DAO工厂中获取一个DAO 这是调用工厂(factory)模式的一个实例
   public void ejbCreate() {
     try {
       dao = CatalogDAOFactory.getDAO();
     }
     catch (CatalogDAOSysException se) {
       Debug.println("Exception getting dao " + se);
       throw new EJBException(se.getMessage());
     }
   }

  ....

 }

  我们发现在CatalogEJB中并没有通常的会话bean那样有对数据库操作的"select .. from ."等之类SQL操作语句,这些都被封装到DAO的具体实现中(Concrete class).

  在Catalog这个示例中使用了设计模式的Bridge模式,判断是否是某种模式,主要依据其参与者的种类和相互关系,我们先看看Bridge模式的定义和参与者:(未完待续)