"Getting Started" mit CDI

JunkerMartin

Mitglied
Anhand des JavaEE7-Buches von Dirk Weiler versuche ich mich in CDI einzuarbeiten. Ich scheitere aber schon am ersten Beipspiel.
Ich habe diese beiden Programme:
Java:
package de.sample.cdi.gettingstarted.beans;

import java.util.Calendar;

public class GreetingBean {
  
   public String getGreeting() {
     int hourOfDay = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
     if (hourOfDay < 10) return "Guten Morgen";
     else if (hourOfDay < 18) return "Guten Tag";
     else return "Guten Abend";
   }
}

und
Java:
package de.sample.cdi.gettingstarted.classes;

import de.sample.cdi.gettingstarted.beans.GreetingBean;

import javax.inject.Inject;

public class DemoModel {
   @Inject
   private GreetingBean greetingBean;
  
   public String getHelloWorld() {
     return this.greetingBean.getGreeting() + " Welt";
   }
  
   public static void main(String...strings) {
     System.out.println(new DemoModel().getHelloWorld());
   }
}

Unter "WEB-INF" habe ich eine "fast" leere beans.xml (Ich habe die XML des Buches hier editiert; es gibt aber keine Referenzen auf irgendwelche Klassen oder packages.
Code:
<?xml version="1.0"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"
  bean-dicovery-mode="all" version="1.1">
</beans>

Das Ganze als WAR-File unter TOMCAT 7 ausgeführt erzeugt mir einen NPE in der Methode "getHelloWorld()", da die GreetingBean nicht instantiiert ist.
Der Code ist aus dem Buch - und wenn ich die Bean jetzt selber instantiiere benötige ich CDI nicht mehr.

Kann mir hier jemand weiterhelfen; wäre ganz nett.
 
Zuletzt bearbeitet von einem Moderator:

JunkerMartin

Mitglied
Na viel Kenntnisse scheint es draussen darüber auch nicht zu geben. Ich bin jedenfalls jetzt ein Stück weiter:
1. TOMCAT unterstützt von Haus aus CDI nicht - damit is klar warum es so nicht geht.
2. Man kann TOMCAT mittels WELD-Listener für CDI enablen (vgl dazu Sascha Dörners BLOG). Leider ist es mir nur mit seinem WebServlet gelungen die Injection erfolgreich zu testen. Mein eigenes JSP-Beispiel hat nach wie vor den Fehler.
3. Es gibt noch eine Beispreibung auf der WELD-Seite und bei Bauke Scholz. Beides half mir bisher aber nicht weiter, obwohl es vielversprechend ausgesehen hat. Nachdem ich die Konfiguration entsprechend WELD gemacht hatte, startete meine Anwendung nicht mehr. Sobald ich WELD statt in der WEB-INF/lib in der $TOMCAT_HOME/lib installierte ging es nicht weiter. Hier muss ich noch suchen.
4. Statt TOMCAT ist für CDI wohl TOMEE empfohlen; da ist CDI schon implementiert. Damit mache ich jetzt erstmal weiter - muss mich aber noch einlesen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Thread started nur einmal Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben