Specyfikacja CDI rozpoznaje niejawne archiwa komponentów bean

W specyfikacji CDI (Contexts and Dependency Injection) w wersji 1.1 wprowadzono tryb wykrywania niejawnych komponentów bean, który powoduje zmiany działania i wydajności w stosunku do implementacji specyfikacji CDI 1.0 na platformie Java Platform, Enterprise Edition (Java EE) 6 używanej na serwerze WebSphere Application Server. Niejawny komponent bean to archiwum zawierające jedną lub więcej klas komponentów bean z adnotacją definiującą komponent bean albo z jednym lub większą liczbę komponentów bean sesji.

Przy przechodzeniu ze środowiska Java EE 6 CDI 1.0 do środowiska Java EE 7 CDI 1.1 lub nowszego wykrywanie niejawnych komponentów bean skutkuje skanowaniem wszystkich plików WAR i JAR w czasie wykonywania, nawet jeśli nie mają one pliku beans.xml. To skanowanie to zmiana działania w stosunku do wersji Java EE 6 CDI 1.0, w której brak pliku beans.xml zapobiegał skanowaniu archiwów w aplikacji.

Ta reguła powoduje oznaczenie poniższych adnotacji definiujących komponenty bean i komponenty EJB (Enterprise JavaBeans) sesji we wszystkich plikach WAR i JAR, dla których nie istnieje plik beans.xml.

Skaner aplikacji binarnych flaguje klasy, które są opatrzone adnotacją @NormalScope. Te adnotacje mogą zostać wykryte, nawet jeśli pojawiają się poza kontekstem beans.xml które jawnie lub niejawnie ich używają.

Aby wyłączyć tę zmianę działania specyfikacji CDI w czasie wykonywania na poziomie plików WAR lub JAR, należy dodać plik beans.xml z trybem wykrywania komponentów bean ustawionym na wartość none, jak pokazano w poniższym przykładzie.


<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
		  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
		  		      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
		  		      bean-discovery-mode="none" version="1.1">
</beans>

Na serwerze Liberty można również wyłączyć to działanie, dodając następującą właściwość do pliku server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Więcej informacji na temat implementacji Java EE 7 CDI 1.2 można znaleźć na stronie Zmiany w działaniu specyfikacji Contexts and Dependency Injection 1.2.