Invio di messaggi a un argomento JMS remoto
-
10-07-2019 - |
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?
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)