Hello, sorry for my bad english.
I am trying to access my remote ejb (3) by using SimpleRemoteStatelessSessionProxyFactoryBean bean.
My EJBs are on glassfish, well deployed, and I can access them on a standalone client with the following code:
Unhappily, I am not able to do the same thing with spring.Code:try{ Properties jndiProps = new Properties(); jndiProps.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory"); jndiProps.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming"); jndiProps.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); Context ic= new InitialContext(jndiProps); System.out.println("Connection done, trying to get remote EJB..."); TestRemote test= (TestRemote) ic.lookup("ejb/TestBean"); System.out.println(test.sayHello("BOB")); }catch(Exception e){ e.printStackTrace(); }
This is my applicationContext:
To give all informations, this is:Code:<bean id="jndiContext" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial">com.sun.enterprise.naming.SerialInitContextFactory</prop> <prop key="java.naming.factory.url.pkgs">com.sun.enterprise.naming</prop> <prop key="java.naming.factory.state">com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl</prop> </props> </property> </bean> <bean id="testRemote" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean" > <property name="jndiEnvironment"> <props> </props> </property> <property name="jndiName"> <value>ejb/TestBean</value> </property> <property name="businessInterface"> <value>app.TestRemote</value> </property> <property name="jndiTemplate"> <value>jndiContext</value> </property> </bean> <bean name="simpleController" class="app.SimpleController"> <property name="testRemote" ref="testRemote"/> </bean>
SimpleController:
My EJBs implementation and interfaceCode:package app; public class SimpleController{ private TestRemote testRemote; public TestRemote getTestRemote() { return testRemote; } public void setTestRemote(TestRemote testRemote) { this.testRemote = testRemote; } public void doJob(){ System.out.println(this.testRemote.sayHello("BOB")); } }
interface:
implementationCode:@Remote public interface TestRemote{ public String sayHello(String name); }
And I obtain the following error I start my application:Code:@Stateless(name="TestBean", mappedName="ejb/TestBean") public class TestBean implements TestRemote{ @PersistenceContext(unitName="springejbUnit") protected EntityManager entityManager; public String sayHello(String name){ return "Hello " + name; } }
Does someone knows what's happening?Code:Exception in thread "main" org.springframework.remoting.RemoteLookupFailureException: EJB instance [app._TestRemote_Wrapper@e86f8585] is not a Remote Stateless Session Bean at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance(AbstractRemoteSlsbInvokerInterceptor.java:228) at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.getSessionBeanInstance(SimpleRemoteSlsbInvokerInterceptor.java:110) at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:75) at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invoke(AbstractRemoteSlsbInvokerInterceptor.java:140) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy6.sayHello(Unknown Source) at app.SimpleController.doJob(SimpleController.java:16) at app.Main.main(Main.java:20)
Thanks in advance.


Reply With Quote