我在批处理操作中使用spring容器,实现了对远程EJB的多次调用。当操作是单线程时一切正常但是当尝试使用多线程来获得性能时它会抛出:
Exception in thread "taskExecutor-1" javax.ejb.EJBException: java.io.IOException: Channel Channel ID e9c80c0d (outbound) of Remoting connection 18f42160 to servername/ip:port has been closed
我的独立客户依赖是:
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-ejb-client-bom</artifactId>
<type>pom</type>
<version>7.2.0.Final</version>
</dependency>
我还使用spring的SimpleRemoteStatelessSessionProxyFactory来注入查找bean
<bean id="jndiProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="file:/path/jboss-ejb-client.properties" />
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment" ref="jndiProperties" />
</bean>
<bean id="operation" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
<property name="jndiName" value="ejb:remote/interface/location" />
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="businessInterface" value="com.MyBussinesInterfae" />
</bean>
在我的测试中,我验证了如果Thread-A创建InitContext并执行JNDI EJB查找并创建EJB远程接口的实例(在SRSSPFBean
下),它可以通过EJB远程接口调用方法,但是如果Thread-B获取EJB远程接口的引用并尝试调用方法,则抛出异常。
在我的搜索中发现的唯一类似问题是here,似乎与Jboss AS 7上的错误有关。我正在使用Jboss eap 6.2。
提前感谢您的帮助。