ti-enxame.com

Por que existem diferentes anotações de gerenciamento de bean

Qual é a diferença entre

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

e

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

?

39
Koray Tugay
  1. javax.enterprise.context.SessionScoped ( JSR 346 ) e todas as outras anotações sob o javax.enterprise.context.* _ pacote mantém o contexto de CDI . O CDI fornece um mecanismo alternativo, versátil e mais poderoso para injeção de dependência, bean e gerenciamento geral de recursos dentro do espaço Java EE. É uma alternativa aos beans gerenciados JSF e está configurado para substituir o bean JSF mecanismo de gerenciamento no próxima versão do JSF .

    Atualmente, os beans anotados JSF e CDI são intercambiáveis ​​em qualquer dado Java EE (dadas algumas restrições menores). Os beans anotados CDI, no entanto, se estendem muito além do domínio da camada da web, que é por isso que a especificação EE Java está evoluindo para tornar o CDI o bean padrão e o mecanismo DI).

    Embora o CDI possa ser uma escolha óbvia para todos Java EE, os beans gerenciados JSF são portáteis entre contêineres de servlet (Tomcat) e servidores de aplicativos (Glassfish, JBoss etc.).) Os beans CDI podem viver dentro apenas servidores de aplicativos completos.Com alguns trabalhos no entanto, o Tomcat 7 pode ser conectado para oferecer suporte ao CDI.

    Especificamente, javax.enterprise.context.SessionScoped é a implementação paralela do escopo da sessão JSF no CDI.

  2. javax.faces.bean.SessionScoped ( JSR 314 ) e todas as outras anotações sob o javax.faces.bean.* _ pacote mantém o mecanismo de gerenciamento de bean e injeção de dependência específica do JSF. Os beans anotados com anotações JSF, no entanto, são úteis apenas na camada da web. Todos os escopos disponíveis nas anotações JSF foram replicados dentro da especificação CDI.

  3. javax.annotation.ManagedBean ( JSR 316 ) e outras anotações relacionadas a DI em javax.annotation.* são uma tentativa de generalizar as anotações baseadas em JSF para outros usos dentro da especificação Java EE E e realmente não devem ser usadas pelo desenvolvedor final.

Por que eles existem? Bem, na IMO, a mudança dos beans JSF para os CDI é uma evolução natural da tecnologia. Os beans JSF tiveram uma boa execução, mas empresas como Spring, Guice e Seam tornaram óbvio que a tecnologia não era suficiente. Havia também a necessidade de preencher a lacuna entre os componentes da Web e os EJBs, e a resposta a essa necessidade é o CDI.

Veja também estas questões relacionadas:

49
kolossus