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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Rmi:проблемы со стабом. 
:(
    Опции темы
FatherFrost
Дата 27.4.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Я написал простой RMI сервер. Запустил rmiregistry, а при запуске самого сервера вылетает ексепшин:java.rmi.UnmarshalException.....
java.lang.ClassNotFoundException: имя класса стаба? smile


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
AntonSaburov
Дата 27.4.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Может что-то в путях ? Не находит он такой класс.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 27.4.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Может возникать по многим причинам
Цитата
#  if an exception occurs while unmarshalling the call header
# if the protocol for the return value is invalid
# if a java.io.IOException occurs unmarshalling parameters (on the server side) or the return value (on the client side).
# if a java.lang.ClassNotFoundException occurs during unmarshalling parameters or return values
# if no skeleton can be loaded on the server-side; note that skeletons are required in the 1.1 stub protocol, but not in the 1.2 stub protocol.
# if the method hash is invalid (i.e., missing method).
# if there is a failure to create a remote reference object for a remote object's stub when it is unmarshalled.


Посмотри в ФАКе
http://forum.vingrad.ru/index.php?act=modu...nel&article=103
http://forum.vingrad.ru/index.php?act=modu...el&article=2305


--------------------

PM   Вверх
Zandr
Дата 28.4.2005, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если юзаешь rmiregistry сервер, он должен иметь доступ к твоим стабам/скелетонам, лучше обходиться без него (юзать java.rmi.registry.LocateRegistry).
Если не выставлен SecurityManager в клиенте - клиент не будет качать классы стабов с сервера. Тут два варианта - настроить и выставить SecurityManager (универсальный метод) или с клиентом таскать кроме интерфейса еще и стабы.
PM MAIL   Вверх
FatherFrost
Дата 28.4.2005, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Спасибо за советы...
Но оказалось, что реестр лучше запускать не руками, а из самого сервера:
ы
Код

  Registry stReg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
  System.out.println("Binding.....");
  Naming.rebind("my_rmi",pt);


Почему не знаю, но это заработало....

Не подскажите а передача объектов в RMI идет по значению или по ссылке на серверный объект....

Это сообщение отредактировал(а) FatherFrost - 28.4.2005, 09:34


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
batigoal
Дата 28.4.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Гм. Объекты, по-моему, всегда передаются мсключительно по ссылке. Другое дело, что они могут быть сериализованы, переданы, а затем восстановлены на удаленной машине.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 28.4.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(Lamer @ 28.4.2005, 09:42)
Объекты, по-моему, всегда передаются мсключительно по ссылке


George, не путай теплое с мягким. В случае удаленных вызовов объекты передаются именно так, как ты и описал, и это называется - по значению. По этой причине при дизайне распределенных систем очень важно уделать внимание тому, что включать и чего не включать в состав классов, подлежащих пересылке по сети, а не то эдак можно ненароком добиться того, что у тебя будет таскаться туда-сюда весь контекст приложения smile

Это соображение, в частности, послужило мотивацией для создания J2EE паттерна под названием Value Objects.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Zandr
Дата 28.4.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Но оказалось, что реестр лучше запускать не руками, а из самого сервера

О чем я тебе и написал выше smile

Цитата
Не подскажите а передача объектов в RMI идет по значению или по ссылке на серверный объект

Могу ошибаться.

От RMI сервера ты получаешь Remote объект. Если грубо то получаешь ты его по ссылке. Т.е. все методы которые ты вызываешь отрабатываются на сервере. Причем все клиенты получают "ссылку" на один и тот же инстанс.

Теперь по поводу параметров методов и возвращаемых значений. Если это примитивы или Serializable то передача идет по значению (т.е. отправляется клон), если передается Remote, то передача идет по ссылке (например если хочешь зарегистрировать листенера на сервере, то делаешь его как Remote объект и отправляешь на сервер).

Когда возникают такого рода вопросы пробуйте сначала писать самостоятельно небольшие тесты - гораздо лучше запоминаются ответы, плюс приобретаете опыт в данной области smile
PM MAIL   Вверх
FatherFrost
Дата 28.4.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Цитата(Zandr @ 28.4.2005, 11:18)
Когда возникают такого рода вопросы пробуйте сначала писать самостоятельно небольшие тесты - гораздо лучше запоминаются ответы, плюс приобретаете опыт в данной области

Я в принципе уже понял, что к чему.... Просто хотел посоветоваться со знающими людьми...



--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
Zandr
Дата 28.4.2005, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Это соображение, в частности, послужило мотивацией для создания J2EE паттерна под названием Value Objects.


Мотивацией для Value Objects послужила дороговизна Remote вызовов для получения значения каждого поля EntityBean'а (на порядки медленнее, чем локальные вызовы). Если вам нужно получить какой-нибудь бин (эдак с двадцатью полями), то намного быстрее все его поля упаковать в контейнер (ValueObject) на сервере и отправить этот контейнер клиенту за один RMI запрос (лучше, чем за двадцать smile ).
PM MAIL   Вверх
FatherFrost
Дата 28.4.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Туту вот еще возник вопрос по поводу скорости передачи в RMI...
Эту тему поднимал DEER... Но там не все так ясно как хотелось бы. Я пропинговал сервер и получил время ответа порядка 10 милисекунд, а для передачи через rmi требуется 96636 мс...


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
Zandr
Дата 28.4.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
а не то эдак можно ненароком добиться того, что у тебя будет таскаться туда-сюда весь контекст приложения
За такие достижения нужно
Код

# уволить -forced -no_verbose

Добавлено @ 11:53
Цитата
96636 мс

Полторы минуты на вызов? Это перебор конечно. Хотя смотря что делает серверный метод. И еще - это только первый вызов долгий такой или все последующие тоже? Ну и этот вопрос уже скорее всего для частного расследования, чем для форума smile
PM MAIL   Вверх
Stampede
Дата 28.4.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(Zandr @ 28.4.2005, 11:32)
Мотивацией для Value Objects послужила дороговизна Remote вызовов для получения значения каждого поля EntityBean'а


Ни малейшего возражения. Да, это было главным соображением. Но не единственным. Именно поэтому я и написал, "... в частности, послужило мотивацией ..."

PM WWW   Вверх
FatherFrost
Дата 28.4.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Цитата(Zandr @ 28.4.2005, 11:44)
Хотя смотря что делает серверный метод. И еще - это только первый вызов долгий такой или все последующие тоже?
И первый и второй вызов выполняются одинаково долго с точночть до милисекунды... Серверный метод возвращает вектор, состоящий из трех объектов...



--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
FatherFrost
Дата 29.4.2005, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


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

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



Запустил в одной подсетке стало выполняться порядка минуты...
Запускал реестр на 1099, после того как запустил на порту с меньшим номером (75) времы выполнения удаленного метода сократилось примерно в два раза.... Но пол-минуты все равно очень долго....


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

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

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


 




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


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

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