Pesquisa de syntax JNDI portátil para EJB no Glassfish

As tentativas anteriores eram para que o Netbeans implementasse um módulo EJB , que é construído como um JAR em vez de um EAR, no servidor Glassfish ao qual o Netbeans tem access. No entanto, implantar esse JAR no Glassfish por meio do CLI com asadmin possivelmente se asadmin um bug .

O EAR é implementado por meio da CLI sem problemas – no entanto, os nomes da JNDI para o EJB não parecem funcionar. Qual é a discrepância?

32.4.1.1 Sintaxe JNDI Portátil

Três namespaces JNDI são usados ​​para pesquisas JNDI portáveis: java: global, java: module e java: app.

O namespace java: global JNDI é a maneira portátil de localizar beans corporativos remotos usando pesquisas JNDI. Os endereços JNDI são da seguinte forma: java: global [/ nome da aplicação] / nome do módulo / nome do bean corporativo [/ nome da interface] Nome do aplicativo e nome do módulo padrão para o nome do aplicativo e módulo menos a extensão do arquivo. Os nomes de aplicativos são necessários somente se o aplicativo for empacotado em um EAR. O nome da interface é necessário apenas se o bean corporativo implementar mais de uma interface de negócios.

http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm

Qual é a syntax correta para procurar este bean? É java:global/HelloEAR/HelloEAR-ejb/greetings.GreetingsBeanRemote ? Eu tentei mais do que algumas variantes disso sem sucesso.

implantando o aplicativo:

 thufir@dur:~$ thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications HelloEAR  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:~$ 

o server.log:

 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) 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, 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) 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:~$ 

tentando a pesquisa:

 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:~$ 

Por que a invocação do bean sem “java:” ou algo assim?

sucesso:

 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:~$ thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications HelloEAR  Command list-applications executed successfully. thufir@dur:~$ thufir@dur:~$ glassfish-4.1/glassfish/bin/appclient -client NetBeansProjects/RemoteJNDI/dist/RemoteJNDI.jar hello world thufir@dur:~$ thufir@dur:~$ 

Código do cliente:

 package net.bounceme.dur.jndi; import greetings.GreetingsBeanRemote; import java.util.logging.Logger; import javax.naming.InitialContext; import javax.naming.NamingException; public class RemoteJNDI { private static final Logger log = Logger.getLogger(RemoteJNDI.class.getName()); public static void main(String... args) { try { InitialContext ctx = new InitialContext(); // Object obj = ctx.lookup("java:global/HelloEAR/HelloEAR-ejb/greetings.GreetingsBeanRemote"); Object obj = ctx.lookup("greetings.GreetingsBeanRemote"); GreetingsBeanRemote gbr = (GreetingsBeanRemote) obj; System.out.println(gbr.hi()); } catch (NamingException ex) { ex.printStackTrace(); } } } 

ejb:

 package greetings; import javax.ejb.Stateless; @Stateless public class GreetingsBean implements GreetingsBeanRemote { @Override public String hi() { return "hello world"; } @Override public String bye() { return "bye"; } } 

interface:

 package greetings; import javax.ejb.Remote; @Remote public interface GreetingsBeanRemote { public String hi(); public String bye(); } 

log do servidor:

 [2014-09-22T17:55:56.091-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756091] [levelValue: 800] [[ visiting unvisited references]] [2014-09-22T17:55:56.233-0700] [glassfish 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756233] [levelValue: 800] [[ Portable JNDI names for EJB GreetingsBean: [java:global/HelloEAR/HelloEAR-ejb/GreetingsBean!greetings.GreetingsBeanRemote, java:global/HelloEAR/HelloEAR-ejb/GreetingsBean]]] [2014-09-22T17:55:56.235-0700] [glassfish 4.1] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756235] [levelValue: 800] [[ Glassfish-specific (Non-portable) JNDI names for EJB GreetingsBean: [greetings.GreetingsBeanRemote#greetings.GreetingsBeanRemote, greetings.GreetingsBeanRemote]]] [2014-09-22T17:55:56.321-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756321] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T17:55:56.341-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756341] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T17:55:56.349-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756349] [levelValue: 900] [[ WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] [2014-09-22T17:55:56.819-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1411433756819] [levelValue: 800] [[ HelloEAR was successfully deployed in 842 milliseconds.]] thufir@dur:~$ 

Se você estiver usando o Maven, verifique se “-1.0-SNAPSHOT” (ou outra versão / conforme o seu aplicativo) está anexado no final do nome do arquivo application-ejb como “application-ejb-1.0-SNAPSHOT”, The nome completo seria “java: global / aplicativo-ear / application-ejb-1.0-SNAPSHOT / fileName”