Search code examples
springejb-3.0websphere-7

Remote EJB3 access from Spring


I have 2 applications - one EAR containing EJB3.0 and other its Spring client. Both deployed on same Websphere app server 7 instance i.e. same JVM.

Here are couple of client parts:

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>

Client code snippet:

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

This works fine. EJB access deployed in other application in same container, works.

But it does not work if I move that client to other machine in same network and just change provider URL and give remote server IP instead of localhost. JNDI lookup problem occurs

Exact Error: Error 500: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ruleService' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Context: CFSDDVM2399Node01Cell/nodes/CFSDDVM2399Node01/servers/server1, name: com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness: First component in name com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]

I can't figure out what changes (and where) are required to connect to EJB hosted in different server JVM. Any help or suggestion are welcome.


Solution

  • Answering myself. Error is resolved. I work on virtual machine. All developer images were copied from a particular VM and that brought over WAS configs (hostname, cell, node etc) with it. Remote access worked after fixing all occurances of hostnames in serverindex.xml of the server hosting EJB.