Java EE - FHWS 2014 - 6 CDI

807 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
807
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
7
Aktionen
Geteilt
0
Downloads
13
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

×