2 Replies Latest reply on Dec 2, 2007 8:49 PM by v a

    Stateful bean via RMI

    v a Newbie

      I can't get access to stateful bean, but can to stateless one. Why?

      package org.test.ejb;
      
      public interface StatelessRemote
      {
       public void test();
      }
      


      package org.test.ejb;
      
      public interface StatefulRemote
      {
       public void test();
       public void destroy();
      }
      


      package org.test.ejb;
      
      import javax.ejb.Stateless;
      import javax.ejb.Remote;
      
      import org.test.ejb.StatelessRemote;
      
      @Stateless
      @Remote(StatelessRemote.class)
      public class StatelessBean
      implements StatelessRemote
      {
       public void test()
       {
       System.out.println("test stateless");
       }
      }
      


      package org.test.ejb;
      
      import javax.ejb.Stateful;
      import javax.ejb.Remote;
      import javax.ejb.Remove;
      
      import org.test.ejb.StatefulRemote;
      
      @Stateful
      @Remote(StatefulRemote.class)
      public class StatefulBean
      implements StatefulRemote
      {
       public void test()
       {
       System.out.println("test stateful");
       }
      
       @Remove
       public void destroy()
       {
       System.out.println("Destroy");
       }
      }
      


      Client code
      ...
      InitialContext context = new InitialContext(jndiProps);
      NamingEnumeration en = context.list("java:/ejb_test");
      while (en.hasMore())
      {
       System.out.println(en.next());
      }
      
      Object stateless = context.lookup("StatelessBean/remote");
      System.out.println("Bean received " + stateless);
      
      Object stateful = context.lookup("StatefulBean/remote"); // 109
      System.out.println("Bean received " + stateful);
      ...
      


      Console:
      EjbSynchronizations: org.jnp.interfaces.NamingContext
      TimerServiceDispatcher: org.jnp.interfaces.NamingContext
      StatefulBean: org.jnp.interfaces.NamingContext
      StatelessBean: org.jnp.interfaces.NamingContext
      Bean received = jboss.j2ee:ear=ejb_test.ear,jar=ejb_test.jar,name=StatelessBean,service=EJB3
      
      javax.naming.NameNotFoundException: ejb_test not bound
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
       at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
       at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
       at org.jnp.server.NamingServer.lookup(NamingServer.java:270)
       at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
       at sun.rmi.transport.Transport$1.run(Transport.java:159)
       at java.security.AccessController.doPrivileged(Native Method)
       at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
       at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
       at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
       at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
       at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
       at java.lang.Thread.run(Thread.java:619)
       at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
       at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
       at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
       at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
       at org.jboss.ejb3.JndiProxyFactory.getObjectInstance(JndiProxyFactory.java:52)
       at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
       at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1273)
       at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1290)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:763)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
       at javax.naming.InitialContext.lookup(InitialContext.java:392)
       at org.test.remote.Test.callEjb(Test.java:109)
       at org.test.remote.Test$3.run(Test.java:220)
       at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
       at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
       at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
      
      


      JMX console:
      
       | +- StatefulBean (class: org.jnp.interfaces.NamingContext)
       | | +- remote (class: java.lang.Object)
       | | +- remoteStatefulProxyFactory (proxy: $Proxy103 implements interface org.jboss.ejb3.ProxyFactory)
       | +- StatelessBean (class: org.jnp.interfaces.NamingContext)
       | | +- remote (proxy: $Proxy295 implements interface org.test.ejb.StatelessRemote,interface org.jboss.ejb3.JBossProxy)