Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RMI callback, RMI callback через внешний интерфейс 
:(
    Опции темы
Rusico
Дата 27.9.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Всем привет! Пишу RMI приложение, в локалке всё работает отлично, клиент соединяется с сервером, выполняются удалённые методы, работает callback, но стоит мне подсоединиться к серверу через внешний IP, то начинаются проблемы с обратными вызовами. 

Симптоматика: клиент на ура подсоединяется к серверу, но когда я пытаюсь передать на сервер Remote-объект для обратного вызова, то происходит ошибка:

RemoteException occurred in server thread; nested exception is: 
        java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
        java.net.ConnectException: Connection refused

Причём происходит это вот здесь:
Код

LocateRegistry.getRegistry(port);
server = (Server)Naming.lookup("rmi://"+host+":" + port + "/"+name);
server.addClient(clientServer);


Именно когда я передаю серверу свой объект clientServer, предназначенный для вызова его методов с сервера. Другие методы сервера вызываются без проблем и возвращают ответ. 
Откуда берётся мой локальный IP??? 
Объясните что проиcходит, может кто сталкивался с таким?
PM MAIL   Вверх
jk1
Дата 27.9.2011, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Уберите

Код

LocateRegistry.getRegistry(port);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Rusico
Дата 27.9.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Спасибо, но проблема не исчезла, та же ошибка(    У меня появилась мысль - у меня на компе три интерфейса :  lo, eth0 b wlan0 -  Внешний IP на wlan0 а берётся именно 
lo c 127.0.0.1  Может проблема в этом?
PM MAIL   Вверх
jk1
Дата 27.9.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 2
Всего: 75



Насколько я знаю ничего в RMI не использует автоматом Вашего IP.
Как определяются host и post вот тут
Код

server = (Server)Naming.lookup("rmi://"+host+":" + port + "/"+name);

?


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Rusico
Дата 27.9.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



из настроек, из файлика

Добавлено через 1 минуту и 31 секунду
конечный результат - rmi://195.90.155.26:5557/Division
PM MAIL   Вверх
Farmazon
Дата 27.9.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



знакомая хрень, если я не путаю ничего

пропиши в hosts.conf сопоставление имени компа и внешнего IP... Вдруг поможет...


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Stolzen
Дата 28.9.2011, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: нет
Всего: 48



Код

System.setProperty("java.rmi.server.hostname", "195.90.155.26");


На сервере. Должно помочь.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Rusico
Дата 28.9.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Спасибо всем за помощь. Мне удалось выясни вот что: 1 - для того что бы в моём случае всё правильно работало не должно быть никаких firewall-ов, т. е. IP клиента должен быть внешним. 2 - обидно, но если стоит firewall, как у меня, то RMI использует HTTP-туннелирование, что сильно замедляет работу и исключает использование обратных вызовов((  вот такая вот беда.

Добавлено через 2 минуты и 2 секунды
причём открытие портов может помочь только для ускорения работы, но обратные вызовы увы не работают.
PM MAIL   Вверх
Stolzen
Дата 28.9.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: нет
Всего: 48



Тогда нужно к задаче архитектурно подойти иначе - без обратных вызовов.

И еще для передачи вызовов поверх файрвола можно использовать RPC через HTTP - Hessian/Burlap или спринговский RPC. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Farmazon
Дата 1.10.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



что за спринговский RPC?


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Stolzen
Дата 3.10.2011, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: нет
Всего: 48



Spring HTTP Invoker.

Цитата из Spring In Action, 2nd edition (страница 224):
Цитата
The Spring team recognized a void between RMI services and HTTP-based services like Hessian and Burlap. On one side, RMI uses Java’s standard object serialization but is difficult to use across firewalls. On the other side, Hessian/Burlap work well across firewalls but use a proprietary object serialization mechanism. Thus Spring’s  HTTP invoker was born. HTTP invoker is a new remoting model created as part of the Spring framework to perform remoting across HTTP (to make the firewalls happy) and using Java’s serialization (to make programmers happy). 

Working with HTTP invoker-based services is quite similar to working with Hessian/Burlap-based services.



Это сообщение отредактировал(а) Stolzen - 3.10.2011, 08:53


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Farmazon
Дата 3.10.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: нет
Всего: 5



так то - адаптеры, но нету же там своего протокола удалённых вызовов. Спринг - это клей...


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Rusico
Дата 5.10.2011, 13:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 17.5.2004

Репутация: нет
Всего: нет



Решил всё таки написать как я решил эту проблему) Обратные вызовы RMI заменил на обычные сокетные соединения и передаю сериализованные объекты клиенту. Мои удалённые объекты умеют генерировать события и в случае возможности cakkback-ов листенерами у них являются удалённые объекты клиента, а в случае невозможности, листенерами являются серверные объекты у которых есть сокетное соединение со слушателем клиента и в обоих случаях передаются сериализованные события.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.