Perché ci sono diverse annotazioni sulla gestione dei bean

Qual è la differenza tra

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

e

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

?

  1. javax.enterprise.context.SessionScoped ( JSR 346 ) e tutte le altre annotazioni sotto il pacchetto javax.enterprise.context.* mantengono il contesto di CDI . CDI fornisce un meccanismo alternativo, versatile e più potente per l’iniezione delle dipendenze, il bean e la gestione generale delle risorse all’interno dello spazio Java EE. È un’alternativa ai bean gestiti da JSF ed è addirittura in grado di sostituire il meccanismo di gestione dei bean JSF nella prossima versione di JSF .

    Attualmente, i bean con annotazione JSF e CDI sono intercambiabili all’interno di una determinata applicazione Web Java EE (a causa di alcune restrizioni minori). Tuttavia, i bean con annotazioni CDI si estendono ben oltre l’ambito del livello Web, motivo per cui le specifiche Java EE si stanno evolvendo per rendere CDI il meccanismo standard di bean e DI.

    Mentre CDI potrebbe essere una scelta ovvia per tutto lo sviluppo di Java EE, i bean gestiti da JSF sono portabili su container servlet (Tomcat) e server applicativi (Glassfish, JBoss, ecc.). I bean CDI possono vivere solo con server di applicazioni completi. Tuttavia, con alcuni legwork , Tomcat 7 può essere collegato per supportare CDI.

    Nello specifico, javax.enterprise.context.SessionScoped è l’implementazione parallela di JSF Session Scope all’interno di CDI.

  2. javax.faces.bean.SessionScoped ( JSR 314 ) e tutte le altre annotazioni sotto il pacchetto javax.faces.bean.* mantengono il meccanismo di gestione delle dipendenze e di gestione dei bean specifico per JSF. I bean annotati con annotazioni JSF tuttavia sono utili solo all’interno del livello web. Tutti gli ambiti disponibili con annotazioni JSF sono stati replicati all’interno della specifica CDI.

  3. javax.annotation.ManagedBean ( JSR 316 ) e altre annotazioni relative alla DI sotto javax.annotation.* sono un tentativo di generalizzare le annotazioni basate su JSF per altri usi all’interno della specifica Java EE e in realtà non dovrebbero essere usate javax.annotation.*javax.annotation.* sviluppatore.

Perché esistono? Bene IMO, il passaggio dai fagioli JSF ai fagioli CDI è una naturale evoluzione della tecnologia. I fagioli JSF hanno avuto una buona corsa, ma quelli come Spring, Guice e Seam hanno reso evidente che la tecnologia non era sufficiente. Era inoltre necessario colmare il divario tra i componenti web e gli EJB e la risposta a tale esigenza è la CDI.

Vedi anche queste domande correlate:

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