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的性能对比,可以看看