请教并讨论BMP和CMP的选择和使用问题

UB 2003-04-08 12:09:52
一个BEA的技术人员(行业技术支持),曾经跟我们讨论过,说BEA也"不推荐"用户使用CMP(就是最好不用).
在数据量很大时,CMP(容器管理的EntityBean),在性能上有些问题,这在BEA自己也是承认的,当然,EJB这种技术本身也在发展之中,会不断的改善。
过去,一般会把所有表,都做成CMP,让容器管理,实现对象化,会有很多好处,但是,这种做法,显然是“细粒度”的的处理方法,对应用服务器,对服务器的压力很大,而且,把很多应该是给数据库做的事情让应用服务器作了,这个应用服务器很大压力,(BEA的人说这其实是浪费了数据库的能力,如ORACLE)。(这里,怎样协调(关系型)数据库的应用和EJB的应用是另一个我很想知道的话题。)

现在,公司在尝试用BMP来做,用BMP+DAO+VO(ValueObject),来比较他和CMP的性能差异。具体就是,BMP-->DAO-->DAOimplements-->VO,(中间套用Facade做接口)。这样做实现“粗粒度”,灵活性。用VO做轻量级的数据访问对象。

现在想问,有没有人做过这些比较,性能差异有多少?各位在选择使用BMP和CMP的时候有些什么原则和方法?
还有,想问一下,有没有人对JDO比较熟悉,可以介绍一下?
本人还在学习阶段,很多问题不太清楚,希望各位能详细说明。谢谢。
...全文
31 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
leonzhao 2003-04-13
其实我觉得是否使用CMP的关键是选择的Application Server怎样。因为这和应用的开发水平无关,完全是App Server提供商的水平的展现。

怎么说呢?虽然估计很多人不同意,但是,Weblogic的技术真的很差(我的研究到版本6为止),并不适合生产系统。而且BEA的国内技术人员的水平那叫一个……差……

因此如果你的项目实施在一个更强大App Server上的话,我觉得CMP更好。
回复
ybcheng 2003-04-11
不错,俺今天也去下载来了!
还没来得及看那,有机会交流学习心得 阿!
回复
UB 2003-04-10
今天发现一个公司已经作了JDO Editions,甚至还有Struts Studio,图形化的编程设计工具。看起来很不错。拿来与大家分享:
http://www.exadel.com/products_products1.htm
回复
MyXin 2003-04-09
CMP和BMP的使用比较:

CMP给我们带来的最大好处就是遮掩了数据库操作。数据库在程序员的眼中就变成了一助相关联的类。作为一个程序员,对各式各样的数据库要达到非常熟悉(这样你才能谈得上合理利用和提高性能)是比较难的。CMP为java程序员释放了这一负担,所有的操作交给服务器去做吧!你只需做好你的商务逻辑就好了。
但是CMP由于要适应众多的数据库,故而它的功能完善就需大量时日。目前的CMP2的功能还不能达到大家满意的地步。如EQL简直就是一种幼儿级的语言,用它不仅限制太多,而且,大部分功能我都没法实现。而且,还有很多数据库驱动程序对它支持也不好。如sun.jdbc.odbc.JdbcOdbcDriver,你用它来进行LIKE查询看看!!!
对于BMP我就没什么好话了!既然什么都由我来做,我干什么受它的限制。我直接用Session+DAO得了,事务和安全都在session里处理就好了!
浅见于斯,请指正!QQ:26251433


回复
proZeus 2003-04-09
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=6987
回复
UB 2003-04-09
实现EntityBean无非是为了把数据层从关系型的数据库中脱离出来,实现OO。
但是CMP是大型的对象,他会把整个数据取到内存中,按以前的做法,把每个表做成CMP显然是消耗很大的,在金融,税务等方面的系统,数据量大,而且,并发大,高峰期,每秒的交易数会达到6,7百笔。每笔交易会涉及到很多表的查询。也就是说在多个表之间的查询开销很大。
在CMP里面做,一方面是不灵活,不方便,一方面是对应用服务器压力很大。但是在BMP里做,又放弃了很多容器提供的性能。
型数据库已经发展很多年,如ORACLE,他也有自己的缓存管理,以及高性能的查询。就目前阶段来说,放弃对数据库的依赖似乎也不合算。
现在,我们头的想法,一个就是想做CMP+CMP从属对象,划分功能,把部分表做成CMP,部分表做成CMP从属对象。但是在 CMP从属对象的实现上没有进展,不知道能不能做。哪位有经验可以介绍一下?
另一个就是用BMP+DAO+VO来做,想比较一下性能,也希望有经验的朋友可以介绍一下。最好能有实际的测试。
而且,对于哪些类型的表,数据对象,做成CMP,想请各位谈谈实际的划分原则和经验。

还有请楼上的朋友能不能给些JDO方面的资料,使用经验的网址?
谢谢。

回复
renyong 2003-04-09
MyXin(清晨,迎面吹来了凉爽的风),同意,我们的思路类似。
我认为使用J2EE,并希望在性能上得到提升的话,还是选择SessionBean + DAO吧,
让应用服务器和数据库分担开销,而且层次更明显一些。
我以前写的程序都是session + cmp的,发现不仅EQL不好使,而且事务处理也不方
便,速度会根据访问量的增长级数级变慢,我认为cmp的思想是好的,但是现在用
还有些为时过早,性能是最大的问题,虽然cmp现在被吵的很热,我还是建议大家
慎用。
回复
daou101 2003-04-09
up;
不紧SUN极力推荐CMP,所有容器供应商也把CMP功能作为服务器的头等大事.采用BMP,大大增加了编程的负担,且造成BUG的概率大大增加了.现在,决大部分EJB服务器已经实现了高效的CMP,
并且提供有效的 entity bean 缓存,为了让EJB应用变的简单,程序更强壮,建议你放弃BMP。
回复
javalovers 2003-04-08
Sun公司肯定极力推荐CMP,因为j2ee1.3和即将发布的j2ee1.4规范对CMP部分修改比较大,而BMP自从ejb1.1以来基本上没多大的变化。如果有大批量数据的操作,其实用BMP也是不管用,最好用SessionBean+DAO模式,J2EE设计模式里面有很多关于提高性能的模式。

至于JDO,是一种轻量级的数据对象,具体的功能和实体bean类似

回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2003-04-08 12:09
社区公告
暂无公告