- 浏览: 158981 次
- 性别:
- 来自: 北京
最新评论
-
jz20110918:
千秋霸业 写道写的非常的好。只是我现在遇到了读取的问题,有的e ...
Java解释Excel数据(jxl.jar包的使用) -
dwangel:
shaka 写道我的问题一样,可是我在jsp设置了isELIg ...
JSP页面EL表达式无效的问题 -
shaka:
我的问题一样,可是我在jsp设置了isELIgnored,还是 ...
JSP页面EL表达式无效的问题 -
Lixh1986:
整理的很详细。辛苦了,谢谢。
java.util.Properties类的使用 -
iceworld4143:
挨踢也疯狂 - 菠菜永久域名
这个名字真彪悍
hibernate自动建表
EJB有两种主要类型BMP(Bean managed persistence )和CMP(Container managed persistence ),这两种类型各有优缺点。
BMP是在Bean中完成对数据库JDBC的各种调用,也就是说,在你的实体bean(entity bean)中,明确写入了SQL语句,如"insert .. "或"select ..",并且使用Datasource获得一个数据库资源以及连接(connection)从而对数据库直接进行增加删除修改。
CMP是由EJB容器自动完成对数据库的操作,你所有做的,就是在实体bean重写入SetXXX或getXXX方法,然后在ejb-jar.xml中定义cmp-field就可以。
很明显,CMP编写要简单多,而且数据库操作由EJB容器完成应该是一种趋势,但是CMP有个缺点就是不够灵活,如果我们要完成类似SQL搜索语句的like命令,如"select * from A where name like '%banqiao'",CMP就无法自动帮助我们完成,这样我们就需要BMP自己来写。
在实际应用,一般为了效率考虑,我们尽量使用CMP,但如何为将来有可能使用BMP作好准备,就是说有可以延伸到BMP的基础。EJB 2.0对CMP的抽象类支持为我们提供了这种实现的基础。
总体思路是,先使用抽象类完成CMP 如果需要BMP 可以extend这个抽象类,然后覆盖原来的方法(用自己的特殊SQL语句操作来覆盖该方法)。
以Java 宠物店(Java Pet Store Demo 1.3)中的地址实体bean:AddressEJB为例:
在上面的AddressEJB中,我们看到只有setXXX或getXXX的方法。
在相应的部署描述文件ejb-jar.xml中我们看到:
在上面部署文件中,标明了Address数据库字段:
firstName,lastName,street1,street2,city,state,country,zip
一旦我们要使用BMP, 只要继承上面的CMP bean:
public class AddressBeanBMP extends AddressEJB {
用我们自己的BMP方法覆盖AddressEJB中的方法:
ejbLoad() -->从数据库中获取数据(SELECT)
ejbStore() -->修改数据库数据UPDATE)
ejbRemove() -->删除数据库数据(DELETE)
ejbCreate() -->插入新的数据记录(INSERT)
ejbFindByPrimaryKey(primary key) --> 确保 primary key 存在.
ejbFindAllPrimaryKey() -->自己的定义 返回一个primary key所有数据记录的collectionxiam
下面以ejbCreate()为例:
BMP是在Bean中完成对数据库JDBC的各种调用,也就是说,在你的实体bean(entity bean)中,明确写入了SQL语句,如"insert .. "或"select ..",并且使用Datasource获得一个数据库资源以及连接(connection)从而对数据库直接进行增加删除修改。
CMP是由EJB容器自动完成对数据库的操作,你所有做的,就是在实体bean重写入SetXXX或getXXX方法,然后在ejb-jar.xml中定义cmp-field就可以。
很明显,CMP编写要简单多,而且数据库操作由EJB容器完成应该是一种趋势,但是CMP有个缺点就是不够灵活,如果我们要完成类似SQL搜索语句的like命令,如"select * from A where name like '%banqiao'",CMP就无法自动帮助我们完成,这样我们就需要BMP自己来写。
在实际应用,一般为了效率考虑,我们尽量使用CMP,但如何为将来有可能使用BMP作好准备,就是说有可以延伸到BMP的基础。EJB 2.0对CMP的抽象类支持为我们提供了这种实现的基础。
总体思路是,先使用抽象类完成CMP 如果需要BMP 可以extend这个抽象类,然后覆盖原来的方法(用自己的特殊SQL语句操作来覆盖该方法)。
以Java 宠物店(Java Pet Store Demo 1.3)中的地址实体bean:AddressEJB为例:
public abstract class AddressEJB implements EntityBean { private EntityContext context = null; // getters and setters for PO CMP fields public abstract String getFirstName(); public abstract void setFirstName(String name); public abstract String getLastName(); public abstract void setLastName(String name); public abstract String getStreet1(); public abstract void setStreet1(String name); public abstract String getStreet2(); public abstract void setStreet2(String name); public abstract String getCity(); public abstract void setCity(String name); public abstract String getState(); public abstract void setState(String name); public abstract String getCountry(); public abstract void setCountry(String name); public abstract String getZip(); public abstract void setZip(String name); public Object ejbCreate( String fName, String lName, String s1, String s2, String cy, String st, String cnty, String pcode) throws CreateException { setFirstName(fName); setLastName(lName); setStreet1(s1); setStreet2(s2); setCity(cy); setState(st); setCountry(cnty); setZip(pcode); return null; } public void ejbPostCreate( String fName, String lName, String street1, String street2, String city, String state, String country, String zip) throws CreateException { } public void setEntityContext(EntityContext c) { context = c; } public void unsetEntityContext() { } public void ejbRemove() throws RemoveException { } public void ejbActivate() { } public void ejbPassivate() { } public void ejbStore() { } public void ejbLoad() { } }
在上面的AddressEJB中,我们看到只有setXXX或getXXX的方法。
在相应的部署描述文件ejb-jar.xml中我们看到:
<entity> <display-name>AddressEJB</display-name> <ejb-name>AddressEJB</ejb-name> <local-home>com.sun.j2ee.blueprints.address.ejb.AddressLocalHome</local-home> <local>com.sun.j2ee.blueprints.address.ejb.AddressLocal</local> <ejb-class>com.sun.j2ee.blueprints.address.ejb.AddressEJB</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Object</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>Address</abstract-schema-name> <cmp-field> <field-name>firstName</field-name> </cmp-field> <cmp-field> <field-name>lastName</field-name> </cmp-field> <cmp-field> <field-name>street1</field-name> </cmp-field> <cmp-field> <field-name>street2</field-name> </cmp-field> <cmp-field> <field-name>city</field-name> </cmp-field> <cmp-field> <field-name>state</field-name> </cmp-field> <cmp-field> <field-name>country</field-name> </cmp-field> <cmp-field> <field-name>zip</field-name> </cmp-field> <security-identity> <description></description> <use-caller-identity></use-caller-identity> </security-identity> </entity>
在上面部署文件中,标明了Address数据库字段:
firstName,lastName,street1,street2,city,state,country,zip
一旦我们要使用BMP, 只要继承上面的CMP bean:
public class AddressBeanBMP extends AddressEJB {
用我们自己的BMP方法覆盖AddressEJB中的方法:
ejbLoad() -->从数据库中获取数据(SELECT)
ejbStore() -->修改数据库数据UPDATE)
ejbRemove() -->删除数据库数据(DELETE)
ejbCreate() -->插入新的数据记录(INSERT)
ejbFindByPrimaryKey(primary key) --> 确保 primary key 存在.
ejbFindAllPrimaryKey() -->自己的定义 返回一个primary key所有数据记录的collectionxiam
下面以ejbCreate()为例:
public Object ejbCreate( String fName, String lName, String s1, String s2, String cy, String st, String cnty, String pcode) throws CreateException { // insert row into database this.fName = fName; this.lName = lName; this.s1 = s1; this.s2 = s2; this.cy = cy; this.st = st; this.cnty = cnty; this.pcode = pcode; // Insert database record try { Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement( "INSERT INTO Address (firstName,lastName,street1,street2,city,state,country,zip) VALUES (?, ?, ?,?,?,?)"); statement.setString(1, fName); statement.setString(2, lName); statement.setString(3, pcode); statement.setString(4, s1); statement.setString(5, s2); statement.setString(6, st); statement.setString(7, cy); statement.setString(8, cnty); if (statement.executeUpdate() != 1) { statement.close(); connection.close(); throw new CreateException("Could not create: "); } statement.close(); connection.close(); } catch (SQLException e) { throw new EJBException("Could not create: "); } }
发表评论
-
java进制互转
2008-04-25 13:31 1946十进制转成十六进制: Integer.toHexString( ... -
hibernate自动建表
2008-04-24 16:31 11874方案一 在hibernate.cfg.xml中添加: 引用&l ... -
Spring常用Interface&Class,为自己make plan
2008-04-22 11:02 2446最近对spring感兴趣,基 ... -
dom4j操作xml
2008-01-21 13:23 2329<Elements xmlns="http ... -
JSP页面EL表达式无效的问题
2008-01-13 01:33 15845以前用WSAD wizard做的, ... -
java.util.Properties类的使用
2007-12-31 03:26 30882Properties 类已不是新东西了,它在 Java 编程的 ... -
Java解释Excel数据(jxl.jar包的使用)
2007-12-31 03:17 24151jxl.jar 包 下载地址: http://www.andy ... -
实战角度比较EJB2和EJB3的异同
2007-12-30 03:48 2190本文从实战角度比较EJB2和EJB3的异同,通过深入剖析揭 ... -
log4j.properties input log to file.
2007-12-21 14:55 1976# Set the enterprise logger cat ... -
Java中如何正确使用字体编码
2007-12-21 00:56 1898首先声明一下,此文章 ... -
websphere mq常用命令
2007-12-12 15:41 5555转自:http://blog.csdn.net/shrek_c ... -
【半转】struts1.2 与struts1.1 Data-sources的配置
2007-12-07 10:01 2244原文链接http://club.yc.nx.cn/blog/u ... -
【转】请问一下什么是application server?它和web server有什么区别
2007-12-07 09:52 2970From http://slikyn.iteye.com/bl ... -
如何让WSAD的设置Workspace对话框重见天日
2007-11-30 17:45 1442每个用过IBM WSAD5.x的朋友都可能会遇 ... -
ejb在于你是去部署一个工程,而不是去编写一个工程。
2007-10-17 20:34 1260ejb在于你是去部署一个工程,而不是去编写一个工程。 这一句就 ... -
DB2——JDBC个人记录 (2)
2007-10-17 02:48 2001上次说 COM.ibm.db2.jdbc.net.DB2Dri ... -
DB2——JDBC个人记录
2007-10-17 02:40 1606我使用的DB2 Version为 8.1.10.812 网上有 ... -
login部分的Random验证码代码,还不够完善...
2007-10-17 02:34 1465package mypack.login; import ... -
[Ken原创] Struts里的session用法。
2007-10-17 02:33 3073昨天晚上突然遇到一个莫名其妙的问题,可惜因为熄灯没解决好,导致 ... -
[Ken原创]面向对象部分的总结
2007-10-17 02:31 1388Java也学一阵子了,最近正做项目才发现还是基础方面欠缺点,这 ...
相关推荐
EJB实体Bean的学习,增删改查.表有自动增长列
使用bean管理的持久性(Bean Managed Persistence,BMP)实体bean时,开发人员编写持久性代码而容器确定何时执行该代码。使用容器管理的持久性(Container Managed Persistence,CMP)实体bean时,容器生成持久性...
一个数据库记录实体Bean实例:介绍编写CMP和BMP实体BEAN的方法。
六、用deploytool工具部署CMP实现的实体Bean 七、CMP的主键 第7章 一个消息驱动Bean的例子 一.例子应用程序介绍 二.J2EE应用程序客户端 三.消息驱动Bean类 四.运行本例子 五.用deploytool部署消息驱动Bean 六....
六 用deploytool工具部署CMP实现的实体Bean 110 七 CMP的主键 110 第7章 一个消息驱动Bean的例子 113 一.例子应用程序介绍 113 二.J2EE应用程序客户端 114 三.消息驱动Bean类 115 四.运行本例子 116 五.用...
CMP和BMP实现实体Bean的代码比较 98 访问(get和set)方法 98 持久性字段的访问方法 99 关系字段的访问方法 99 select方法 99 商业方法 100 实体Bean方法 100 Local Home接口 101 Local接口 102 三.RosterApp配置...
用deploytool部署BMP实现的实体Bean 74 三.为BMP映射表间关系 74 四.BMP的主键 85 五.异常处理 88 第6章 CMP的例子 89 一 RosterApp应用概述 90 二 layerEJB代码分析 90 三....
13.2.3 使用JSP Bean中的存储过程 13.2.4 ProcessNABean的作用 13.2.5 错误处理 13.2.6 使用存储过程作为输入和输出参数 13.3 小结 第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储...
13.2.3 使用JSP Bean中的存储过程 13.2.4 ProcessNABean的作用 13.2.5 错误处理 13.2.6 使用存储过程作为输入和输出参数 13.3 小结 第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储...
13.2.3 使用JSP Bean中的存储过程 13.2.4 ProcessNABean的作用 13.2.5 错误处理 13.2.6 使用存储过程作为输入和输出参数 13.3 小结 第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储...
13.2.3 使用JSP Bean中的存储过程 13.2.4 ProcessNABean的作用 13.2.5 错误处理 13.2.6 使用存储过程作为输入和输出参数 13.3 小结 第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储...
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...
10.session bean 和 entity bean的区别 11.ejb中的transaction机制 12.synchronized (生产者和消费) 13.String 和 StringBuffer 14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp与udp的...