QCG - Sim IJskes wrote:
Peter Firmstone wrote:
The problem starts when you marshall it in BasicInvocationDispatcher.marshalReturn(), and the reply has enough latency to arive 'late' at the client side.

In this window the service becomes 'weakly reachable' and if the GC kicks in before DgcServer.dirty the object gets finalized.

Keep a strong reference, to the service (not the proxy), long enough to

Indeed, but my point is, that this is so counter-intuitive. It looks like this is completely overlooked by the design of jini. Why? I can't imagine. Everywhere where you have a service that has a factory method for a service, and you don't register the service or save the service reference, this will happen. It has never been documented.

It is because GC has become better? Shouldn't we include a fix in the BasicJeriExporter for this?

Hmm interesting, by default DGC is disabled and all exported Remote's are only referred to by a weak reference, unless the implementer holds a strong reference, when using DGC (discouraged for secure endpoints due to DOS attacks) the service will have a strong reference kept, while client remote references leases exist. However if there's an intervening period where there are no clients and no local strong reference the Remote object will be GC'd.

The same thing occurs to a Service that is registered with the lookup service, if there aren't any local strong references or remote references from clients for that matter, it will be garbage collected.

You are right, we need to document the behavior better (any volunteers?) it isn't intuitive.

Perhaps we could create a local BasicObjectEndpoint with the default lease duration in the referenced set? This would expire after the lease duration, it would complicate the code though. Or we could just provide better documentation. Anyone got a better idea?

Don't be shy everyone, please make suggestions.

Regards,

Peter.


Reply via email to