I've been working on getting EE JNDI services organized in a
spec-consistent (and start-order-consistent) manner. The first part of
this effort - dividing the EE component service itself into two phases -
was relatively simple and is now complete; however it appears that our
JNDI services are not entirely prepared for this organizational change.
I've attached a diagram which illustrates the desired service layout
for EE components which covers injection and start order, and should be
cycle-proof (we'll know for sure once we implement EJB "eager" singletons).
Anyway please review the graph and let me know if there are any
questions, especially if I've missed any cases, and in the meantime I'll
be working on getting the deployers straightened out. The arrow means
"depends-on".
Some important facts not depicted:
- Components (as can be seen from the graph) are bound into JNDI
possibly before they are started; however attempting to create a new
component instance will block until the "START" phase is complete (note
that for some component types, you can acquire a client proxy without
actually causing instantiation to occur).
- The service naming scheme is not final, especially for JNDI contexts.
- Note that not all env. entries necessarily imply injection; it is also
possible to specify immediate values in the deployment descriptor. To
achieve this in MSC, the env. entry service should have an Injector
which can be immediate for descriptor-provided (or defaulted) values or
it can be a dependency for lookup values.
- Note that all inter-component dependencies are expressed upon JNDI
bindings (jboss.naming.context.* services), not on the actual components
(jboss.deployment.unit.*.component.* services).
--
- DML