Are @ManagedBeans obsolete in JavaEE6 because of @Named in CDI/Weld?

In short, @ManagedBean makes sense for applications that use JSF but do not use JSR 299 (whatever the reason is). Below a longer explanation from Gavin King:

Re: Comparisons to @ManagedBean annotations in JSF2?:

While looking through the Weld examples, and the older WebBeans
documentation, it looks like a
competitor to the new @ManagedBean JSF
2.0 annotations. Is there any information on when we’d want to use
one over the other?

It’s a good question, and I’m not
really in full agreement with the
answers that have been posted so far.

The new EE Managed Beans specification
defines a base component model for
Java EE, together with a very basic
set of container services (@Resource,
@PostConstruct, @PreDestroy).

The idea is that other specifications
(beginning with EJB, CDI, JSF and the
new Java Interceptors spec) build upon
this base component model and layer
additional services, for example
transaction management, typesafe
dependency injection, interceptors. So
at this level, the managed beans, CDI,
interceptors and EJB specifications
all work hand-in-hand and are highly
complementary.

Now, the Managed Beans specification
is quite open-ended with respect to
identifying exactly which classes are
managed beans. It does provide the
@ManagedBean annotation as one
mechanism, but it also allows other
specifications to define different
mechanisms. So, for example:

  • The EJB specification says that a class obeying certain programming
    restrictions with a @Stateless or
    @Stateful annotation deployed in an
    EJB jar is a managed bean.

  • The CDI specification says that any class with an appropriate constructor
    deployed in a “bean deployment
    archive” is a managed bean.

Given that EJB and CDI provide
arguably more convenient ways to
identify a managed bean, you might
wonder precisely what @ManagedBean is
needed for. The answer, as alluded to
by Dan, is that if you have CDI
available in your environment (for
example, if you are using EE6), then
@ManagedBean is just not really
needed. @ManagedBean is really there
for use by people who are using JSF2
without CDI
.

OTOH, if you do annotate a bean
@ManagedBean, and you do have CDI in
your environment, you can still use
CDI to inject stuff into your bean.
It’s just that the @ManagedBean
annotation is not required in this
case.

To summarize, if you do have CDI
available to you, it provides a far
superior programming model to the
@ManagedBean/@ManagedProperty model
that JSF2 inherits from JSF1
. So
superior, in fact, that the EE 6 web
profile does not require support for
@ManagedProperty etc. The idea being
that you should just use CDI instead.

Leave a Comment