Hi All,

        Hope all is well.
        
        Couple of questions about Fortress.

        1. How should a Container get a reference to its own CM/SM - via
        getComponentManager() or via compose()/service().

        getComponentManager() currently means you have to write code like:
        
        public void initialize() throws Exception
        {
                super.initialize();
                m_manager = getComponentManager();
        }
        
        (compose()/service() currently aren't invoked if there's no parent
        manager given to the container so that above code can't be placed
        there).

        IMHO, I think it would be better if the component/service manager
        was available in a protected m_componentManager variable at the
        AbstractContainer level, after compose()/service() is called.

        Something like (in AbstractContainer):
        
                protected ComponentManager m_componentManager;
                
                public void compose(ComponentManager cm)
                        throws ComponentException
                {
                        // parent component manager specified)
                        if (cm != null)
                        {
                                m_componentManager =
                                        new FortressComponentManager(this, cm);
                        }
                        // no parent component manager specified
                        else
                        {
                                m_componentManager = 
                                        new FortressComponentManager(this);
                        }
                }
                
        and something similar in service().
        
        An alternative would be where the CM passed into compose() is
        actually the container's CM, with any specified parent-CM parenting it.
        (but perhaps this breaks Composable's contract ?)
         
        Either way, it would be good if it could all be set up during
        compose()/service(), but from what I see, this is difficult to do due
        to the possible presence of Composable *or* Servicable.
        
        (ie. a container can currently have a Composable or Servicable parent)
        
        Which leads to:

        2. Composable and Serviceable - how are they meant to work together ?

        Currently in Fortress you can only have a Composable or a Servicable
        Container, not both *but* it is possible to have an external
        ServiceManager parenting a ComponentManager inside the container and
        vice versa.
        
        This can occur when one specifies a ServiceManager as parent to the
        container, but uses ComponentManager inside the container
        (and vice versa).
        
        On one side this is advantageous as it means you can supply a parent
        CM/SM to a container, without knowing whether it uses a CM or SM
        internally, but on the other side it sets up the container for
        potential runtime problems, eg. if a ServiceManager parent returns a
        non-Component castable object to a component manager inside of the
        container.
        
        I feel that this could be dangerous - should we actually allow this
        mixing of Service and Component managers ?
        
        3. Asynchronous initialization of component handlers seems to be
        broken.

        From what I can see the asynchronous initialization code within
        Fortress isn't working. When I trace through the code the component
        handlers aren't initialized until components are actually lookup()'d.
        
        In the ContextManager a default CommandQueue object is created if one
        is not specified (and also if setCommandQueue(null) is given to the
        ContextBuilder (which seems suspicious)) and there seems to be no
        ThreadManager associated with the CommandQueue, so initialize()'s are
        only done inside FortressComponent/ServiceManager.lookup().
        
        Unfortunately I don't know the event and queue code well enough to
        fix this problem if my analysis is correct. Any thoughts from the
        more experienced developers there ?
        
        That's it for the moment! Any ideas, feedback would be much
        appreciated :)
        
        Cheers,
        
        Marcus
        
-- 
        .....
     ,,$$$$$$$$$,      Marcus Crafter
    ;$'      '$$$$:    Computer Systems Engineer
    $:         $$$$:   ManageSoft GmbH
     $       o_)$$$:   82-84 Mainzer Landstrasse
     ;$,    _/\ &&:'   60327 Frankfurt Germany
       '     /( &&&
           \_&&&&'
          &&&&.
    &&&&&&&:

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

Reply via email to