On Tue, 3 Dec 2002 13:17, Adam Murdoch wrote:
> Hence my question:  Does the component *really* care whether a particular
> resource is provided by the container or not provided by the container?  Is
> this an artificial distinction?  Why is it useful to the component writer
> to split them?

Essentially it comes down to the context wrt the resources is requested. For 
example lets consider Logger. Historically we had LogManager as a service 
that components depended on to get at their logger. So it would look 
something like;

class MyComponent
{
 void service( ServiceManager sm )
 {
   LoggerManager lm = (LoggerManager)sm.lookup( LoggerManager.ROLE );
   m_logger = lm.getLogger( "my-channel" );
 }
}

In this case you are passing component specific context (ie string 
"my-channel") into LoggerManager. Now if you wanted two different instances 
of MyComponent - say one production and one testing - they would both log to 
the same channel or we would have to create multiple instances of 
LoggerManager.

However when the container manages allocation of Logger resource they can be 
remapped without the Component writer knowing about it or caring. 

Everything available in the context can either be made into a service or 
blended into configuration or both. The problem is that when the resource 
(data or service) requires per-component context you end up having a "fake" 
provider component per component. So assembly requires mapping of several 
"fake" components to the dependencies in the "real" components (ie the ones 
you actually care about). You also end up duplicating data between different 
stages. ie assembly process names components and links them to resources 
resources and those same names need to placed in configuration of "fake" 
provider components.

You could say that this could all be auotmated with some PFM but when we went 
this path in the past the users complained about the complexity of assembly 
process because you have to be aware of the minute details of how the 
container does the PFM and so you have not made it easier on users unless 
they are already know everything (which are not the ones who need help 
anyways).

When more advanced assembly processes come into play (ie different interceptor 
chains per component client) you duplicate much more information and add much 
more magic. Too complex to manage without a tool and I don't think it is in 
our best interests to require a tool to write applications.

-- 
Cheers,

Peter Donald
*------------------------------------------------*
| The student who is never required to do what   |
|  he cannot do never does what he can do.       |
|                       - John Stuart Mill       |
*------------------------------------------------*


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

Reply via email to