在客户端保存对EJB的远程调用是否可行?

06-03-14 unifly
最近写了一个EJB客户端,为提高效率在客户端启动时事先生成一定数量的EJB远程实例引用数组,然后每个线程(均完成同一工作)从中获取一个进行业务方法调用……

请问:

考虑到会反复多次调用,在每个线程完成一个业务方法后我没有立即进行remove,而是留给调用线程反复调用,等退出系统时再全部remove,这种方法可行么?

如果不可行,有什么好的方法可以持久化对EJB的远程引用呢?

初涉EJB,不懂得太多,还请大家指教,呵呵……

banq
2006-03-15 09:47
不行吧,就是行也不稳定,无态的EJB远程实例是从Pool中取出的,你一直持有,就不能放回Pool中,这样,Pool中的EJBObject有增无减,最后可能爆棚,不过实际中我发现EJB容器会强制收回EJB Object,反正情况不稳定。

在实战中,发现EJBObject和EJBHome一样都是可以Hold住的,Jdon框架也有与你的客户端一样的remote功能,因为远程客户端和EJB之间是通过Http调用的,EJB远程实例是保存在服务器端的。但是象你这样Holde在客户端,相当于通过RMI序列化到客户端的那个EJBOBject被你Hold住,没专门测试过。

unifly
2006-03-15 13:51
哦,那退一步:只缓存对相应的EJB Home接口的引用(从某书上看到可以利用EJBHomeFactory模式),每次先create()一个EJB实例再进行业务调用,完成后再remove掉,此方案应该较稳妥吧 。

可是每次create()再remove()是不是有点频繁(要对批量数据一条一条的处理),进而影响性能呢?或者EJB容器提供的pool可以很好的解决这个问题?

另外,简单测了下,缓存远程引用后,在经过一晚上空闲后,继续使用无问题,也可能是EJB容器那边配置的问题吧……

猜你喜欢