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

07-01-22 wincheer

<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受影响。