Porque de la CDI (y su aplicación de Soldadura), cada POJO en JEE6 puede ser anotados con @Named, lo que hace que el POJO accesible a la vista.

Eso no significa que ManagedBeans son completamente obsoleto en la actualidad?
O ¿me olvido de algo donde @ManagedBean aún tiene sentido?

InformationsquelleAutor Ingo Fischer | 2010-05-28

4 Comentarios

  1. 51

    En resumen, @ManagedBean tiene sentido para las aplicaciones que utilizan JSF, pero no use JSR 299 (sea cual fuere el motivo). A continuación una explicación más larga de Gavin King:

    Re: Comparaciones a @ManagedBean anotaciones en JSF2?:

    Mientras que mirando a través de la Soldadura de ejemplos, y los mayores WebBeans
    la documentación, se ve como un
    competidor para el nuevo @ManagedBean JSF
    2.0 de anotaciones. Hay información sobre cuando nos gustaría utilizar
    uno sobre el otro?

    Es una buena pregunta, y yo no soy
    en realidad, en un todo de acuerdo con la
    las respuestas que se han publicado hasta el momento.

    El nuevo EE Managed Beans especificación
    define una base de modelo de componente para
    Java EE, junto con una muy básica
    conjunto de servicios de contenedor (@Resource,
    @PostConstruct, @PreDestroy).

    La idea es que otras especificaciones
    (comenzando con EJB, CDI, JSF y la
    nuevo Java Interceptores spec) construir sobre
    esta base de modelo de componente y de la capa de
    servicios adicionales, por ejemplo
    gestión de transacciones, typesafe
    la inyección de dependencia, los interceptores. Así
    en este nivel, el administrado frijoles, CDI,
    los interceptores y EJB especificaciones
    todo el trabajo de la mano y son muy
    complementarias.

    Ahora, el Administrado Frijoles especificación
    es muy abierta con respecto a
    identificar exactamente qué clases son
    managed beans. Proporciona el
    @ManagedBean anotación como uno
    mecanismo, sino que también permite a otros
    especificaciones para definir diferentes
    los mecanismos. Así, por ejemplo:

    • La especificación de EJB dice que una clase de obedecer a una programación determinada
      restricciones con un @Stateless o
      @Stateful anotación desplegado en un
      Jar EJB es un bean gestionado.

    • La CDI especificación dice que cualquier clase con un constructor apropiado
      desplegado en un «bean implementación
      archivo» es un bean gestionado.

    Dado que EJB CDI y proporcionar
    podría decirse que de manera más cómoda a
    identificar un bean gestionado, podría
    pregunto precisamente lo que @ManagedBean es
    necesarios para. La respuesta, como se mencionó
    por Dan, es que si usted tiene CDI
    disponibles en su entorno (por
    ejemplo, si usted está utilizando EE6), entonces
    @ManagedBean no es realmente
    es necesario. @ManagedBean está realmente allí
    para su uso por las personas que están usando JSF2
    sin CDI
    .

    OTOH, si no anotar un bean
    @ManagedBean, y usted tiene la CDI en
    su entorno, aún puede utilizar
    CDI para inyectar cosas en su frijol.
    Es sólo que la @ManagedBean
    la anotación no es requiere en este
    caso.

    Para resumir, si usted tiene CDI
    disponible, proporciona un mucho
    superior en el modelo de programación para el
    @ManagedBean/@ManagedProperty modelo
    que JSF2 hereda de JSF1
    . Así
    superior, de hecho, que los EE 6 web
    perfil no requiere de apoyo para
    @ManagedProperty etc. La idea de ser
    que usted sólo debe utilizar la CDI en su lugar.

    • Aunque no se indica en la pregunta, he leído que asumir JSR 299.
  2. 15

    Usted tiene una opción. Utilizar el @ManagedBean de JSF2 para enlazar los frijoles en sus formas, o utilizar el @Nombre de la anotación de la CDI. Si usted planea en sólo haciendo JSF, usted puede pegarse a @ManagedBean, pero si desea integrar con EJB, o hacer uso de CDI de @ConversationScoped, a continuación, vaya al CDI de la ruta.

    Personalmente creo que la próxima versión de JSF debe descartar la @ManagedBean, y la estandarización en el CDI. La dualidad es confuso para los recién llegados.

  3. 10

    CDI no tiene ninguna vista alcance, porque no tiene la noción de una vista, así que si usted necesita de ese ámbito, la CDI en su forma pura no puede hacerlo. Ver alcance básicamente significa solicitud de alcance +, siendo AJAX-listo. Es no una JSF vista, como una página denominada xyz.xhtml, aunque puede ver JSF <f:viewParam> y los gustos. Un uso frecuente de casos con vista ámbito de frijoles es cómo conseguir los parámetros en un bean. También leer esto.

    Nota que la CDI en lugar vidas en el EJB/capa de servicio de la JSF/capa de presentación. Este blog tiene una bonita vista.

    Como tal @ManagedBean no puede ser completamente reemplazado por la CDI, de nuevo, si usted está utilizando @ViewScoped frijoles – al menos no sin la ampliación de la CDI o el uso de la Costura de 3 Caras módulo. El uso de la vista ámbito de frijoles es casi siempre ocurre cuando se utiliza AJAXed JSF 2-interfaz gráfica de usuario basada kits de herramientas como RichFaces, PrimeFaces, IceFaces, etc.

    La mezcla de anotaciones en el mal de Java EE 6 paquetes de puede en problemas de forma inesperada, de nuevo, en el uso de RichFaces o una API similar:

    @javax.faces.bean.ManagedBean
    @javax.faces.bean.[Jsf]Scoped

    son para los componentes utilizados únicamente en la capa de presentación, aquí por RichFaces, PrimeFaces, etc. Algunos componentes, rico parecen tener problemas con la CDI-anotado y JSF-anotado ayudante de frijoles. Si te extraño comportamiento de su frijoles (frijoles o que parecen no hacer nada) el mal de la mezcla de anotaciones podría ser la causa.

    La mezcla de JSF y la CDI, como

    @javax.inject.Named
    @javax.faces.bean.[Jsf]Scoped

    es posible y funciona en la mayoría de los casos cuando se hace referencia de páginas JSF, sin embargo, hay algunos poco conocidos problemas/inconvenientes, por ejemplo, cuando el uso de un JSF alcance que la CDI no tiene:

    También la combinación @Named @ViewScoped no funciona como se pretende. El JSF específicos @ViewScoped funciona en combinación con JSF específicos @ManagedBean sólo. Su CDI específicos @Named se comportan como @RequestScoped de esta manera. Utilizar @ManagedBean en lugar de @Named o el uso de CDI específicos @ConversationScoped en lugar de @ViewScoped.

    Luego

    @javax.inject.Named
    @javax.faces.bean.[Cdi]Scoped

    puede ser utilizado para la CDI frijoles que se hace referencia directamente desde su páginas JSF AFAIK. Yo no he tenido problemas con las combinaciones anteriores hasta el momento, así que usted podría considerar la posibilidad de @ManagedBean obsoletos aquí.

    Lo que queda es la capa de servicio, aquí en su mayoría transaccional EJB servicio de frijoles declarado como

    @javax.ejb.*

    principalmente @javax.ejb.En apátridas. Incluso puede anotar y uso Ejb directamente desde páginas JSF – aunque no estoy seguro de si este diseño es deseable. Para referencia (inyectar) a cualquiera de los componentes anotados con @javax.ejb.*, por ejemplo,@Stateless, prefieren @Inject más de @EJB como se describe aquí. (Probablemente un antepasado de esta respuesta…)

    Finalmente, un muy buen resumen de Java EE 6 anotaciones se pueden encontrar aquí:
    http://www.physics.usyd.edu.au/~rennie/javaEEReferenceSheet.html

    Nota: la anterior información no es de un experto, pero simplemente mi propia/vista desde una perspectiva de los recién llegados en este ridículamente confuso Java EE 6 anotaciones espaguetis. Más información aún no se ha desarrollado. Espero que esta respuesta puede soportar a un general, la respuesta práctica a esta confusión, a pesar de que ha pasado un poco por la borda en el contexto de la pregunta original.

    • se ha publicado una respuesta a los comentarios que era la mitad de decente, pero luego un poco de fuerza se hizo cargo y la cambió en un loco blob.Las personas son lo que sugiere la CDI es la sustitución de más de @administrado. La pregunta está clara, pero comparando manzanas con oranages.
    • Sí, tipo de. Todavía tengo que estar convencido de cómo CDI es un reemplazo. Mientras tanto, los recién llegados están buscando soluciones, y no de ‘spec-balbuceo’. Que (yo) necesitan un poco de ayuda para decidir que las anotaciones a utilizar en cada situación para obtener cosas. En mi humilde opinión
    • Creo que exactamente respondió a la pregunta de la forma más estricta posible. De hecho, me gustaría 500 más palabras sobre este tema…
    • CDI puede perfectamente hacer uso de la JSV @ViewScoped anotación a través de un CDI de Extensión. Consulte cwiki.apache.org/confluence/display/EXTCDI/JSF+Uso Sólo el uso de la javax.las caras.bean.ViewScoped sin el ManagedBean anotación, y CODI le gestionamos para usted (en CDI).
    • O La Costura De 3 Caras. O de cualquier otro equivalente.
    • Creo que OmniFaces es también una gran herramienta ya que tiene su propio @ViewScope que la CDI entiende y funciona bastante bien!

  4. 7

    Como Acabo de leer en el Soldadura De Referencia (p. 12), @ManagedBean es ahora superfluos:

    Puede declarar explícitamente un administrado
    de frijol en la anotación de la clase de bean
    @ManagedBean, pero en la CDI no
    necesario. De acuerdo a la
    la especificación, la CDI contenedor
    trata cualquier clase que satisface la
    siguientes condiciones como managed
    bean:

    • No es una no-clase interna estática. Se trata de una clase concreta, o es
      anotado @Decorador.
    • No es anotado con un componente EJB-definición de anotación o
      declarado como un bean EJB clase en
      ejb-jar.xml.
    • No implementar javax.empresa.inyectar.spi.La extensión.
    • Tiene un constructor apropiado—o:
    • la clase tiene un constructor sin parámetros, o
    • la clase declara un constructor anotado @Inject.

Dejar respuesta

Please enter your comment!
Please enter your name here