Откажитесь от слуги из CORBA после вызова "servant_to_reference" - PullRequest
1 голос
/ 14 февраля 2012

Следующая последовательность дает мне 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 ]

1 голос
/ 17 февраля 2012

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

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

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

0 голосов
/ 02 апреля 2017

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

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

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

...