Вопрос

The following sequence gives me an IOR and keeps the MyObj instance somewhere inside CORBA (JacORB) so that the IOR can be used at a later stage:

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); 

Can I somehow tell JacORB to discard "myObj" (at a later stage, of course)? References are kept forever in some Hastable (inside JacORB), and when creating a lot of entries, a wild OutOfMemory appears at some point. I want JacORB to forget about my object when I tell it to.

Это было полезно?

Решение

The first thing that you can do is deactivate unused servants, *poa.deactivate_object()*. The problem is know when the servant can be deactivated.

The best ideia is implement ServantManager with some timeout policy.

Don't forget about POA policies.

Другие советы

Whenever you reference Corba object, it's internal reference count increases by one. This is similar to Java garbage collector mechanism.

That means that myObj will be garbage collected only when ior, href and ref are garbage collected.

There's also an option to manually decrease Corba reference count of myObj but this is not recommended because then you will defeat Corba's reference count mechanism and cause unpredictable behavior.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top