Spring的远程EJB3访问

时间:2012-02-17 07:50:36

标签: spring ejb-3.0 websphere-7

我有2个应用程序 - 一个包含EJB3.0的EAR和其他Spring客户端。两者都部署在相同的Websphere应用服务器7实例上,即相同的JVM。

以下是几个客户端部分:

的applicationContext.xml:

<bean id="ruleService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
    <property name="jndiName" value="com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness"/>
    <property name="businessInterface" value="com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness"/>
    <property name="jndiEnvironment">  
          <props>  
             <prop key="java.naming.factory.initial">com.ibm.websphere.naming.WsnInitialContextFactory</prop>  
             <prop key="java.naming.provider.url">corbaloc:iiop:localhost:2809</prop>  
             </props>  
        </property>  
</bean>

客户端代码段:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Customer_Management_Service_JavaBusiness ruleService 
                    = (Customer_Management_Service_JavaBusiness)ctx.getBean("ruleService");

这很好用。在同一容器中的其他应用程序中部署的EJB访问工作。

但如果我将该客户端移动到同一网络中的其他计算机并且只更改提供程序URL并提供远程服务器IP而不是localhost,则它不起作用。发生JNDI查找问题

确切错误: 错误500:org.springframework.beans.factory.BeanCreationException:在类路径资源[applicationContext.xml]中定义名称为'ruleService'的bean时出错:init方法的调用失败;嵌套异常是javax.naming.NameNotFoundException:上下文:CFSDDVM2399Node01Cell / nodes / CFSDDVM2399Node01 / servers / server1,name:com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness:名称为com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness的第一个组件未找到。 [root例外是org.omg.CosNaming.NamingContextPackage.NotFound:IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]

我无法弄清楚连接到托管在不同服务器JVM中的EJB需要哪些更改(以及在哪里)。欢迎任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

回答自己。错误已解决。 我在虚拟机上工作。所有开发人员图像都是从特定的VM复制而来的 用它带来了WAS配置(主机名,单元,节点等)。远程访问 修复了服务器serverindex.xml中所有主机名的出现后的工作 托管EJB。