title: Portable JNDI Syntax lookup for EJB on Glassfish
body: <p><a href="https://stackoverflow.com/questions/25970170/illegalargumentexception-invalid-ejb-jar-helloejb-it-contains-zero-ejb">Previous attempts were to have Netbeans deploy an EJB module</a>, which builds as a JAR rather than an EAR, onto the Glassfish server which Netbeans has access to.  However,  deploying that JAR to Glassfish through the CLI with <code>asadmin</code> <a href="https://stackoverflow.com/q/25972994/262852">possibly runs into a bug</a>.</p>
  
  <p>The EAR deploys through the CLI without issue -- however, the JNDI names for the EJB doesn't appear to work.  What is the discrepancy?</p>
  
  <blockquote>
    <p>32.4.1.1 Portable JNDI Syntax</p>
    
    <p>Three JNDI namespaces are used for portable JNDI lookups: java:global,
    java:module, and java:app.</p>
    
    <p>The java:global JNDI namespace is the portable way of finding remote
    enterprise beans using JNDI lookups. JNDI addresses are of the
    following form: java:global[/application name]/module name /enterprise
    bean name[/interface name ] Application name and module name default
    to the name of the application and module minus the file extension.
    Application names are required only if the application is packaged
    within an EAR. The interface name is required only if the enterprise
    bean implements more than one business interface.</p>
  </blockquote>
  
  <p><a href="http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm" rel="nofollow noreferrer">http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm</a></p>
  
  <p>What is the correct syntax to lookup this bean?  Is it <code>java:global/HelloEAR/HelloEAR-ejb/greetings.GreetingsBeanRemote</code>?  I've tried more than a few variants of that without success.</p>
  
  <p>deploying the app:</p>
  
  <pre><code>thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications
  HelloEAR  &lt;ear, ejb&gt;  
  Command list-applications executed successfully.
  thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin undeploy HelloEAR
  Command undeploy executed successfully.
  thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications
  Nothing to list.
  No applications are deployed to this target server.
  Command list-applications executed successfully.
  thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin deploy NetBeansProjects/HelloEAR/dist/HelloEAR.ear 
  Application deployed with name HelloEAR.
  Command deploy executed successfully.
  thufir@dur:~$ 
  </code></pre>
  
  <p>the server.log:</p>
  
  <pre><code>thufir@dur:~$ 
  thufir@dur:~$ tail glassfish-4.1/glassfish/domains/domain1/logs/server.log -n 15
  [2014-09-22T04:58:42.666-0700] [glassfish 4.1] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=650 _ThreadName=admin-listener(9)] [timeMillis: 1411387122666] [levelValue: 800] [[
    Glassfish-specific (Non-portable) JNDI names for EJB GreetingsBean: [greetings.GreetingsBeanRemote#greetings.GreetingsBeanRemote, greetings.GreetingsBeanRemote]]]
  
  [2014-09-22T04:58:43.619-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=650 _ThreadName=admin-listener(9)] [timeMillis: 1411387123619] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-09-22T04:58:43.628-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=650 _ThreadName=admin-listener(9)] [timeMillis: 1411387123628] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-09-22T04:58:43.634-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=650 _ThreadName=admin-listener(9)] [timeMillis: 1411387123634] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-09-22T04:58:44.757-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=650 _ThreadName=admin-listener(9)] [timeMillis: 1411387124757] [levelValue: 800] [[
    HelloEAR was successfully deployed in 2,312 milliseconds.]]
  
  thufir@dur:~$     
  </code></pre>
  
  <p>attempting the lookup:</p>
  
  <pre><code>thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/appclient -client NetBeansProjects/RemoteJNDI/dist/RemoteJNDI.jar 
  javax.naming.NamingException: Lookup failed for '[greetings.GreetingsBeanRemote' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, Context.SECURITY_CREDENTIALS=pass123, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, Context.SECURITY_PRINCIPAL=user1} [Root exception is javax.naming.NameNotFoundException: [greetings.GreetingsBeanRemote not found]
      at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
      at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
      at javax.naming.InitialContext.lookup(InitialContext.java:411)
      at net.bounceme.dur.jndi.RemoteJNDI.main(RemoteJNDI.java:15)
  Caused by: javax.naming.NameNotFoundException: [greetings.GreetingsBeanRemote not found
      at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:237)
      at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:204)
      at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
      at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:143)
      at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:173)
      at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
      at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930)
      at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496)
      at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222)
      at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
      at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
  thufir@dur:~$ 
  </code></pre>