网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.扫描屏幕和颜色渐变的效果.
.Servlet容器工作原理(四).
.再议j2me进度条与线程化模型.
.KVM的类加载.
.JavaBean-XML组件轻松实现JavaBe.
.EnterpriseJavaBeans导论五.
.J2ME 走向成熟.
.J2EE Web的新变革:Apusic Opera.
.经典飞机游戏代码S60.
.演示Session Listener的使用方法.
.基于Axis的自定义对象序列化.
.基于MIDP实现Dialog组件.
.演示SessionAttributeListener的.
.选择:J2EE还是.NET,这是一个问.
.MIDP中对日期时间的简单转换.
.Mascot Capsule v3和命令列表功能.
.一个时间服务器简单实现.
.J2EE架构的6个最佳实践.
.J2EE常见问题.
.JDBC3.0新特性.

j2ee设计模式:CMP到BMP模式(一)

发表日期:2007-12-23



   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描述文件告诉框架应该影射什么,图一说明了我们的条目看起来是什么样子

j2ee设计模式:CMP到BMP模式(一)
图一


抽象实体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查看翻译作者的详细信息.进入讨论组讨论。

(出处:)


上一篇:J2EE的Web和企业架构(WEA)设计模式之一 人气:581
下一篇:J2EE交易框架 人气:577
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐