2008-10-13 2 views
0

У меня есть код, который я предоставляю через RMI.Когда мне следует позвонить Naming.unbind()?

Если моя программа прерывается ненормально, я не буду называть Naming.unbind(), и ссылка на объект предположительно будет висела в реестре RMI и последующие вызовы в Naming.bind() с тем же имя не удастся.

Как я могу убедиться, что ссылки на изгои очищены?

+0

Используйте `Namng.rebind()`, чтобы преодолеть часть этого. – EJP 2016-05-20 22:07:54

ответ

-1

Есть что-то вроде Distributed Garbage Collector (DGC). Он использует лизинг для отслеживания устаревших привязок и собирает их, когда они не используются. Установите системное свойство leaseValue экспортирующей JVM, чтобы определить, когда истекает срок привязки.

Установка слишком низкого значения приведет к увеличению сетевого трафика. Слишком высокая установка приведет к тому, что устаревшие ссылки будут удерживаться слишком долго. Вы можете вызвать метод idempotent после поиска на стороне клиента, чтобы убедиться, что объект жив (или использовать что-то вроде интеллектуальных заглушек Weblogic). На стороне сервера вы можете проверить реестр и, если привязка существует, либо отмените регистрацию (в случае, если она устарела), удалите удаленный объект и экспортируйте новый, либо просто оставьте его (если он включен).

+0

Полностью неправильный. DGC не отслеживает привязки вообще, не говоря уже о устаревших привязках. Он отслеживает удаленные ссылки. Тайм-ауты аренды DGC не имеют ничего общего с развязыванием, и существующее связывание будет * предотвращать появление DGC. – EJP 2016-05-20 22:07:02