CDI in JavaSE
Published on 22/10/2011
3 min read
In category
jee
CDI – Contexts and Dependency Injection for the Java(tm) EE platform [1] - ist nicht neu und man findet im Netz auch genug gute Einführungen (z.B. [2] und natürlich immer auch bei [3], [4] etc). Möchte man jedoch CDI außerhalb eines Container (AppServer) verwenden, sprich in einer Java SE Umgebung, sucht man schon etwas länger. Bei CDI gibt es u.a. folgende Implementierungen: Weld [5] und OpenWebBeans [6]. Bei der Referenzimplementierung Weld ist die Dokumentation vorbildlich und es gibt auch ein Kapitel [7] welches den Einsatz in einer Java SE Umgebung beschreibt. Solch ein Kapitel sucht man bei OpenWebBeans leider vergebens – das Kapitel an sich existiert schon, leider ohne Inhalt. Zum Glück findet man im SVN jedoch ein SE-Bespiel [8]. Für Version 1.1.2 ersetzt man folgende Zeil:
lifecycle = WebBeansContext.getInstance().getService(ContainerLifecycle.class);
durch
lifecycle = WebBeansContext.currentInstance().getService(ContainerLifecycle.class);
Und der Einsatz von CDI mit OpenWebBeans in einer Java SE Umgebung steht nix mehr im Weg.
Zur Vollständigkeit anbei die Maven pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4\_0\_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.haddouti.maven</groupId>
<artifactId>cdi-test</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>cdi-test</name>
<url>http://www.haddouti.com</url>
<dependencies>
<!-- CDI Impl: Apache OpenWebBeans -->
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-impl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-el\_2.2\_spec</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-interceptor\_1.1\_spec</artifactId>
<version>1.0</version>
<optional>true</optional>
</dependency>
<!-- JSR-299 -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jcdi\_1.0\_spec</artifactId>
<version>1.0</version>
<optional>true</optional>
</dependency>
<!-- JSR-330 -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-atinject\_1.0\_spec</artifactId>
<version>1.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-spi</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
</project>
- [1] http://www.jcp.org/en/jsr/summary?id=299
- [2] http://blog.namics.com/2011/01/cdi-leichtgewic.html
- [3] http://matthiaswessendorf.wordpress.com/2010/01/19/dependency-injection-the-jsr-330-way/
- [4] http://www.adam-bien.com/roller/abien/entry/simplest\_possible\_ejb\_3\_15
- [5] http://seamframework.org/Weld
- [6] http://openwebbeans.apache.org/owb/index.html
- [7] http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/environments.html#d0e5333
- [8] http://svn.apache.org/repos/asf/openwebbeans/trunk/samples/standalone-sample/src/main/java/org/apache/webbeans/se/sample/Boot.java