¿Por qué hay diferentes anotaciones de gestión de frijoles

Cuál es la diferencia entre

import javax.annotation.ManagedBean; import javax.enterprise.context.SessionScoped; 

y

 import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; 

?

  1. javax.enterprise.context.SessionScoped ( JSR 346 ) y todas las demás anotaciones bajo el paquete javax.enterprise.context.* mantienen el contexto de CDI . CDI proporciona un mecanismo alternativo, versátil y más potente para la dependency injections, el frijol y la gestión de recursos generales dentro del espacio Java EE. Es una alternativa a los beans administrados por JSF e incluso reemplaza el mecanismo de administración de beans de JSF en la próxima versión de JSF .

    En la actualidad, los beans anotados JSF y CDI son intercambiables dentro de cualquier aplicación web Java EE dada (dado un puñado de restricciones menores). Los beans con anotaciones CDI, sin embargo, se extienden mucho más allá del dominio del nivel web, razón por la cual la especificación Java EE está evolucionando para hacer que el CDI sea el mecanismo estándar de DI y frijol.

    Si bien el CDI podría ser una opción obvia para todo el desarrollo de Java EE, los beans gestionados de JSF son portátiles en contenedores servlet (Tomcat) y servidores de aplicaciones (Glassfish, JBoss, etc.). Los beans CDI solo pueden vivir en servidores de aplicaciones completos. Sin embargo, con algo de trabajo de campo , Tomcat 7 se puede conectar para admitir CDI.

    Específicamente, javax.enterprise.context.SessionScoped es la implementación paralela del ámbito de la sesión JSF dentro de CDI.

  2. javax.faces.bean.SessionScoped ( JSR 314 ) y todas las demás anotaciones en el paquete javax.faces.bean.* mantienen la dependency injections específica de JSF y el mecanismo de administración de beans. Los beans anotados con anotaciones JSF, sin embargo, solo son útiles dentro del nivel web. Todos los ámbitos disponibles con anotaciones JSF se han replicado dentro de la especificación CDI.

  3. javax.annotation.ManagedBean ( JSR 316 ) y otras anotaciones relacionadas con javax.annotation.* bajo javax.annotation.* son un bash de generalizar las anotaciones basadas en JSF para otros usos dentro de la especificación Java EE y realmente no deberían ser utilizadas por el final. desarrollador.

¿Por qué existen? Bien IMO, el paso de los frijoles JSF a los frijoles CDI es una evolución natural de la tecnología. Los frijoles JSF han tenido una buena racha, pero los gustos de Spring, Guice y Seam hacían obvio que la tecnología no era suficiente. También hubo una necesidad de cerrar la brecha entre los componentes web y los EJB, y la respuesta a esa necesidad es CDI.

Vea estas preguntas relacionadas también:

  • JSF: Backing beans (@ManagedBean) o CDI Beans (@Named)?
  • Java EE 6 @ javax.annotation.ManagedBean vs. @ javax.inject.Named vs. @ javax.faces.ManagedBean