- 浏览: 160711 次
- 性别:
- 来自: 北京
最新评论
-
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 1971十进制转成十六进制: Integer.toHexString( ... -
hibernate自动建表
2008-04-24 16:31 11925方案一 在hibernate.cfg.xml中添加: 引用&l ... -
Spring常用Interface&Class,为自己make plan
2008-04-22 11:02 2474最近对spring感兴趣,基 ... -
dom4j操作xml
2008-01-21 13:23 2380<Elements xmlns="http ... -
JSP页面EL表达式无效的问题
2008-01-13 01:33 15927以前用WSAD wizard做的, ... -
java.util.Properties类的使用
2007-12-31 03:26 30986Properties 类已不是新东西了,它在 Java 编程的 ... -
Java解释Excel数据(jxl.jar包的使用)
2007-12-31 03:17 24226jxl.jar 包 下载地址: http://www.andy ... -
实战角度比较EJB2和EJB3的异同
2007-12-30 03:48 2218本文从实战角度比较EJB2和EJB3的异同,通过深入剖析揭 ... -
log4j.properties input log to file.
2007-12-21 14:55 2020# Set the enterprise logger cat ... -
Java中如何正确使用字体编码
2007-12-21 00:56 1927首先声明一下,此文章 ... -
websphere mq常用命令
2007-12-12 15:41 5612转自:http://blog.csdn.net/shrek_c ... -
【半转】struts1.2 与struts1.1 Data-sources的配置
2007-12-07 10:01 2274原文链接http://club.yc.nx.cn/blog/u ... -
【转】请问一下什么是application server?它和web server有什么区别
2007-12-07 09:52 3009From http://slikyn.iteye.com/bl ... -
如何让WSAD的设置Workspace对话框重见天日
2007-11-30 17:45 1472每个用过IBM WSAD5.x的朋友都可能会遇 ... -
ejb在于你是去部署一个工程,而不是去编写一个工程。
2007-10-17 20:34 1288ejb在于你是去部署一个工程,而不是去编写一个工程。 这一句就 ... -
DB2——JDBC个人记录 (2)
2007-10-17 02:48 2028上次说 COM.ibm.db2.jdbc.net.DB2Dri ... -
DB2——JDBC个人记录
2007-10-17 02:40 1634我使用的DB2 Version为 8.1.10.812 网上有 ... -
login部分的Random验证码代码,还不够完善...
2007-10-17 02:34 1512package mypack.login; import ... -
[Ken原创] Struts里的session用法。
2007-10-17 02:33 3102昨天晚上突然遇到一个莫名其妙的问题,可惜因为熄灯没解决好,导致 ... -
[Ken原创]面向对象部分的总结
2007-10-17 02:31 1417Java也学一阵子了,最近正做项目才发现还是基础方面欠缺点,这 ...
相关推荐
在这个“EJB实体Bean学习”主题中,我们将深入探讨实体Bean的两大类型——BMP(Business Managed Persistence)和CMP(Container Managed Persistence),以及如何进行基本的CRUD(创建、读取、更新和删除)操作。...
### 实体Bean开发实例 ...实体Bean的开发需要理解其基本理论,掌握CMP和BMP的区别,以及如何构建实体Bean的各种组成部分。通过合理的实体Bean设计和实现,可以有效地管理数据库中的数据,并支持复杂的业务需求。
2. **Container-managed Persistence (CMP)**:容器负责对象与数据库之间的持久化工作,开发者无需直接处理数据库操作,只需定义实体Bean的字段和属性。 3. **Entity Beans 3.0(EJB 3.0引入)**:简化了Entity Bean...
`entityType`定义Bean的管理类型,可选CMP(容器管理的持久化)和BMP(Bean管理的持久化);`access`定义了访问持久化数据的方式,可以是PROPERTY(通过getter和setter方法)或FIELD(直接访问字段)。同时,实体...
实体Bean有两种类型:Bean管理持久性(BMP)和容器管理持久性(CMP)。 - **Bean管理持久性**: BMP中,开发者负责管理Bean的持久性,包括连接数据库、执行SQL语句以及处理事务。 - **容器管理持久性**: CMP中,EJB...
在EJB 1.1规范中,实体Bean分为两种类型:容器管理持久性(Container-Managed Persistence, CMP)和Bean管理持久性(Bean-Managed Persistence, BMP)。本篇主要聚焦于CMP。 **容器管理持久性(CMP)**是EJB 1.1...
实体bean有两种形式:容器管理的持久性(CMP)和bean管理的持久性(BMP)。CMP由EJB容器负责数据的持久化,而BMP则将更多的控制权交给开发者,让开发者自己处理数据的存储和检索。 在实际应用中,EJB可以通过JNDI(Java...
在 ejb2.rar_bmp ejb2_ejb2_ejb2 cmp b 这个压缩包中,我们看到的是针对EJB 2.1规范的一个登录实例,它涉及到了两种主要的实体Bean管理策略:CMP(Container-Managed Persistence,容器管理持久化)和 BMP(Bean-...
在EJB 2.0中,实体Bean分为两种类型:CMP(容器管理持久性)和BMP(Bean管理持久性)。 #### 1.1 容器管理持久性(Container-Managed Persistence, CMP) CMP是EJB 2.0中的一个重要特性,它将数据管理的责任交给了...
EJB3的实体Bean有两种生命周期管理方式:容器管理的持久性(CMP)和bean管理的持久性(BMP)。EJB3更倾向于使用CMP,由容器负责对象的创建、初始化、持久化、查找和删除,开发者只需要关注业务逻辑。 5. **事务...
**企业级JavaBeans(EJB)2.0实体Bean**是Java平台中用于构建可部署在企业级服务器上的分布式、事务处理和持久性应用程序的重要组件。这个PDF文档,"EJB2.0 Entity bean",可能包含了关于如何设计、实现和使用EJB2.0...
在EJB中,实体Bean分为两种主要类型:CMP(容器管理的持久性)和BMP( bean管理的持久性)。这两种类型的实体Bean在处理数据持久化和事务管理时有不同的职责分配。 1. CMP(Container Managed Persistence): CMP...
通过"使用ejb2.0 ql教程代码(cmp)"这个压缩包文件,你可以学习到如何在EJB 2.0环境中使用CMP和EJB QL进行数据库操作。这份资料可能包含实际的代码示例,展示了如何定义CMP实体Bean,编写EJB QL查询,以及如何在...
尽管现代技术如Spring Data JPA和NoSQL数据库提供了更多选择,但理解EJB-CMP和CMR的概念对于全面掌握Java EE技术栈至关重要。这份“EJB-CMP_CMR介绍与深入”资料,无疑是深入了解和学习这一主题的宝贵资源。
4. **CMP映射文件**:ejb-jar.xml或ejb-cmp.xml,定义了实体Bean与数据库表之间的映射关系,包括字段映射、主键生成策略等。 5. **主键(Primary Key)**:每个实体Bean都需要一个唯一的主键来标识,CMP提供了一些...
实体Bean和消息驱动Bean的结合使用,能够构建出高效、健壮的企业级系统,实体Bean负责数据持久化和共享,而MDB则负责异步处理任务,提高系统的响应能力和可扩展性。 总结,EJB3.0通过实体Bean提供了对数据库数据的...
在EJB 2.x中,实体Bean分为两种:Bean管理持久性(BMP)和容器管理持久性(CMP)。**CMP(Container Managed Persistence)**是EJB 2.x中的特性,它让容器负责对象和数据库之间的映射,简化了开发者的任务。案例可能...
10. **CMP和BMP的区别**: - CMP将持久性管理的职责交给了容器,开发人员无需关注数据库访问细节,但灵活性相对较低。 - BMP则让开发人员自己管理数据库访问,提供了更大的灵活性,但增加了开发复杂性。 通过理解...
此外,实体Bean还提供了多种本地接口方法,对应特定的SQL操作,如创建、更新、删除等,这些操作通常由容器或开发者根据选择的持久化策略(CMP或BMP)自动或手动执行。 ### 7. BMP与CMP的对比 BMP和CMP是实体Bean的...
实体Bean有两种主要类型:Bean管理持久性(Bean-Managed Persistence,BMP)和容器管理持久性(Container-Managed Persistence,CMP)。EMPBMPApp中的"EMP"很可能代表Employee,这是一个典型的业务对象,可能包含...