Premiers pas avec cdi

Configuration rapide dans un environnement Java SE

Si vous travaillez avec un serveur d’applications Java EE 6+, CDI fait partie du conteneur et vous n’avez rien à faire pour commencer à l’utiliser. Mais CDI ne se limite pas aux serveurs d’applications Java EE. Il peut être utilisé dans des applications Java SE ou de simples conteneurs de servlets tout aussi facilement. Jetons un coup d’œil à l’utilisation de CDI dans une simple application de ligne de commande.

Étape 1. Ajoutez des dépendances à votre POM.

<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.0.Alpha15</version>
</dependency>

Étape 2. Ajouter beans.xml

CDI nécessite un fichier beans.xml vide pour pouvoir analyser le JAR à la recherche de classes. Alors créez

src/main/resources/META-INF/beans.xml

avec ce qui suit

<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="all">
    <scan>
        <exclude name="org.jboss.weld.**" />
    </scan>
</beans>

Étape 3. Initialiser CDI

Dans cet exemple, la méthode main(String []) initialise CDI, puis CDI est utilisé pour obtenir une instance de la classe elle-même pour démarrer l’exécution de l’application SE.

import java.util.Arrays;
import java.util.List;
import javax.enterprise.inject.spi.CDI;
import javax.inject.Inject;

public class Main {
    public static void main(String[] args) {
        CDI<Object> cdi = CDI.getCDIProvider().initialize();
        Main main = cdi.select(Main.class).get();
        main.main(Arrays.asList(args));
    }

    @Inject
    protected MyService myService;

    protected void main(List<String> args) {
        System.out.println("Application starting");

        // MyService object injected by CDI
        myService.go();
    }
}

Voilà, vraiment simple.

Installation ou configuration

Instructions détaillées sur la configuration ou l’installation de cdi.

Implémentations

CDI est une [spécification Java EE][1]. Il spécifie comment les choses doivent être faites et quelles fonctionnalités doivent être fournies, mais il ne s’agit pas en fait d’une bibliothèque ou d’un ensemble de code spécifique. Pour utiliser CDI, vous devrez utiliser une implémentation CDI.

L’implémentation de référence de la spécification CDI est un ensemble de bibliothèques connues sous le nom de [Weld][2]. Une implémentation alternative de la spécification CDI existe en tant que [Apache OpenWebBeans][3]. Chacune de ces implémentations pourra vous donner les fonctionnalités de CDI. Si vous n’utilisez pas un serveur d’applications Java EE livré avec l’une de ces implémentations, il vous appartiendra de sélectionner et d’installer l’une de ces implémentations dans votre application ou votre environnement d’exécution.

[1] : http://www.cdi-spec.org/ [2] : http://weld.cdi-spec.org/ [3] : http://openwebbeans.apache.org/