I was made aware of the difference on the return of beanManager.getBeans(Object.class)
between OWB and Weld
In OWB, it returns all beans, unless
there is an enabled @alternative within the application. If there is an
enabled @alternative getBeans() only returns beans annotated @alternative.
However, in Weld, it returns all beans
even with an enabled @alternative.
The JavaDoc for BeanMnanager says "according
to the rules of typesafe resolution" and in the CDI 1.0 spec under
typesafe resolution I find one mention of alternatives: “When an ambiguous
dependency exists, the container attempts to resolve the ambiguity. The
container eliminates all eligible beans that are not alternatives, except
for producer methods and fields of beans that are alternatives.” (This
text is also in the CDI 1.2 spec)
However this would imply that if there
are no enabled @Alternatives an ambiguous resolution like beanManager.getBeans(Object.class)
should discard everything. In this case, the Weld behaviour is incorrect.
beanManager.getBeans() should only return the resolved or enabled beans.
Can someone verify this?
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6