>>>1.首先对于ejb的性能,我觉得应该是有一些影响,我如果使用了ejb,那么我的web服务器首先要进行jndi查找,然后在ejb端与数据库进行交互.但我如果不用ejb,那么我就直接在web服务器上与数据库进行交互了.
首先你不可以lookUp()一次查找然后缓存起来吗?如:
public static EJBHome getEjbHomeByName(String name, String jndiName) {
EjbNameUtil.setAnyName(name);
String homeName = EjbNameUtil.getHomeName();
if (homeMap.containsKey(homeName)) {
return (EJBHome) homeMap.get(homeName);
}
EJBHome home;
if (jndiName == null) {
home = (EJBHome) lookUpHome(homeName);
}
else {
home = (EJBHome) lookUpHome(homeName, jndiName);
}
homeMap.put(homeName, home);
return home;
}
看明白了吗?还有ejb是一个一个的bean,你可以定义在在pool里初始化多少个,将来你获得bean的时候,基本上是jdbc获得resultSet,然后resultSet把值赋给bean的每个属性,这样的话效率基本和你直接jdbc一样,只不过多了一个把resultSet转换道bean的每个属性的过程(但你要对象编程啊,即使你不用EJB也会把resultSet转换到vo或其他的javaBean,所以这部分都一样),后面就是网络传输的延迟了。但如果定义pool适当,就减少了new的过程。所以基本上少了lookup过程和使用值对象模式,使用EJB的话效率不比hibernate差多少,有人说大量查询EJB就差的不得了,那是你不会用的原因,不要怪EJB。举个简单的例子,如果有一个Abean,基本上如果业务常对它进行大批量查询,你完全可以设定好它的pool的大小,然后设定该查询方法对事务为nosupport,这样的话你的效率应该很不错。其他的如何调优,我想太多了。呵呵,自己认真的想想吧,不要跟着人云亦云的。
其实有多少人真正的懂EJB呢,我很怀疑。
》》》》》2.其次关于ejb的性能问题,我做过一些这方面的项目,但大部分不是太成功,很多人把这归咎于ejb,我不知道这到底是系统设计的问题,还是什么原因,既然banq的系统很成功,能否把一些测试的数据分享一下,让我也有个直观的感受,当然不方便也就算了.
ejb的性能问题要优化有很多策略,在这里我不多讲,但我举一个反例,我看到过有一个项目基本没有调优,使用jbuilder生成就用,我的天啊,有可能傻惯了,所以一直傻,就象某写人说***.studio开发很快,然后就锻出中国这样的程序员水平,jbuilder生成出来的你要进行调整啊,该local的要local,该修改ejb-jar.xml的要修改,支持pool啊,该readonly的啊要设置,该lazyload啊要lazyload,不是每个方法都都要requried的等,该使用模式的要使用模式,该自己做缓存的要做,不能以为一切都是IDE和容器包办,不要那么不思考,那么的懒惰。
》》》》3.就是分布式部署问题,这个问题可能有些弱,就是ejb的弹性表现在哪些方面,我能把系统开发的ejb组件分开部署在不同的ejb服务器上吗?我的web 服务器怎么与这些ejb服务器进行交互.这些概念虽然早熟于耳边,但由于没有参与过这方面的开发,始终没有一个清醒的认识.
你这个问题不是我说你,你也使用过ejb开发吗?ejb组件分开部署当然可以在不同的ejb服务器(最好说容器,不要说服务器),甚至极端一点你可以一个Bean发布在一个ejb容器里,呵呵,他们之间是可以经过远程调用来协作的啊,唉,说真的你对ejb认识还不深,懂rmi吗?你完全可以用它的原理来理解ejb。ok!