关于BMP与CMP的选择问题

水草有根 2003-10-15 07:39:17
在工程中,我们到底是选择CMP还是BMP呢,请各位聊聊EJB方面的问题。
...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
patrickjava 2003-10-17
  • 打赏
  • 举报
回复
企业级应用,用户访问量不多,遗产,以及可重构等特点 造就了CMP BMP
bbscbb 2003-10-15
  • 打赏
  • 举报
回复
http://forum.hibernate.org.cn/viewtopic.php?t=259
bbscbb 2003-10-15
  • 打赏
  • 举报
回复
http://www.cs.rice.edu/CS/Systems/DynaServer/perf_scalability_ejb.pdf

是一个关于ejb 应用程序的效率和扩展的测试的说明。

硬件
PIII 933MHz
CPU with 1GB SDRAM, and two Quantum Atlas 9GB
10,000rpm Ultra160 SCSI disk drives. A number of PII 450MHz
machines run the client emulation software. We use enough client
emulation machines to make sure that the clients do not become a
bottleneck in any of our experiments. All machines are connected
through a switched 100Mbps Ethernet LAN.


app server用1
1jboss2.4(还有3.0)Dynamic proxy based container
2jonas2.5 Pre-compiled approach

测试用的example是一个拍卖网站。
用了6不同种设计风格的实现。代码的规模如下
0 纯servlet实现( 数据库操作在servlet中完成)。 25个class和4590行代码
1 servlet+session bean(session bean封装数据库操作,只用到app的pooling和事物服务)。76个class和8000行代码
2DAO separation with Entity Beans CMP 。63个class和10760行代码
3DAO separation with Entity Beans BMP。 63个class和13830行代码
4EJB 2.0 local interfaces。 113个class和13795行代码
5Session facade。 107个class和13440行代码


测试结果:
0的速度最快,1的速度和0接近。。可以在1200个用户连接下每分钟执行一万次的响应,纯servlet实现可以达到12000次。
(interactions per minute )


一旦用到bmp或cmp,速度就慢了。最好的EJB 2.0 local方式只能在460个用户连接下每分钟执行不到4500次的响应
而bmp只能在220个用户连接下每分钟执行不到2000次的响应,用户再多,interactions per minute也高不了(还会下降)。



呵呵,没什么好说的了,使用entity bean,代码量大,速度也够慢,好郁闷。。
2002年测试的东西,不知道现在怎么样了。。

微软叫嚣.net的pet sore有ejb实现的10倍速度。。。是有可能的。。。
要追求速度,除了servlet,就只用无状态session bean,
这和com+组件的设计原则(使用无状态对象和存储过程)是一样的。
java的stateless session beans的效率比com+的无状态对象的效率要高一些。
大部分java app server是 1个stateless session beans服务所有的client。
com+是1个无状态对象服务一个client。



"而据微软宣称,Visual Studio.Net能支持25种语言,和Java相比具有节省2/3程序代码、效能快28倍,承载六倍的使用者的功能"(用.net开发pet store)
微软当然是自卖自夸,误导听众。。

如果
http://www.cs.rice.edu/CS/Systems/DynaServer/perf_scalability_ejb.pdf
是可信的话,
那么应该是:
在j2ee的各种设计风格中:
servlet(还有statless session bean)比bmp“节省2/3程序代码、承载六倍的使用者的功能,效能快?倍(六倍的使用者和6倍的响应速度,怎么算啊?36倍吗?)”


所以啊 ,尽量不要用entity bean。
如果要用entity bean,bmp能少用就少用。cmp最好用local接口,减少开销(local了,就不能分布了)。


http://forum.hibernate.org.cn/viewtopic.php?t=53&highlight=%B2%E2%CA%D4++HIBERNATE+CMP

是hibernate与cmp的性能对比,可以看看

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧