Alan D. Cabrera wrote:
I want to critically look at the statement

if (obj instanceof Disposable) (Disposable) obj).dispose();

More frequently you will find ContainerUtil.dispose(obj) that is the same thing, but cleaner to read and simplify code "browsability".

which is being used not in the container but inside server objects. This strikes me as odd since IMO the interface should be a marker for the container. It should not be a plea to sibling code to please call this method at the appropriate time.

THe problem is that you think to Avalon as a "Container stuff" while avalon is an application framework.

That said, James is implemented using the avalon application framework, so the patterns/code included in Avalon are used in James internals, like the dnsjava library, or a common-collection framework.

Avalon compliant containers manage the top-level application wiring/lifecycle/configuration but the internal handling of more granular object is left to the components. Most components use the avalon framework to do that: James often manage sub-components lifecycle/configuration/dependecies this way.

When ever I see a statement like that inside the server code I say to myself "All instances of this object should just implement Disposable and those that don't want to do anything should have empty method implementations".

This is another solution to the same problem: we could use reflections, or we could deprecate the disposable and use the finalizer method, or we could use an "object manager" that create objects and keep track of their lifecycle.

I don't think that generally speaking one solution is always better than the other and I didn't analyze the specific "dispose" methods in James.

I see at least some big issue to not do the change:
- backward compatibility
- I don't generally like having lifecycle methods or pattern specific methods in business interfaces.

What are the advantages?

Stefano


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to