in breve: puoi persino mescolarlo ( @Singleton
e @ApplicationScoped
) e ha senso in alcuni scenari.
(e funziona come previsto nel mio!)
Oltre alle altre risposte finora, vorrei aggiungere altri punti per chiarimenti negli scenari del mondo reale.
Per me questa domanda è stata sviluppata da Come impongo a un bean con ambito applicazione di creare un'istanza all'avvio dell'applicazione?
In alcune discussioni ho affermato questo e finora non riesco a trovare un argomento valido contro di esso:
In molti scenari / configurazioni di vita reale, direi che è difficile dire con certezza - da un punto di vista astratto / modellistico - se qualcosa è (o diventerà / sarà trattato come) un EJB o un bean gestito con ambito di applicazione.
argomenti (discutibili ma non conclusivi) (dal mio punto di vista) contro di esso finora: (@BalusC e tutti gli altri: mi piacerebbe vederli essere conclusivi, ma in caso contrario, quanto sopra potrebbe essere vero e tuttavia gli argomenti potrebbero aiutare ancora il lettore a capire le differenze / vantaggi / svantaggi / cattive / buone pratiche)
EJB vs Managed Bean
BalusC : Questo è un bean EJB non gestito, il che è molto diverso. Gli EJB vengono eseguiti nel backend e i bean gestiti nel frontend. Anche i bean bean vengono eseguiti in un contesto transazionale. [...] Hai appena confuso i bean enterprise con i bean gestiti e l'ho appena fatto notare.
ma:
io : Penso che tu non sia del tutto corretto e ne esageri il significato / utilizzo e mi sembra discutibile. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Enterprise JavaBeans (EJB) è un software server gestito per la costruzione modulare di software aziendale e una delle numerose API Java. EJB è un componente software lato server che incapsula la logica di business di un'applicazione.
Tipi di fagioli aziendali
Session Beans [3] che possono essere "Stateful", "Stateless" o "Singleton" [...]
Message Driven Beans [...]
... che è ancora vero nel mio caso.
EJB Singleton e Bean con ambito applicazione
Blocco
BalusC : un EJB singleton non è la stessa cosa di un bean con ambito dell'applicazione. Un EJB singleton è bloccato in lettura / scrittura e quindi potenzialmente inefficiente / iperconvoluto per l'attività che avevi in mente. Per farla breve: prendi un buon libro Java EE e impara a utilizzare lo strumento giusto per il lavoro. Un modo sicuramente non è l'altro. Che funzioni non significa che sia lo strumento giusto. Una mazza è in grado di fissare una vite, ma non è necessariamente lo strumento giusto per farlo :)
ma:
(Non riesco a vedere la mazza qui - scusa ...) È bello conoscere le impostazioni predefinite di blocco (non ne ero a conoscenza), ma sembra di nuovo non essere corretto: Oracle Java EE 6 Tutorial sulla gestione dell'accesso simultaneo in un Singleton Session Bean
Quando si crea un bean di sessione singleton, l'accesso simultaneo ai metodi di business del singleton può essere controllato in due modi: concorrenza gestita dal contenitore e concorrenza gestita dal bean. [...]
Sebbene per impostazione predefinita, i singleton utilizzino la concorrenza gestita dal contenitore, l'annotazione @ConcurrencyManagement (CONTAINER) può essere aggiunta a livello di classe del singleton per impostare in modo esplicito il tipo di gestione della concorrenza
@ApplicationScoped
e@Singleton
nella sua sezione 5.4 (p. 36).