> From: Marcus Crafter [mailto:[EMAIL PROTECTED]]
>
> 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().
The CM/SM is merely a lookup interface for the internals of the
Container. The getComponentManager()/getServiceManager() methods
are factory methods so that each client can have its own copy.
This is a plus, because we can safely delay thread contention
issues
until the last possible minute.
> public void initialize() throws Exception
> {
> super.initialize();
> m_manager = getComponentManager();
> }
?!
Danger Will Robinson! Danger! Subversion of Control is bad.
If an AbstractContainer is Composable or Serviceable it will get
the parent manager from the compose()/service() methods. It is
the ContainerManager's responsibility to provide one. If it
doesn't
then there is a bug.
> 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.
There is a huge difference between a parent CM and the managed
component's CM. The AbstractContainer creates a new
ServiceManager
All the components created and managed by Fortress are given a
FortressComponentManager or a FortressServiceManager. If the
container does not handle that type of component, it will lookup
in the parent component manager.
Don't confuse the two CMs.
> 2. Composable and Serviceable - how are they meant to
> work together ?
They are mutually exclusive. They should not be used 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.
We have a way of wrapping the ComponentManager or ServiceManager
so that they can be used interchangeably.
>
> I feel that this could be dangerous - should we
> actually allow this
> mixing of Service and Component managers ?
No!
> 3. Asynchronous initialization of component handlers seems to be
> broken.
We need to fix it.
>
> 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.
Hmm. :/
Lazy initialization != asynchronous initialization. What happened?
It used to work?
> 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 ?
We need to make the CommandManager initialize a default ThreadManager
if one isn't provided.
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>