Leo Sutic wrote:
> 
>>From: Berin Loritsch [mailto:[EMAIL PROTECTED]]
>>
>>Leo Sutic wrote:
>>
>>>And I now have a completely initialized component manager
>>>inside the containerManager. Then I do a:
>>>
>>>    ComponentManager myManager =
>>>        (ComponentManager) containerManager.getContainer ();
>>>
>>I want to move this part to a ContextManager, so that it makes it easier
>>to reuse instances of PoolManager et. al. from a parent container.
>>
>>
>>>and when I want to process a request, I can look up the Processor
>>>(for example) component in myManager and pass it the required
>>>
>>parameters.
>>
>>The way I would envision it for something like Cocoon where the Cocoon
>>object *IS* a processor, I would do this in the servlet code:
>>
>>Processor cocoon = (Processor) containerManager.getContainer();
>>
>>I would not expose the ComponentManager to the outside world (Subversion
>>of Control you know).
>>
>>
>>>And now, I want to write a component that holds several other
>>>
>>components.
>>
>>>I take it then, that this would be done just as above. The component
>>>would have a CM created via the ContainerManager.
>>>
>>THere is an AbstractContainer class that takes care of the default
>>implementation of this.  It builds all the component handlers and such
>>for the Container.  The COntainerManager merely manages the instance
>>of the Container.  It has its ComponentManager to help resolve config
>>files.
>>
> 
> I would like to split this one and break out the get and has methods.
> 
> AbstractContainer: Provides methods for obtaining handlers to components.
> AbstractManager  : Provides methods for accessing component handlers.
> 
> Basically, AbstractContainer.m_mapper would be AbstractManager.m_mapper,
> and the rest of the class follows as needed to compile.
> 
> 
>>>Questions:
>>>
>>>1) How do I pass a parent CM to the new CM that I create via the
>>>ContainerManager?
>>>
>>:)  I am working on that.  Basically, if I pass it in the constructor,
>>or the ContextManager, I can handle that quite easily.
>>
> 
> Or pass it in if the created container implements Composable as the
> container
> is being put through the lifecycle steps. The container would
> get the parent cm in compose. The parent cm is passed to the
> ContainerManager via the Context (see below).
> 
> I think the ContainerManager must allow for more overrides - one should, as
> with the configuration below, always be able to pass in a pre-generated
> CM, or Context, or Configuration.
> 
> 
>>>2) How do I pass a non-file Configuration to the ContainerManager?
>>>
> (Useful
> 
>>>in the second case.)
>>>
>>Good question.  My thoughts are to make the ContainerManager use the
>>ContextManager.
>>
> 
>>It would retrieve the URI from the context and retrieve
>>a Configuration, and store the configuration in the Context.  Next, it
>>would pull that configuration and generate the resource.
>>
> 
> Or:
> 
> public class ContextManager {
> 
>   ...
> 
>   public void buildConfigurationFromFile (String path) {
>     ...
>     // Build the configuration from the path, resolving it relative to the
>     // context base URI and so on.
>     ...
>     setConfiguration (newlyBuiltConfiguration);
>   }
> 
>   public void setConfiguration (Configuration configuration) {
>     // put the configuration into the context
>     ...
>   }
> 
>   ...
> 
> }
> 
> and replace the constructors of ContainerManager with:
> 
>   public ContainerManager( final Context initParams,
>                            final Logger primordialLogger )
> 
> The ContainerManager will then use the objects in the initParams to
> initialize the container. That is, initParams contains a configuration,
> it contains Parameters, a ComponentManager and so on. It also
> contains a Context that will be passed on to the created container.
> 
> That Context needs some post-processing, since the created container must
> be able to use the Context it recieved in contextualize to create its
> own sub-container.
> 
> Therefore, the Context actually passed on to the container is
> 
>   Context as given in the initParams parameter to the
>            ContainerManager constructor
>                           +
>           some elements of initParams itself.
> 
> The parts of initParams that should be passed on to the container are
> basically those that the container can not guess itself, but that
> are needed to create a sub-container:
> 
> CONTEXT_DIRECTORY
> WORK_DIRECTORY
> LOGKIT_CONFIG
> THREADS_CPU
> THREAD_TIMEOUT
> 
> 
>>>4) Is it your intention to not use the Lifestyle interfaces ThreadSafe
>>>
> etc.
> 
>>>   any more and replace them with handler attributes in the
>>>
> configuration file?
> 
>>YES!  Absolutely.  I want to remove the dependancies on marker
>>interfaces in general.
>>
> 
> I think marker interfaces are great: You will need to document the type
> of handler a component uses anyway, so why not make it part of the component
> class? C#, for example, allows attributes to be set for every object in the
> system. Java has interfaces. It would be unwise to throw it away.
> 
> I'd go for a handler="..." override and an autodetect based on marker
> interfaces.
> 
> No big deal - the ContainerManager is such an improvement that this is
> trivial.
> 
> 
>>>>Nothing stops you from directly using the ComponentHandler classes.  I
>>>>would suggest you make all of them ThreadSafe, so you don't have any
>>>>funny logic and make things easy on yourself....
>>>>
>>>>
>>>That's pretty much my conclusion, too.
>>>
>>>But for future work I will need the ContainerManager or something
>>>exactly like that.
>>>
>>:)
>>
>>I'm working as fast as I can, but if you want to help, I would
>>appreciate it.
>>
> 
> I'm in.
> 
> /LS
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 
> 



-- 

"They that give up essential liberty to obtain a little temporary safety
  deserve neither liberty nor safety."
                 - Benjamin Franklin


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

Reply via email to