求助

04-06-21 qiusi
本人接手解决一个J2EE速度问题。

BusinessDelegate有一perform(ValueObject inParm, ValueObject outParm)方法

该方法会调用session的perform(ValueObject inParm,

ValueObject outParm)方法。其中ValueObject是继承自

序列化的对象。返回值是采用outParm.setXXX方法。

我在某session perform首端和末端测试执行时间为20秒,

然而从BusinessDelegate的perform出来时间居然会多出一

倍多!

我猜测是因为数据传递问题。但因为传递的数据不是很多,

大概几十条,而且web端和ejb都在同一台服务器上。

是否是因为引用传值引起?本人是ejb初学者,盼高人解释

其原理。

另外发现拿多个数据时,entity端程序居然只拿出一个

主健list。然后调用段就可以强制转化成远端Object,这样

做原理是什么?效率怎么样?通常如何做?

万分感激

    

wwlhp@jdon
2004-06-21 17:17
如果不使用本地接口,对ejb的调用默认都是远程调用。而远程调用是一个非常复杂的过程,是整个应用程序的瓶颈所在。许多ejb设计模式都在想方设法减少ejb远程调用次数,这样可以显著提高程序的性能。

如果你的web容器和ejb容器都在同一个虚拟机内部,可以使用ejb的本地接口,据说这样不会使用rmi了,但我没有试过。

banq
2004-06-21 18:42
1. 你的BusinessDelegate有性能问题,有点我的书中的那个BusinessDelegate的,那个BusinessDelegate就是有性能方面的提升没有做,至于如何完善BusinessDelegate性能,途径有很多,具体情况分析。

将EJB设置成Local,减少远程开销是基本方法。wwlhp@jdon 建议值得参考。

2.关于“entity端程序居然只拿出一个

主健list。然后调用段就可以强制转化成远端Object,这样

做原理是什么?效率怎么样?通常如何做?”

我也做过这事情,在我的书中最后一张查询批量数据就是这么做的,不知是否是你说的这种情况。

qiusi
2004-06-22 10:47
谢谢楼上两位。

在www.javaeye.com/27.html这篇文章中把EJB调用原理讲得

非常清楚。不只两位可否介绍一下如何返回数据?

banq,那个情况和你所讲相同。请教一下为什么可以那样做。

我现在在国外,所以没法去听讲,甚为遗憾。

qiusi
2004-06-22 10:56
取得批处理数据,以下四种方法

1.用一个select语句取得所有主健,然后在客户端

循环调用ejbFindXXX

2.用一个select语句取得所有主健,然后客户端强制

转换为ejbObject

3.直接使用DAO返回valueobject list

4.在ejb中调用DAO再返回

这些方法效率和设计思想上有什么区别?

特别我看到很多ejb pattern中都是使用ejb间接调用

DAO,为什么不直接连接数据库?

猜你喜欢
2Go 1 2 下一页