Stefano Bagnara wrote:

> init(Config) where Config contains a Context that in turn contains a
> mean to retrieve services is just an obfuscated way to use the Avalon
> serviceLocator pattern (service(ServiceManager s)).

Well, you can say obfuscated and I can say that it is the commmon mechanism
used throughout the J2EE specifications for configuring container managed
components.  Passing a configuration object from which one can get to a
context object is a common pattern, along with JNDI.  But we can agree that
we can have one init() instead of N setter methods, where N is unbounded.

> Imho dependencies have to be shown in the clearest of the ways.

Clear, yes.  But everytime you add a new dependency you have to change the
API.

> JNDI is another service locator, but less powerful than ServiceManager.

JNDI is more powerful than the Avalon Service Manager, if one really
understands it.

> In fact with Avalon Serviceable it is easy to have 2 instances of the
> same component configured in totally different ways because they receive
> a different ServiceManager. To do that with JNDI you add one level of
> complexity.

The container is responsible for providing the appropriate InitialContext to
the contained component.  No extra levels of anything.

> It would be much better to introduce our own "serviceable" interface
> and if you like JNDI use JNDI inside the ServiceManager you pass
> to the object. This way the plain objects does not depends on JNDI
> but only on the serviceable interface.

Servicable is just a means of providing the lookup service (Service
Manager).  If we really want to drink the DI koolaid, we should add a setter
for every service.  Then the container can inspect everyone to see what
service(s) they need.

        --- Noel


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

Reply via email to