选择显示字体大小

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中我们将用到它)
  
public entitycontext getentitycontext() {
   return ctx;
}


ejb部署描述符  
我们创建了一个cmp实体类,现在该创建部署描述符了.首先我们将创建一个标准的"ejb-jar.xml",然后我们需要配置与厂商有关的信息.我们将说明weblogic 6.1 部署描述符,我们选一个.
  标准 ejb-jar.xml

  基本的实体配置信息:

  我们将配置类名,用局部变量,在实体内部它们是局部变量.我们通过持久类型xml标签告诉容器该实体是cmp
<entity>
  <ejb-name>inventorybean</ejb-name>
  <local-home>inventoryhome</local-home>
  <local>inventory>/local<
  <ejb-class>inventorybean</ejb-class>
  <persistence-type>container</persistence-type>
  <prim-key-class>java.lang.string</prim-key-class>
  <reentrant>false</reentrant>

接着,我们将告诉容器那些域是容器管理的,item域是主键类:

原文:http://www.onjava.com/pub/a/onjava/2002/04/10/j2eedesign.html

matrix开源技术经onjava授权翻译并发布.
如果你对此文章有任何看法或建议,请到matrix论坛发表您的意见.
注明: 如果对matrix的翻译文章系列感兴趣,请点击oreilly和javaworld文章翻译计划查看详细情况
您也可以点击-minpeng_2001查看翻译作者的详细信息.


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons