La specifica CDI (Contexts and Dependency Injection) 1.1 ha introdotto la modalità di rilevamento bean implicita, dando luogo a modifiche al comportamento ed alle prestazioni rispetto all'implementazione di Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 in WebSphere Application Server. Un bean implicito è un qualsiasi archivio che contiene una o più classi bean con un'annotazione che definisce bean, o uno o più bean di sessione.
Quando si passa da Java EE 6 CDI 1.0 a Java EE 7 CDI 1.1 o versioni successive, il rilevamento del bean implicito determina la scansione dal runtime di tutti i file WAR e JAR, anche se non hanno un file beans.xml. Questa scansione è un cambiamento del comportamento rispetto a Java EE 6 CDI 1.0, dove un file beans.xml mancante avrebbe impedito la scansione degli archivi nell'applicazione.
Questa regola contrassegna le seguenti annotazioni di definizione dei bean ed i bean di sessione EJB (Enterprise JavaBeans) in tutti i file WAR e JAR che non hanno un file beans.xml.
Lo scanner applicazione binaria contrassegna le classi di annotazione annotate come @NormalScope. A differenza dello scanner applicazione binaria basato su Eclipse, non rileva le classi annotate con un'annotazione di tipo d'ambito normale. Tali annotazioni possono essere contrassegnate all'esterno dell'ambito dei file beans.xml che li utilizzano in modo esplicito o implicito.
Per disabilitare questa modifica al comportamento di CDI durante il runtime a livello di WAR o JAR, aggiungere un file beans.xml con la modalità di rilevamento dei bean impostata su none, come mostrato nel seguente esempio.
|
Anche in Liberty è possibile disabilitare questa funzionalità aggiungendo la seguente proprietà al file server.xml.
|
Per ulteriori informazioni sull'implementazione di Java EE 7 CDI 1.2, consultare Contexts and Dependency Injection 1.2 behavior changes.