Java EE 
Full Stack for Business Applications 
 Contexts and Dependency Injection 
Referent: MATTHIAS REINING 
Technical Manager Insurance at RGI Deutschland GmbH 
blog: http://blog.matthias-reining.com 
t...
CDI 
Contexts and Dependency Injection
DAS PROGRAMM 
 Die Spec 
 Idee, Historie 
 Der App Server 
 Containerkonzept 
 Paketierung (JAR, WAR, EAR) 
 Marktüb...
BESTANDSAUFNAHME 
Wer hat mit CDI „bewusst“ bereits gearbeitet?
Context and Dependency Injection 
CDI standardisiert das Prinzip der Dependency Injection für Java, wonach 
die von einem ...
Context and Dependency Injection 
Contexts and Dependency Injection for Java EE (CDI) is one of several 
Java EE features ...
CDI – Spec 
Reference Implementation: Weld 
Alternative: OpenWebBeans 
Konkrete Implementierung hängt vom Application Serv...
CDI 
Tutorials / Nachschlagewerke 
 http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic.htm 
 http://de.slideshare.ne...
nach JPA, JSF, EJB… 
wozu jetzt noch CDI??? 
Unsere Anwendung funzt doch bereits…
Gründe für CDI… 
CDI verbessert 
 die Erweiterungsfähigkeit, 
Wartbarkeit und 
 die Testbarkeit 
einer Anwendung durch ...
 Contexts: This service enables you to bind the lifecycle and 
interactions of stateful components to well-defined but ex...
„Großes Kino“ 
Unbekanntes (CDI) mit noch 
mehr unbekannten (Seam, 
Guice, Spring) erklären… 
Direkteinspritzer 
Die Java ...
Dependency Injection (DI) ist ein Entwurfsmuster und 
dient in einem objektorientierten System dazu, die 
Abhängigkeiten z...
DI Java Frameworks 
 Spring 
 EJB3.x 
 JBoss Seam (mittlerweile nur noch JBoss Weld) 
 Google Guice 
CDI, Standard für...
Der CDI Container 
 Der Container von CDI kann fast jegliche Instanzen von konkreten Java 
Klassen verwalten 
 Java Bean...
CDI Overview 
CDI provides the following services: 
 Integration with the Expression Language (EL), which allows any comp...
CDI Overview 
A major theme of CDI is loose coupling. CDI does the following: 
 Decouples the server and the client by me...
CDI Overview 
Along with loose coupling, CDI provides strong typing by 
 Eliminating lookup using string-based names for ...
@javax.inject.Inject 
 In CDI kann fast jedes Objekt ein „Bean“ sein 
Bei CDI spricht man von einem Bean, wenn das Objekt...
CDI SCOPES 
In CDI bestimmt der Context den Lebenszyklus (Dauer und 
Sichtbarkeit) eines Objektes 
Der Entwickler konfigur...
CDI Scopes 
Normal Scopes 
 RequestScoped 
 ConversationScoped 
 SessionScoped 
 ApplicationScoped 
Am Injection Point...
@javax.enterprise.inject.Instance 
CDI - Programmatic Lookup: 
 Das Injizieren bei @Inject wird 
immer während der Erzeug...
@javax.enterprise.inject.Produces 
CDI – Producer 
 Um ein Objekt schon mit bestimmten 
Werte beispielsweise zu initialis...
@javax.inject.Named 
CDI Named Beans 
 Named Beans (@Named) 
ermöglichen den Zugriff auf die 
Beans innerhalb von 
Webanw...
Patterns 
http://de.wikipedia.org/wiki/Entwurfsmuster
Patterns 
• Singleton 
• Factory / Producer 
http://en.wikipedia.org/wiki/Factory_(object-oriented_programming) 
• Interce...
[Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
@INTERCEPTOR 
Mit Interceptoren können Querschnittsaufgabe realisiert werden. 
 Logging 
 Transaktionssteuerung 
 Secur...
[Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
[Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
[Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
TEST 
Ohne Container / Mit Container
http://arquillian.org
Nächste SlideShare
Wird geladen in …5
×

Java EE - FHWS 2014 - 6 CDI

669 Aufrufe

Veröffentlicht am

Java EE - FHWS 2014 - 6 CDI

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
669
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
24
Aktionen
Geteilt
0
Downloads
12
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Java EE - FHWS 2014 - 6 CDI

  1. 1. Java EE Full Stack for Business Applications  Contexts and Dependency Injection 
  2. 2. Referent: MATTHIAS REINING Technical Manager Insurance at RGI Deutschland GmbH blog: http://blog.matthias-reining.com twitter: https://twitter.com/MatthiasReining about.me: http://about.me/matthiasreining
  3. 3. CDI Contexts and Dependency Injection
  4. 4. DAS PROGRAMM  Die Spec  Idee, Historie  Der App Server  Containerkonzept  Paketierung (JAR, WAR, EAR)  Marktüberblick  Das Projekt  Entwicklung eines Beispielprojektes  IDE Settings, Oberflächen (Servlets, JSF), Business Logic (EJB), Persistence (JPA), Java EE Patterns (CDI), Web Services (JAX-RS)  Die Produktion  Buildmanagement (maven, Jenkins)  Deployment einer Java EE Anwendung in der Cloud bei einem PaaS Anbieter
  5. 5. BESTANDSAUFNAHME Wer hat mit CDI „bewusst“ bereits gearbeitet?
  6. 6. Context and Dependency Injection CDI standardisiert das Prinzip der Dependency Injection für Java, wonach die von einem Modul verwendeten Abhängigkeiten von außen dem Modul bekannt gemacht werden und im Modul lediglich als Abhängigkeit – Interface oder Klasse, jedenfalls keine konkrete Objektinstanz – definiert sind. Abhängig vom Kontext (beispielsweise in einer Standalone-Anwendung oder als Enterprise-Bean in einem Anwendungsserver, aber auch im Modultest oder Integrationstest) können diese Abhängigkeiten verschieden gesetzt werden [Quelle: http://de.wikipedia.org/wiki/Contexts_and_Dependency_Injection]
  7. 7. Context and Dependency Injection Contexts and Dependency Injection for Java EE (CDI) is one of several Java EE features that help to knit together the web tier and the transactional tier of the Java EE platform. CDI is a set of services that, used together, make it easy for developers to use enterprise beans along with JavaServer Faces technology in web applications. Designed for use with stateful objects, CDI also has many broader uses, allowing developers a great deal of flexibility to integrate various kinds of components in a loosely coupled but typesafe way. [Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic.htm#GIWHB]
  8. 8. CDI – Spec Reference Implementation: Weld Alternative: OpenWebBeans Konkrete Implementierung hängt vom Application Server ab!
  9. 9. CDI Tutorials / Nachschlagewerke  http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic.htm  http://de.slideshare.net/mojavelinux/jsr299-cdi-weld-the-future-of-seam- javaone-2010  http://blog.frankel.ch/cdi-an-overview-part-1 http://blog.frankel.ch/cdi-an-overview-part-2
  10. 10. nach JPA, JSF, EJB… wozu jetzt noch CDI??? Unsere Anwendung funzt doch bereits…
  11. 11. Gründe für CDI… CDI verbessert  die Erweiterungsfähigkeit, Wartbarkeit und  die Testbarkeit einer Anwendung durch die Möglichkeit zur  Entkopplung von Komponenten
  12. 12.  Contexts: This service enables you to bind the lifecycle and interactions of stateful components to well-defined but extensible lifecycle contexts.  Dependency injection: This service enables you to inject components into an application in a typesafe way and to choose at deployment time which implementation of a particular interface to inject. [Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic002.htm#GIWHL]
  13. 13. „Großes Kino“ Unbekanntes (CDI) mit noch mehr unbekannten (Seam, Guice, Spring) erklären… Direkteinspritzer Die Java Specification Requests 330 und 299 haben es kurz vor Toresschluss in die Java-EE-6-Spezifikation geschafft. Gemeinsam bilden sie die Grundlage für die typsichere Injektion von Abhängigkeiten. Die nicht unumstrittenen JSRs haben den Anspruch, die besten Funktionen aus etablierten Frameworks wie Seam, Guice und Spring zu vereinen und als Standard zu etablieren. [Quelle: Markus Eisele http://www.heise.de/ix/artikel/Direkteinspritzer-958569.html]
  14. 14. Dependency Injection (DI) ist ein Entwurfsmuster und dient in einem objektorientierten System dazu, die Abhängigkeiten zwischen Komponenten oder Objekten zu minimieren. Dependency Injection ist eine Anwendung des Prinzips der Inversion of Control (IoC), bezieht sich aber nur auf die Erzeugung und Initialisierung von Objekten. [Quelle: http://de.wikipedia.org/wiki/Dependency_Injection (Version vom 30. Januar 2012)]
  15. 15. DI Java Frameworks  Spring  EJB3.x  JBoss Seam (mittlerweile nur noch JBoss Weld)  Google Guice CDI, Standard für DI (JSR-299) Spezifikation, die im Rahmen der JEE6, mit Frameworks wie bspw. Seam Weld implementiert ist.
  16. 16. Der CDI Container  Der Container von CDI kann fast jegliche Instanzen von konkreten Java Klassen verwalten  Java Beans  Session Beans  Damit der CDI Container dies macht muss eine beans.xml vorhanden sein.  Die verwalteten Beans haben in einem Context eine Sichtbarkeit (Scope)
  17. 17. CDI Overview CDI provides the following services:  Integration with the Expression Language (EL), which allows any component to be used directly within a JavaServer Faces page or a JavaServer Pages page  The ability to decorate injected components  The ability to associate interceptors with components using typesafe interceptor bindings  An event-notification model  A web conversation scope in addition to the three standard scopes (request, session, and application) defined by the Java Servlet specification  A complete Service Provider Interface (SPI) that allows third-party frameworks to integrate cleanly in the Java EE 7 environment [Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic002.htm#GIWHL]
  18. 18. CDI Overview A major theme of CDI is loose coupling. CDI does the following:  Decouples the server and the client by means of well-defined types and qualifiers, so that the server implementation may vary  Decouples the lifecycles of collaborating components by  Making components contextual, with automatic lifecycle management  Allowing stateful components to interact like services, purely by message passing  Completely decouples message producers from consumers, by means of events  Decouples orthogonal concerns by means of Java EE interceptors [Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic002.htm#GIWHL]
  19. 19. CDI Overview Along with loose coupling, CDI provides strong typing by  Eliminating lookup using string-based names for wiring and correlations so that the compiler will detect typing errors  Allowing the use of declarative Java annotations to specify everything, largely eliminating the need for XML deployment descriptors, and making it easy to provide tools that introspect the code and understand the dependency structure at development time [Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/cdi-basic002.htm#GIWHL]
  20. 20. @javax.inject.Inject  In CDI kann fast jedes Objekt ein „Bean“ sein Bei CDI spricht man von einem Bean, wenn das Objekt per CDI gemangt wird  Beans werden von CDI instanziiert (CDI BeanManager oder Injection Point @Inject) Wir ein Bean mit new erzeugt, ist das Objekt nicht gemangt („Hollywood und so…“)  Der „Bean-Lifecycle“ wird context-bezogen gemanagt (später dazu mehr) @Inject private Message message;
  21. 21. CDI SCOPES In CDI bestimmt der Context den Lebenszyklus (Dauer und Sichtbarkeit) eines Objektes Der Entwickler konfiguriert den Scope eines Objektes:  @ApplicationScoped (Gesamtdauer der Applikation)  @SessionScoped (Dauer einer Benutzer Session)  @ConversationScoped (Dauer einer Konversation)  @RequestScoped (Dauer eines Requests)  @Dependent (Abhängig vom Lebenszyklus einer übergeordneten Bean) Mit dieser Information steuert der Context die Instanziierung und die Freigabe von Objekten
  22. 22. CDI Scopes Normal Scopes  RequestScoped  ConversationScoped  SessionScoped  ApplicationScoped Am Injection Point wird ein Proxy Objekt injiziert. Die Verlinkung auf das „echte“ Objekt findet erst beim ersten Zugriff auf das Objekt statt. Pseudo Scopes  DependentScoped  „Singleton“ Die Objekte werden direkt injiziert. Die Producer-Methode wird bei jedem Injection Point aufgerufen
  23. 23. @javax.enterprise.inject.Instance CDI - Programmatic Lookup:  Das Injizieren bei @Inject wird immer während der Erzeugung eines Objektes durchgeführt.  Dies kann manchmal allerdings nicht erwünscht sein. Der Lookup kann aber auch programmiert werden: @Inject Instance<Message> messageProducer; public Message getMessage() { return messageProducer.get(); }
  24. 24. @javax.enterprise.inject.Produces CDI – Producer  Um ein Objekt schon mit bestimmten Werte beispielsweise zu initialisieren, können spezielle Producer Methoden geschrieben werden.  Wenn man eine Liste injizieren will, benötigt man ebenfalls eine Producer Methode, da List eine JDK Klasse, die nicht direkt annotiert werden kann. public class UserController { @Produces public User getUser() { User user = new User(); user.setFirstname("Max"); user.setLastname("Mustermann"); return user; } }
  25. 25. @javax.inject.Named CDI Named Beans  Named Beans (@Named) ermöglichen den Zugriff auf die Beans innerhalb von Webanwendungen.  Der Bean kann über den Namen direkt in JSF / JSP Seiten per Expression Language verwendet werden. public class UserController { @Produces @Named public GPUser getUser() { User user = new User(); user.setFirstname("Max"); user.setLastname("Mustermann"); return user; } }
  26. 26. Patterns http://de.wikipedia.org/wiki/Entwurfsmuster
  27. 27. Patterns • Singleton • Factory / Producer http://en.wikipedia.org/wiki/Factory_(object-oriented_programming) • Interceptor • Decorators http://en.wikipedia.org/wiki/Decorator_pattern http://de.wikipedia.org/wiki/Decorator • Observers http://en.wikipedia.org/wiki/Observer_pattern http://de.wikipedia.org/wiki/Beobachter_%28Entwurfsmuster%29
  28. 28. [Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
  29. 29. @INTERCEPTOR Mit Interceptoren können Querschnittsaufgabe realisiert werden.  Logging  Transaktionssteuerung  Security
  30. 30. [Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
  31. 31. [Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
  32. 32. [Quelle: http://java.at/c/document_library/get_file?folderId=26186&name=DLFE-302.pdf]
  33. 33. TEST Ohne Container / Mit Container
  34. 34. http://arquillian.org

×