初学者关于CMP的疑惑

在接触CMP之前早闻CMP有用没用之争,由于当时功力尚浅,便没有很留心。

这段时间我看了jdon了不少关于CMP的帖子,banq总结出在需要频繁查询大规模数据,并且数据需要进行分页处理时那么推荐使用DAO模式(我的理解就是通过SQL语句直接和数据库进行交互),那么banq的言下之意是CMP适合做小规模数据查询或者数据的修改、保存,我的理解有误吗?

照这么想下去,我有产生新的问题了,目前需要EJB的应用都不是小规模的数据应用,那么CMP在数据查询的时候企不是很难发挥优势;优势在于数据的修改、保存,这样便产生了两套和数据库交互的方式,一套使用DAO进行查询,一套使用CMP进行修改(我认为这确实也能解决减少编写SQL代码的问题)。我这么想对吗?

我这段时间想到,CMP的优势在于快速开发(我使用eclipse2.1+xdoclet,由于功力不足,开发速度较慢),和高度的可移植性。

请大家对我的想法做一些纠正,我洗耳恭听,谢谢大家。

看来是对我帖子的疑问,还是我先回答一下:

我说的大规模查询是指两个特点:
1. 必须是读操作。
2. 必须是频繁的一直读,比如论坛帖子的分页浏览。而且是一定规则。

为什么推荐DAO? 因为EJB中有一个事务机制,这个事务机制从一个方面说是比较耗费时间的,对于读操作,事务机制就是多余的了。在weblogic中好像好像有个针对大批读read的优化,实际就是去除事务机制。

那么在通用容器中,我们使用DAO模式来处理这种情况。

CMP不只是读操作 还有写 删除,这些操作都是有容器的事务机制支持的,如果你的系统负载很大,使用集群cluster可以帮助你对付大批量的,无
规则的访问。

多谢板桥的解答:)

个人感觉大量的查询,还有报表系统应该单独设计,独立于主业务系统,如果以cmp方式产生报表,特别是大量报表是不可想象的。但这样带来一个问题,就是系统的维护也是分离的,业务对象的改变,不能直接反映到报表系统中来,因此需要大量的改动来维护报表系统,这个是我困惑的地方

我前一段也进行了一个项目,用CMP实现,后来在数百人在线的时候就死掉了,我用工具进行了测试,性能很差,不得又用jsp+bean的方式改写,性能提高了几十倍,第一次用EJB真的让我对EJB大失所望。我用的是jboss3.0

后来曾看过几本书,是老外写的,说的是:如果你不能很好的使用BMP,就用CMP,好象推荐用CMP,因为能使用BMP优化性能的人不多。


说到这儿,想起一个事儿,我看了几本书都是讲如何实现EJB代码的内容多,
而讲在部署时如何根据实际情况优化的内容少,我想象j2ee这样的容器管理,因通用性肯定牺牲了一些性能,要优化才能提高性能,
毕竟J2ee把开发分成层次了,有人写代码,有人打包,有人部署,所以部署也是很重要的。我个人对ejb的部署描述符各个节点的意义和效果不是非常的清楚,

大家能不能就这些谈谈