jboss4 热部署,ejb之间调用出错,版主能否抽空指点下,非常感谢!

lxx8402
07-07-25 2 178

在一个jboss4版本下,部署两个ejb组件:ejbA.jar和ejbB.jar,其中ejbB.jar组件里有个无状态session bean 调用ejbA.jar里某个无状态session bean的一个方法,它们之间调用是通过远程接口调用,运行很正常;但是当ejbA.jar重新热部署(接口没有任何改变,就是直接重新覆盖下),这时ejbB.jar调用ejbA.jar失败,异常为home接口create时出错;如果将ejbA.jar部署到另外一个jboss4环境下,ejbA.jar任意部署ejbB.jar调用都不会出错,初步怀疑jboss在实现jndi查找实例的时候建立了缓存机制,就是第一次调用的时候,发现缓存里没有,通过Context.PROVIDER_URL链接建立,以后都是从缓存里建立实例,第一次调用后,把ejbA.jar重新部署,jboss原来缓存ejbA的Home对象其实不存在了,所有在create的时候报错。但是为什么两个jboss下却是可以的,难道jboss缓存跟自己同一个jvm下home对象?如果是这样为什么不在热部署的时候清除这个缓存了?

请问这种错误是不是我估计的情况引起的,怎么解决?谢谢!!!

banq
2007-07-26 10:24

你的判断与我的以前判断比较一致。

我感觉:在同一个JBoss下,属于JBoss可控范围,Home是缓存的,但是如果是另外一个JBoss,则加入IP地址等动态因素,因为可能在多台不同IP之间调用,所以,jBoss不会大胆来缓存HOme,这时要提升性能需要自己程序来缓存。

>如果是这样为什么不在热部署的时候清除这个缓存了
这个可能就是没有做到完美的原因。

以上也是根据我经验判断,仅提供参考。

lxx8402
2007-08-20 14:19

非常感谢Banq大哥的回复,看来只能等待Jboss新版本能解决次问题了。。。。