2013-12-17 3 views
1

Я использую RMI в своем проекте, у нас есть RMI-сервер и RMI-клиент. Клиент находится в веб-приложении, поэтому мы сохраняем ссылку на сервер в общих константах.Объект RMI не обновляется

Я хочу знать, насколько дорого стоит искать сервер в реестре каждый раз, когда нам нужен экземпляр сервера. или лучше разобраться один раз и сохранить его в некоторой константе.

Если я храню его в константе, тогда проблема начинается, если сервер RMI перезапускается. потому что эта постоянная переменная содержит старую ссылку и она выбрасывает java.rmi.NoSuchObjectException: no such object in table

Любые входы приветствуются.

ответ

1

Если вы хотите, чтобы ваше клиентское приложение выдерживало все перезагрузки сервера, вы все равно должны защищать его от сбоев связи, включая java.rmi.NoSuchObjectException. Обратите внимание, что возможно, хотя и не очень вероятно, что перезагрузка сервера происходит между поиском и выполнением запроса. В этом случае, даже если вы выполнили поиск до каждого запроса, вы не будете в безопасности. Таким образом, рекомендация такова:

  1. Сделайте поиск один раз и сохраните ссылку. Дополнительным преимуществом этого может быть то, что ваше приложение сможет обнаружить неправильную конфигурацию или другие проблемы при инициализации.

  2. Если возникает событие NoSuchObjectException, попробуйте обновить ссылку.

+0

'NoSuchObjectException' возникает, когда мы вызываем некоторую операцию, поэтому таким образом я получаю избыточный код RMI. – Mahendra

+0

@Mahendra В коде нет ничего лишнего, что необходимо для правильной работы вашего приложения. Не позволяйте произвольным представлениям об эстетике помешать вам реализовать то, что необходимо: просто попробуйте найти элегантный способ выразить это. Вы можете структурировать это как цикл do/while с новым поиском в блоке catch для исключения NoSuchObjectException. – EJP

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