Откажитесь от слуги из CORBA после вызова "servant_to_reference"

Следующая последовательность дает мне IOR и сохраняет экземпляр MyObj где-то внутри CORBA (JacORB), чтобы IOR можно было использовать на более позднем этапе:

MyObj myObj = new MyObj(); 
org.omg.CORBA.Object ref = poa.servant_to_reference(myObj); 
org.omg.CORBA.Object href = MyObjHelper.narrow(ref); 
String ior = orb.object_to_string(href); 

Могу ли я как-то сказать JacORB отказаться от "myObj" (на более позднем этапе, конечно)? Ссылки хранятся всегда в некотором Hastable (внутри JacORB), и при создании большого количества записей в какой-то момент появляется дикий OutOfMemory. Я хочу, чтобы JacORB забыл о моем объекте, когда я скажу это.

2 ответа

Решение

Первое, что вы можете сделать, это деактивировать неиспользуемых слуг, * poa.deactivate_object ()*. Проблема в том, что слуга может быть деактивирован.

Лучшая идея - внедрить ServantManager с некоторой политикой тайм-аута.

Не забывайте о политике POA.

Всякий раз, когда вы ссылаетесь на объект Corba, его внутренний счетчик ссылок увеличивается на единицу. Это похоже на механизм сборки мусора Java.

Это означает, что myObj мусор будет собираться только когда ior, href а также ref сборка мусора.

Существует также опция, позволяющая вручную уменьшить счетчик ссылок Corba для myObj, но это не рекомендуется, потому что тогда вы отключите механизм подсчета ссылок Corba и вызовете непредсказуемое поведение.

Другие вопросы по тегам