首页|操作系统|软件开发|网页制作|媒体动画|数据库|ASP教程|ASP.NET教程|PHP教程|JSP教程|XML教程|建站资料|软件学院|行业资讯|平面设计|网络安全|晒IT论坛|IT人才
  位置: 晒IT >> JSP教程 >> JSP高级教程 >> 正文
 
 
j2ee设计模式:CMP到BMP模式(一)
j2ee设计模式:CMP到BMP模式(一)
 
 
EJB2.0终于给了我们一个可操作的容器管理持久(CMP)模型。只要有可能,在我的EJB项目中我就用CMP beans;但是,由于这件奇怪的事情,我需要把我的实体变成bean管理(BMP)的。我使用下面的模式让我干净利落的从CMP模型转换到bean管理持久模型。
 
    在这篇文章中,我们将讨论:
    1.CMP 2.0: 发生了什么变化?
    2.Inventory(货物清单)EJB应用程序
    3.开发一个CMP bean
     4.移植CMP bean到BMP
 
CMP 2.0: 发生了什么变化?
     当EJB问世的时候,CMP引起了很大的反响,当EJB2.0问世的时候,又对CMP模型进行了修订,它给了我们真正想要的特性:诸如关系和查询语言标准化。
    与EJB1.1相比,当我们用EJB2.0写一个CMP bean时,我们的写法有很大的不同。我们创建抽象类,而不是创建被容器管理变量的公共域,我们像JavaBean一样创建抽象的属性(getters and setters)。这准许特定厂商的持久性管理器用他们自己的方式实现数据访问器(accessors)。
    这将帮助他们(厂商)提出像这样的逻辑:
      ●由于他们不调用任何set方法,所以在ejbStore()中不做任何动作
      ●他们仅仅改变一个域,所以我们只在UPDATE查询语句中set那个域
      ●我们延迟装载一些数据,所以当用户用GET方法请求数据的时候我们才读取他
 
    顺便提一个问题:为什么我们必须在抽象类中创建抽象方法?为什么持久性管理器不能在派生类中创建方法?
    答:我们必须在抽象类中访问这些方法。例如:在ejbCreate()中,我们通过传入参数来SET它们。

 Inventory EJB 应用程序  
    为了说明该实体模型,我们将看到一个简单的应用用该实体模型化该货物清单(Inventory)系统。我们应用程序包括以下组成部分: 
 
   Inventory实体Bean:  这是我们的焦点。他将映射到数据库表Inventory,该表纪录了条目的名字(主关键字),价格和仓库中条目的数目
   价格无状态会话Bean:该Bean用Inventory实体Bean来得到条目的价格,它用本地(local)接口来访问该实体
   价格客户: 这个命令行应用程序在会话(session)上运行该方法来测试所有工作都运行得很好
   关键点是当我们把这个Inventory实体从 CMP移植到BMP实现时候,什么也不要做改变
 
  让我们看一下用CMP实现Inventory实体
开发一个CMP bean
   inventory CMP要我们创建一个抽象类(依照实体说明),XML描述文件告诉框架应该影射什么,图一说明了我们的条目看起来是什么样子


图一


抽象实体bean 
 该抽象实体有下列属性:
  实现了javax.ejb.EntityBean接口
   abstract public class InventoryBean implements EntityBean

  实现在实体接口中声明的方法
   
public void setEntityContext(EntityContext context) {
   ctx = context;
}
public void unsetEntityContext() {
   ctx = null;
}
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() throws RemoveException {}
public void ejbStore() {}
public void ejbLoad() {}

   

  实现ejbCreate()和ejbPostCreate()方法该方法对应于HOME接口中的Create()方法(用抽象set方法set所有参数)
  
 public String ejbCreate(String item, float price, int stock) throws CreateException {
      setItem(item);
      setPrice(price);
      setStock(stock);
      return null;
}

public void ejbPostCreate(String item, float price, int stock) throws CreateException {}
  实现抽象get和set方法
  
public abstract String getItem();
public abstract void setItem(String item);
public abstract float getPrice();
public abstract void setPrice(float price);
public abstract int getStock();
public abstract void setStock(int stock);


  实现一个助手方法来访问实体上下文(在后面的BMPbean中我们将用到它)
  
[1] [2]  下一页
  • 上一篇: Servlet中jdbc应用高级篇之五
  • 下一篇: Struts源码研究 - logic-Iterator标签篇
  •  告诉好友  打印此文 关闭窗口 返回顶部
     
    热点文章
     
     
    推荐文章
     
     
    相关文章

    | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 诚聘英才 |
    Copyright© 2008 ShaiIT.Com .All Rights Reserved
    下载alexa工具,提升您的网站排名