Domanda

Sto scrivendo una piccola utility per inviare messaggi JMS a un server remoto, ma non riesco a configurare correttamente InitialContext (o almeno così sembra)

codice per avviare il contesto:

      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, 
            "org.jnp.interfaces.NamingContextFactory");
      p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
      p.put(Context.PROVIDER_URL, "jnp://10.10.10.10:1099/");
      Context context = new InitialContext(p);

Ma quando lo eseguo ottengo un'eccezione:

javax.naming.CommunicationException 
[Root exception is java.rmi.ConnectException: 
Connection refused to host: 127.0.0.1; 
nested exception is: 
java.net.ConnectException: Connection refused: connect]

Quindi ciò che mi sconcerta è che mi lamento dell'evento 127.0.0.1 anche se lo sto configurando per il 10.10.10.10, che è vivo, esegue jboss, nessun firewall, posso portare una sessione telnet sulla porta 1099, quindi sembra essere ok

Qualche puntatore? o aiutanti?

È stato utile?

Soluzione

Questo perché JNDI e i protocolli dipendenti sono di natura connessa e le richieste successive andranno all'IP su cui il server "crede" dovrebbe essere in ascolto. Se telnet al 10.10.10.10:1099 e guardi l'output, vedrai qualcosa del genere:

telnet 10.10.10.10 1099
[Connection message]
[Garbage]
127.0.0.1....

Il motivo è che il tuo server 'sta servendo' su 127.0.0.1 e risponderà con quell'indirizzo come posizione JNDI. Poiché si è (molto probabilmente) su un computer remoto, quando il computer remoto tenta di connettersi all'IP a cui il server Jboss lo ha informato per connettersi (127.0.0.1), tenta di connettersi a se stesso, non al server JBoss.

È necessario avviare jboss con: ./run.sh -b 0.0.0.0 (tutto il bind IP) oppure modificare la voce localhost sul computer in 10.10.10.10

(Per inciso, ricordo di aver lottato con questo per anni e so quanto sia frustrante)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top