Skip to content

CDI in JavaSE

2011 October 22
tags: ,
by Haf

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

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • MisterWong
  • Technorati
  • Yigg
No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS