At the last Seam team meeting, the issue came up (once
again) of how to get the BeanManager from a non-contextual resource.
The reality is that there are certain lifecycle classes in Java EE that
did not getĀ categorizedĀ as components (e.g., PhaseListener) and
therefore do not support injection. They are "outside" of CDI. We are
working on an SPI for JSF to make these classes CDI beans, but there
will always be other cases.
In the current version of the spec, the standard way of looking
up the BeanManager is to use JNDI. However, JNDI is not consistently
supported in environments for which we want to write portable
extensions (whether we like it or not, people use servlet containers).
Weld puts the BeanManager in a servlet context attribute equal to the
FQCN of BeanManager. Pete suggested that we submit a change request to
have this location standardized when running in a servlet environment.
With this change, the BeanManager can be obtained as follows:
BeanManager manager = (BeanManager)
getServletContext().getAttribute(BeanManager.class.getName());
This requires no change in Weld, since Weld is already doing
this.
_______________________________________________
weld-dev mailing list
weld-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/weld-dev