7 Replies Latest reply on Mar 7, 2008 6:22 PM by Jeremy Flowers

    EJB3 deployment:Newbie question

    Jeremy Flowers Newbie

      Hi folks.
      I am in process of reading Beginning Java EE 5 Platform by Apress and can't seem to get my application to run. I was wondering if anyone can shed some light for me. It appears to be some sort of binding issue.

      Directory Structure is:
      SimpleSessionApp
      beans
      client

      Code was compiled and run from SimpleSessionApp folder.

      Here's the same code

      package beans;
      
      import javax.ejb.Remote;
      
      @Remote
      public interface SimpleSession
      {
       public String getEchoString(String clientString);
      }
      


      package beans;
      
      import javax.ejb.Stateless;
      
      @Stateless
      public class SimpleSessionBean implements SimpleSession {
       public String getEchoString(String clientString) {
       return clientString + " - from session bean";
       }
      }
      


      package client;
      
      import beans.SimpleSession;
      import javax.naming.InitialContext;
      
      public class SimpleSessionClient {
       public static void main(String[] args) throws Exception
       {
       InitialContext ctx = new InitialContext();
       SimpleSession simpleSession
       = (SimpleSession) ctx.lookup(SimpleSession.class.getName());
       for (int i = 0; i < args.length; i++) {
       String returnedString = simpleSession.getEchoString(args);
       System.out.println("sent string: " + args +
       ", received string: " + returnedString);
       }
       }
      }
      


      I've had to set up complicated classpath:
      c:\apps\jboss-4.2.2.ga\lib\concurrent.jar;
      c:\apps\jboss-4.2.2.ga\lib\jboss-common-jar;
      c:\apps\jboss-4.2.2.ga\client\jboss-j2ee.jar;
      c:\apps\jboss-4.2.2.ga\lib\commons-httpclient.jar;
      c:\apps\jboss-4.2.2.ga\server\all\lib\jboss.jar;
      c:\apps\jboss-4.2.2.ga\server\all\lib\jboss-remoting.jar;
      c:\apps\jboss-4.2.2.ga\server\all\lib\jboss-transaction.jar;
      c:\apps\jboss-4.2.2.ga\server\all\lib\jnpserver.jar;
      c:\apps\jboss-4.2.2.ga\server\all\deploy\ejb3.deployer\jboss-ejb3.jar;
      c:\apps\jboss-4.2.2.ga\server\all\lib\jboss-ejb3x.jar;
      c:\apps\jboss-4.2.2.ga\server\all\deploy\jboss-aop-jdk50.deployer\jboss-aop-jdk50.jar;
      c:\apps\jboss-4.2.2.ga\server\all\deploy\jboss-aop-jdk50.deployer\jboss-aspect-library-jdk50.jar;
      c:\apps\jboss-4.2.2.ga\client\jboss-common-client.jar;

      The last one was omitted from book, and had been giving a ClassNotFound exception for Logger. Found this on the net in another forum.

      But now, when I try and invoke program as follows:
      java -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=localhost client.SimpleSessionClient Now is the time for all good men

      I get the following error:

      Exception in thread "main" javax.naming.NameNotFoundException: beans.SimpleSession 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:296)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      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 javax.naming.InitialContext.lookup(InitialContext.java:392)
      at client.SimpleSessionClient.main(SimpleSessionClient.java:10)

      It's saying SimpleSession in package beans is not found.
      Is this some sort of JNDI lookup problem?


      Package was created as follows:
      jar cf SimpleSessionApp.ejb3 beans\*.java
      Copied SimpleSessionApp.ejb3 to server\all\deploy folder

      Any ideas?
      Cheers