2009-06-24 2 views
3

Я пишу небольшую утилиту для отправки сообщений JMS на удаленный сервер, но я не в состоянии правильно настроить InitialContext (или так кажется)Отправка сообщений на удаленный JMS Тема

кода для инициализации контекста:

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

Но когда я запускаю его я получаю исключение:

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] 

Так что меня озадачивает то, что жалуется на событие 127.0.0.1, хотя я настраиваю его на 10.10.10.10, который жив, работает jboss, нет брандмауэра, я могу получить сеанс telnet на порт 1099, так что кажется, что все в порядке

Любые указатели? или помощников?

ответ

4

Это связано с тем, что JNDI и зависимые протоколы являются обратными связями по своему характеру, а последующие запросы отправляются на IP-адрес, который сервер «считает» его прослушиванием. Если вы телнет к 10.10.10.10:1099, и посмотрите на результат, вы увидите что-то вроде этого:

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

Причина заключается в том, что ваш сервер «служит» на 127.0.0.1, и ответит это адрес как местоположение JNDI. Поскольку вы, скорее всего, находитесь на удаленном компьютере, когда ваш удаленный компьютер пытается подключиться к IP-адресу, который сервер Jboss сообщил ему для подключения к (127.0.0.1), он пытается подключиться к себе, а не к серверу JBoss.

Вам нужно либо начать JBoss с: ./run.sh -b 0.0.0.0 (все IP связывания), или изменить запись LOCALHOST на машине 10.10.10.10

(Кстати, я помню, изо всех сил с этим один на века, и знаю, как это расстраивает)

+0

Это выглядит многообещающим :) обязательно попробует завтра утром и сообщит обратно – webclimber

+0

Да, я помню, как несколько дней назад я провел несколько дней назад. Курительное пистолет находится в сеансе telnet - если он говорит 127.0.0.1 в конце этого, это IP-адрес, к которому пытается подключиться ваш удаленный клиент. Вы также можете использовать это, чтобы проверить свое исправление - правильный IP-адрес будет указан там, когда он будет работать. – Chaos

+0

работал как шарм, мне нужно было выбрать один ip, для -b param, похоже, не работал для многопользовательской машины. – webclimber

Смежные вопросы