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描述文件告诉框架应该影射什么,图一说明了我们的条目看起来是什么样子
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 {public void ejbpostcreate(string item, float price, int stock) throws createexception {}
setitem(item);
setprice(price);
setstock(stock);
return null;
}
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);
public entitycontext getentitycontext() {
return ctx;
}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 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器