title: JNDI Name binding in JBOSS 5.1.0 Beta
body: <p>I am following the MasteringEJB4thEdition book, which I downloaded from The Server Site website.</p>
  
  <p>There is a simple example of HelloBean, which works perfectly with GlassFish V3 app server. The same example when deployed on JBOSS fails because of JNDI name lookup.</p>
  
  <p>Is there any rule how the JNDI lookup names in JBOSS are decided if we don't provide any ? I found while googling that it is "ear-file-name/Bean-class-name/remote" but it doesn't work for me.</p>
  
  <p>Here is the bean</p>
  
  <pre><code>
     1. package com.hardik.stateless;  
     2. import javax.ejb.Stateless;  
     3. import javax.ejb.Remote  
     4.   
     5.   
     6.   
     7.   
     8. @Stateless  
     9. @Remote(Hello.class)  
    10. public class HelloBean implements Hello {  
    11.   
    12.     public String hello() {  
    13.         System.out.println("hello()");  
    14.         return "Hello, World!";  
    15.     }  
    16.   
    17. }  
  </code></pre>
  
  <p>Here is the client I am using: </p>
  
  <pre><code>
     1. package com.hardik.stateless;  
     2.   
     3. import javax.naming.Context;  
     4. import javax.naming.InitialContext;  
     5.   
     6.   
     7. /** 
     8.  * This is an example of client code which invokes  
     9.  * methods on a simple, remote stateless session bean 
    10.  * @author hardik 
    11.  * 
    12.  */  
    13. public class HelloClient {  
    14.       
    15.     public static void main(String[] args) throws Exception {  
    16.           
    17.         Context ctx = new InitialContext();  
    18.         // works for Glassfish  
    19.         //Hello hello = (Hello) ctx.lookup("com.hardik.stateless.Hello");  
    20.         // doesn't  work for JBOSS  
    21.         Hello hello = (Hello) ctx.lookup("hello-bean/HelloBean/remote");  
    22.           
    23.         System.out.println(hello.hello());  
    24.     }  
    25.   
    26. }  
  </code></pre>
  
  <p>Here is the error I get while executing the client </p>
  
  <pre><code>
  # $ wsrunclient.sh -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=jnp://localhost:1099  -cp "lib/hello-bean.jar:dist/hello-client.jar:/home/hardik/apps/jboss/client/*"  com.hardik.stateless.HelloClient  
  # log4j:WARN No appenders could be found for logger (org.jnp.interfaces.TimedSocketFactory).  
  # log4j:WARN Please initialize the log4j system properly.  
  # Exception in thread "main" javax.naming.NameNotFoundException: hello-bean not bound  
  #         at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)  
  #         at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)  
  #         at org.jnp.server.NamingServer.getObject(NamingServer.java:785)  
  #         at org.jnp.server.NamingServer.lookup(NamingServer.java:396)  
  #         at sun.reflect.GeneratedMethodAccessor260.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:886)  
  #         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)  
  #         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:722)  
  #         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)  
  #         at javax.naming.InitialContext.lookup(InitialContext.java:392)  
  #         at com.hardik.stateless.HelloClient.main(Unknown Source)
  </code></pre>