2009-06-24 17 views
3

Ich bin ein kleines Programm zu schreiben JMS-Nachrichten an einen Remote-Server zu senden, aber ich bin Fehler richtig Initial zu konfigurieren (so scheint es)Senden von Nachrichten an einem Remote JMS Topic

Code, um den Kontext zu init:

 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); 

Aber wenn ich es laufen bekomme ich eine Ausnahme:

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] 

Also, was mich verblüfft ist, dass sich über das Ereignis 127.0.0.1 beschwert, obwohl ich es für den 10.10.10.10 konfiguriere, das lebt, jboss läuft, keine Firewall, ich kann eine Telnet-Sitzung zu Port 1099 bekommen, also scheint es in Ordnung zu sein

Irgendwelche Zeiger? oder Helfer?

Antwort

4

Das liegt daran, dass JNDI und abhängige Protokolle in der Natur zurückverbunden sind und nachfolgende Anfragen an die IP gehen, die der Server "glaubt", dass er zuhören sollte. Wenn Sie 10.10.10.10:1099 Telnet, und am Ausgang anschauen, werden Sie etwas sehen:

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

Der Grund dafür ist, dass der Server auf 127.0.0.1 ‚dienen‘, und antwortet mit diese Adresse als JNDI-Standort. Da Sie sich (wahrscheinlich) auf einem Remote-Computer befinden, versucht Ihr Remote-Computer, sich mit der IP-Adresse des Jboss-Servers zu verbinden (127.0.0.1), um eine Verbindung zu sich selbst herzustellen, nicht zum JBoss-Server.

Sie müssen entweder starten Jboss mit: ./run.sh -b 0.0.0.0 (alle IP binden) oder localhost Eintrag 10.10.10.10

(übrigens an der Maschine ändern, ich erinnere mich kämpfen mit diesem einen seit Ewigkeiten, und wissen, wie frustrierend es ist)

+0

Das sieht vielversprechend :) wird auf jeden Fall morgen früh versuchen und melden – webclimber

+0

Yeah - ich erinnere mich, Tage vor ein paar Jahren zu verbringen. Die rauchende Waffe befindet sich in der Telnet-Sitzung - wenn am Ende 127.0.0.1 steht, ist dies die IP-Adresse, mit der sich Ihr Remote-Client verbinden wird. Sie können dies auch verwenden, um Ihren Fix zu überprüfen - die richtige IP wird dort aufgeführt, sobald sie funktioniert. – Chaos

+0

arbeitete wie ein Charme, ich musste eine einzige IP wählen, für die -b-Parameter, schien nicht für die Multi-home-Maschine zu arbeiten. – webclimber

Verwandte Themen