2014-09-25 6 views
0

осветления:Glassfish NameNotFoundException для удаленного поиска JNDI

все три названия (я думаю, подтвердят) работать, когда все находится на локальном хосте - один JVM. Никто не работает, когда клиент и Glassfish находятся на отдельных компьютерах.

Ответ может быть правильным, это может быть совсем другая проблема.


Что такое правильное имя и синтаксис для поиска MyQueueRemote? Когда клиент выполняет поиск JNDI на localhost, он работает нормально. Когда один и тот же клиент выполняет поиск JNDI на удаленном сервере, клиент-клиент отправляет NameNotFoundException.

The SingletonQueue deploys and runs, locally, correctly. Однако, в то время как EAR развертывается удаленно (см. Ниже), клиент не может правильно искать и разрешать удаленный поиск, бросая Root exception is javax.naming.NameNotFoundException: dur.bounceme.net.remote.MyQueueRemote not found.

клиент правильно работает против SingletonQueue при развертывании на Glassfish в качестве EAR:

[email protected]:~$ 
[email protected]:~$ glassfish-4.1/glassfish/bin/appclient -client NetBeansProjects/SingletonClient/dist/SingletonClient.jar 
Sep 24, 2014 10:44:00 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: 
Sep 24, 2014 10:44:00 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: {org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, 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} 
Sep 24, 2014 10:44:05 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: id 379 
Sep 24, 2014 10:44:05 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: id 380 
Sep 24, 2014 10:44:05 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: id 381 
Sep 24, 2014 10:44:05 PM net.bounceme.dur.jndi.RemoteJNDI main 

удаленных Glassfish бревен, показывая имя JNDI для MyQueueRemote:

[email protected]:~$ 
[email protected]:~$ tail glassfish4/glassfish/domains/domain1/logs/server.log -n 63 
[2014-09-25T01:50:10.470-0400] [glassfish 4.1] [INFO] [jts.startup_msg] [javax.enterprise.system.core.transaction.com.sun.jts.CosTransactions] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1411624177172] [timeMillis: 1411624210470] [levelValue: 800] [[ 
    JTS5014: Recoverable JTS instance, serverId = [3700]]] 

[2014-09-25T01:50:20.028-0400] [glassfish 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1411624177172] [timeMillis: 1411624220028] [levelValue: 800] [[ 
    Portable JNDI names for EJB MyQueue: [java:global/SingletonQueue/SingletonQueue-ejb/MyQueue, java:global/SingletonQueue/SingletonQueue-ejb/MyQueue!dur.bounceme.net.remote.MyQueueRemote]]] 

[2014-09-25T01:50:20.030-0400] [glassfish 4.1] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1411624177172] [timeMillis: 1411624220030] [levelValue: 800] [[ 
    Glassfish-specific (Non-portable) JNDI names for EJB MyQueue: [dur.bounceme.net.remote.MyQueueRemote#dur.bounceme.net.remote.MyQueueRemote, dur.bounceme.net.remote.MyQueueRemote]]] 

клиента StackTrace при запуске против удаленный сервер Glassfish:

[email protected]:~$ 
[email protected]:~$ glassfish-4.1/glassfish/bin/appclient -client NetBeansProjects/SingletonClient/dist/SingletonClient.jar 
Sep 24, 2014 10:58:47 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: 
Sep 24, 2014 10:58:47 PM net.bounceme.dur.jndi.RemoteJNDI main 
INFO: {org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=ix.bounceme.net, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} 
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'dur.bounceme.net.remote.MyQueueRemote' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=ix.bounceme.net, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: dur.bounceme.net.remote.MyQueueRemote 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:16) 
Caused by: javax.naming.NameNotFoundException: dur.bounceme.net.remote.MyQueueRemote 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.GeneratedMethodAccessor92.invoke(Unknown Source) 
    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) 
[email protected]:~$ 
код 210

клиент:

package net.bounceme.dur.jndi; 

import dur.bounceme.net.remote.MyQueueRemote; 
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) throws NamingException { 
     InitialContext ctx = new InitialContext(); 
     log.info(ctx.getNameInNamespace()); 
     log.info(ctx.getEnvironment().toString()); 
     Object obj = ctx.lookup("dur.bounceme.net.remote.MyQueueRemote"); 
     MyQueueRemote queue = (MyQueueRemote) obj; 
     while (true) { 
      log.info("id\t" + queue.next()); 
     } 
    } 
} 
+0

смотри также http://stackoverflow.com/a/19055514/262852 – Thufir

+0

смотри также HTTPS://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names – Thufir

ответ

1
Portable JNDI names for EJB MyQueue: [java:global/SingletonQueue/SingletonQueue-ejb/MyQueue, java:global/SingletonQueue/SingletonQueue-ejb/MyQueue!dur.bounceme.net.remote.MyQueueRemote] 

java:global/SingletonQueue/SingletonQueue-ejb/MyQueue 
java:global/SingletonQueue/SingletonQueue-ejb/MyQueue!dur.bounceme.net.remote.MyQueueRemote 

Попробуйте один из двух theese вместо

dur.bounceme.net.remote.MyQueueRemote 
+0

** оба ** этих 'java: global/...' работают нормально ** локально **. Никто не работает удаленно, тот же 'NameNotFoundException'. – Thufir

+0

Что значит «удаленно»? Как клиент, так и сервер JVM работают на разных хостах? Если это так, возможно, вы используете стеклянную рыбку на локальном хосте одновременно. И как вы настраиваете свой первоначальный контекст? Где вы передаете параметры, чтобы он подключался к службе именования удаленных окон? – B0WSER

+0

params передаются из 'jndi.properties', это то, что конструктор по умолчанию для исходного контекста извлекает их из. 'localhost' отлично работает, но удаленный адрес не работает, как указано выше. – Thufir