在Spring中调用EJB,EJB服务重起的时候程序报错

wincheer 07-01-22


<p>各位老大,我被这个问题弄得头晕脑涨了。</p>
<p>问题描述:在一个Web应用程序中(假定名字是AppWeb)需要调用远程的EJB,每次远程的EJB应用重新启动后,当前程序AppWeb都需要重新启动,否则报错。</p>
<p>错误信息:<br />
Error 500--Internal Server Error <br />
java.lang.NullPointerException<br />
at weblogic.rmi.cluster.WeightBasedReplicaHandler.failOver(WeightBasedReplicaHandler.java:120)<br />
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:255)</p>
<p>问题的要求:不希望EJB应用每次启动的时候AppWeb都要跟着重新启动</p>
<p>spring中的配置片段:<br />
<bean id="jndiForEJB"
class="org.springframework.jndi.JndiTemplate"><br />
<property name="environment"><br />
<props><br />
<prop key="java.naming.factory.initial"><br />
weblogic.jndi.WLInitialContextFactory<br />
</prop><br />
<prop key="java.naming.provider.url"><br />
t3://192.168.128.105:8001<br />
</prop><br />
</props><br />
</property><br />
</bean><br />
.......<br />
<bean id="custServiceDelegate"<br />
class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"><br />
<property name="jndiTemplate"><br />
<ref local="jndiForEJB" /><br />
</property><br />
<property name="jndiName"><br />
<value>ejb/CustServiceProcess</value><br />
</property><br />
<property name="businessInterface"><br />
<value><br />
com.mycom.ejb.custservicemanage.interfaces.CustServiceProcess<br />
</value><br />
</property><br />
</bean></p>

[该贴被wincheer于2007年01月22日 10:11修改过]

wincheer
2007-01-22 10:36

简单说,就是EJB服务重启后,应用程序也必须重启动,否则报错

banq
2007-01-22 15:18

>就是EJB服务重启后,应用程序也必须重启动
这是正常,你检查一下你的EJB Home是否被Cache了。

或者检查服务器的classLoader策略,从这方面入手。

wincheer
2007-01-22 16:39

谢谢bang大哥的关注。

EJB是别人写的,我打了一个jar包,在Spring中配置了一下,EJB Home是否被缓存我也不是很清楚;(项目很大,类似的jar包好几个)

我的应用程序服务器是Weblogic9,基本框架是Spring+Struts,还有一切杂七杂八的东西如AJAX之类的开源组件。(其实是想让大哥给我说说weblogic的classLoader策略,呵呵)

另外我注意到,数据库重启好像不影响(Oracle9,也是通过应用服务器配置的JNDI数据源),只有EJB受影响。