SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Schlankheitskur
Lean Web Architecture mit JSF 2.0, CDI & Co.


Andreas Hartmann




06.09.2012
Agenda




                 Architecture Vision


                     Lean Webarchitecture


                     JSF meets CDI


                 Technical Solutions



06.09.2012   2   Lean Web Architecture mit JSF 2.0, CDI & Co.
Architecture Vision




06.09.2012   3   Lean Web Architecture mit JSF 2.0, CDI & Co.
Architecture Vision – 3 Layer Reflex




                                                            Over-
         Presentation Layer                             <<GUI>>
                                                         engineering




                                                                       <<Domain Model>>
                                               Boiler Plate
         Business Layer                           <<Service>>
                                                  Code




         Integration Layer                             Expensive
                                                    <<Adapter>>




06.09.2012   4   Lean Web Architecture mit JSF 2.0, CDI & Co.
Architecture Vision – Cross-Sectional Tasks




06.09.2012   5   Lean Web Architecture mit JSF 2.0, CDI & Co.
Architecture Vision – Technology Stack




06.09.2012   6   Lean Web Architecture mit JSF 2.0, CDI & Co.
Lean Webarchitecture – Tiny Applications

      Client Tier                                                       MiddleTier

                                 JSF
 jQuery
                                                    <<Presenter>>                    <<Adapter DB>>

                                                                                          Spring Data
        <<View>>                                                  CDI


                                                      <<Model>>                         << . . . >>




                                                                         Lombok
  Bean
Validation
                                                <<Domain Model>>




  06.09.2012   7   Lean Web Architecture mit JSF 2.0, CDI & Co.
Lean Webarchitecture – Large Scale Applications

   Client Tier                                                    MiddleTier

                       JSF
 jQuery
                                 <<Presenter>>                    <<Service>>   <<Adapter DB>>

                                                                                     Spring Data
     <<View>>                                              CDI


                                    <<Model>>                      <<. . . >>      << . . . >>




                                                       Lombok                      Doozer
  Bean
Validation
                                                <<Domain Model>>




  06.09.2012   8   Lean Web Architecture mit JSF 2.0, CDI & Co.
Warum CDI?

Dependency Injection
►   Container steuert Objekte und Abhängigkeiten
    > Instanziiert Objekte
    > Injiziert Abhängigkeiten zur Laufzeit
      (lose Kopplung)


►   Konfiguration über Annotations oder XML-Datei


►   Populär geworden durch das Spring Framework


►   Seit EJB3.0 auch in Java EE verfügbar
    > @EJB
    > @PersistenceUnit
    > @Resource

10.08.2012    Lean Web Architecture mit JSF 2.0, CDI & Co.
Warum CDI?

Dependency Injection mit CDI
►   Standardisiertes DI für Java (SE/EE)
    > Typsicherheit
    > Wiederverwendbarkeit
    > Testbarkeit
    > Flexiblität
    > Lifecycle „Awareness“


►   User Story driven injizieren




10.08.2012     Lean Web Architecture mit JSF 2.0, CDI & Co.
CDI Bausteine

CDI Bausteine
►   Typsicherheit
    > Stereotypes
    > Qualifier
    > Alternatives
►   Lose Kopplung
    > Interceptors
    > Decorator
    > Events
►   Sichtbarkeiten
    > Scopes
    > Lifecycle Awareness




10.08.2012    Lean Web Architecture mit JSF 2.0, CDI & Co.
CDI im Detail


        Facelets
         (JSF)

                                @ManagedBean
   #{ ... }                       @Named
                                   (JSF)


                       @Inject




                                                     User



                     PostBoxService
                                                            ...




10.08.2012         Lean Web Architecture mit JSF 2.0, CDI & Co.
CDI im Detail

CDI Managed Bean
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Named;
 import javax.inject.Inject;                                   #{userController}
 @Named("userController")
 @RequestScoped                                                gültig für Request
 public class UserController {

   @Inject                                                          POJO
   private UserService userService;

   private List<User> users;                                    Injection Point

   @PostConstruct
   private void init() {
     this.users = userService.findAllUsers();
   }




10.08.2012      Lean Web Architecture mit JSF 2.0, CDI & Co.
CDI im Detail

CDI Injection Points
►   Field Injection
    @Inject
    private UserService userService;


►   Constructor Injection
    @Inject
    public UserController(UserService userService) {
      this.userService = userService;
    }

►   Setter Injection
    @Inject
    public void setUserService(UserService userService) {
      this.userService = userService;
    }




10.08.2012     Lean Web Architecture mit JSF 2.0, CDI & Co.
User Story driven injizieren

Qualifier & Producer
►   Aktuellen Benutzer injizieren
    @Inject @Current private User user;


►   Fachlichkeit injizieren
    @Inject @Admin private List<User> administrators;
    @Inject @Editor private List<User> editors;


►   Infrastruktur injizieren
    @Inject @UserDB private EntityManager userDB;
    @Inject @ProductDB private EntityManager productDB;




10.08.2012    Lean Web Architecture mit JSF 2.0, CDI & Co.
User Story driven injizieren

Qualifier & Producer
import de.adesso.cdi.common.Current;

import javax.enterprise.inject.Produces;

@Named
@SessionScoped
public class Authenticationimplements Serializable {

 private User authenticatedUser;

 public String authenticate() {...}
                                                              EL: #{authenticatedUser}
 @Produces
 @Named("authenticatedUser")
 @Current
 public User getAuthenticatedUser() {
   return authenticatedUser;
 }



10.08.2012     Lean Web Architecture mit JSF 2.0, CDI & Co.
Fachlichkeit statt Infrastruktur injizieren

Qualifier & Producer
import de.adesso.cdi.common.Current;

public class CustomerService implements CustomerService {


 @Inject @Current
 private User currentUser;

 public void addCustomer(Customer customer) {
   customer.setCreator(currentUser);
   em.persist(customer);
 }




10.08.2012    Lean Web Architecture mit JSF 2.0, CDI & Co.
HTML 5


                                                            ►   Mit JSF2.2 auch
                                                                HTML5 Komponenten




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
Custom Components


                                                            ►   Technische Umsetzung
                                                                des Styleguides




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
jQuery


                                                            ►   freie, umfangreiche
                                                                JavaScript Bibliothek

                                                            ►   komfortable Möglichkeit
                                                                zur DOM Manipulation

                                                            ►   Erweiterbarkeit durch
                                                                Plugins (u.a.
                                                                DataTable)




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
Lombok


                                                            ►   Reduziert Boilerplate
                                                                Code durch Annoations
                                                                > @Getter, @Setter

                                                                > @ToString

                                                                > @HashCodeAndEqu
                                                                 als
                                                                > @Data

                                                                > ...

                                                            ►   Delombok
                                                                Funktionalität

                                                            ►   Eclipse Support




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
JSR 303: Bean Validation


                                                            ►   Standardisierung von
                                                                Constraints in Form
                                                                von Annotations

                                                            ►   Standardisierung des
                                                                Metadata API

                                                            ►   Integration anderer
                                                                Frameworks wie z.B.
                                                                JSF und JPA




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
Doozer


                                                            ►   Java Bean to
                                                                Java Bean Mapper




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
SpringData


                                                            ►   ermöglicht Zugriff auf
                                                                relationale und NoSQL
                                                                Datenbanken

                                                            ►   CDI Integration




10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.
10.08.2012   Lean Web Architecture mit JSF 2.0, CDI & Co.

Weitere ähnliche Inhalte

Was ist angesagt?

WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSOliver Hader
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierungos890
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEEguestc44b7b
 
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieCitrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieDigicomp Academy AG
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballastgedoplan
 
Didi rueetschi business intelligence power hour
Didi rueetschi business intelligence   power hourDidi rueetschi business intelligence   power hour
Didi rueetschi business intelligence power hourDigicomp Academy AG
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 

Was ist angesagt? (9)

WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierung
 
What's new in sql server 2012
What's new in sql server 2012What's new in sql server 2012
What's new in sql server 2012
 
Bi what's new
Bi what's newBi what's new
Bi what's new
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-StrategieCitrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
Citrix Day 2014: BKW - Der Weg einer Enterprise-Mobility-Management-Strategie
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballast
 
Didi rueetschi business intelligence power hour
Didi rueetschi business intelligence   power hourDidi rueetschi business intelligence   power hour
Didi rueetschi business intelligence power hour
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 

Ähnlich wie Lean web architecture mit jsf 2.0, cdi & co.

BATbern41 Die Evolution zu Microservices
BATbern41 Die Evolution zu MicroservicesBATbern41 Die Evolution zu Microservices
BATbern41 Die Evolution zu MicroservicesBATbern
 
Cloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und LoesungenCloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und LoesungenDaniel Steiger
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der CloudTorsten Fink
 
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch Salzburg
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch SalzburgSlides zum Impulsreferat: HCL UDP - DNUG Stammtisch Salzburg
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch SalzburgDNUG e.V.
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UIgedoplan
 
Die besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDie besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDieter Ziegler
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradleadesso AG
 
Ein Blick in die Zukunft von in-STEP RED und objectiF RM
Ein Blick in die Zukunft von in-STEP RED und objectiF RMEin Blick in die Zukunft von in-STEP RED und objectiF RM
Ein Blick in die Zukunft von in-STEP RED und objectiF RMmicroTOOL GmbH
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Martin Kliehm
 
2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als CacheDaniel Fisher
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesAndré Fleischer
 
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellen
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellenLightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellen
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellenAlexander Galkin
 
Ivory Soa Suite
Ivory Soa SuiteIvory Soa Suite
Ivory Soa SuitePredrag61
 

Ähnlich wie Lean web architecture mit jsf 2.0, cdi & co. (20)

CDI
CDICDI
CDI
 
BATbern41 Die Evolution zu Microservices
BATbern41 Die Evolution zu MicroservicesBATbern41 Die Evolution zu Microservices
BATbern41 Die Evolution zu Microservices
 
Cloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und LoesungenCloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und Loesungen
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 
Citrix Day 2014: APPDNA
Citrix Day 2014: APPDNACitrix Day 2014: APPDNA
Citrix Day 2014: APPDNA
 
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch Salzburg
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch SalzburgSlides zum Impulsreferat: HCL UDP - DNUG Stammtisch Salzburg
Slides zum Impulsreferat: HCL UDP - DNUG Stammtisch Salzburg
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UI
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
Die besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-AppsDie besten 10 JavaScript Frameworks für moderne Web-Apps
Die besten 10 JavaScript Frameworks für moderne Web-Apps
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
Ein Blick in die Zukunft von in-STEP RED und objectiF RM
Ein Blick in die Zukunft von in-STEP RED und objectiF RMEin Blick in die Zukunft von in-STEP RED und objectiF RM
Ein Blick in die Zukunft von in-STEP RED und objectiF RM
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)
 
2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit Microservices
 
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellen
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellenLightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellen
LightSwitch und SQL Azure: Datengetriebene Anwendungen in Rekordzeit erstellen
 
Ivory Soa Suite
Ivory Soa SuiteIvory Soa Suite
Ivory Soa Suite
 
Infrastructure Solution Day | Core
Infrastructure Solution Day | CoreInfrastructure Solution Day | Core
Infrastructure Solution Day | Core
 

Mehr von adesso AG

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)adesso AG
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPadesso AG
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teamsadesso AG
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AGadesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!adesso AG
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktischadesso AG
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Deliveryadesso AG
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?adesso AG
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaftenadesso AG
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013adesso AG
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)adesso AG
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Sucheadesso AG
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?adesso AG
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architektenadesso AG
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktikenadesso AG
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS adesso AG
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5adesso AG
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engineadesso AG
 
Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterpriseadesso AG
 
10 Hinweise für Architekten
10 Hinweise für Architekten10 Hinweise für Architekten
10 Hinweise für Architektenadesso AG
 

Mehr von adesso AG (20)

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teams
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktisch
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Delivery
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaften
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Suche
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architekten
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktiken
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engine
 
Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterprise
 
10 Hinweise für Architekten
10 Hinweise für Architekten10 Hinweise für Architekten
10 Hinweise für Architekten
 

Lean web architecture mit jsf 2.0, cdi & co.

  • 1. Schlankheitskur Lean Web Architecture mit JSF 2.0, CDI & Co. Andreas Hartmann 06.09.2012
  • 2. Agenda Architecture Vision Lean Webarchitecture JSF meets CDI Technical Solutions 06.09.2012 2 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 3. Architecture Vision 06.09.2012 3 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 4. Architecture Vision – 3 Layer Reflex Over- Presentation Layer <<GUI>> engineering <<Domain Model>> Boiler Plate Business Layer <<Service>> Code Integration Layer Expensive <<Adapter>> 06.09.2012 4 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 5. Architecture Vision – Cross-Sectional Tasks 06.09.2012 5 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 6. Architecture Vision – Technology Stack 06.09.2012 6 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 7. Lean Webarchitecture – Tiny Applications Client Tier MiddleTier JSF jQuery <<Presenter>> <<Adapter DB>> Spring Data <<View>> CDI <<Model>> << . . . >> Lombok Bean Validation <<Domain Model>> 06.09.2012 7 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 8. Lean Webarchitecture – Large Scale Applications Client Tier MiddleTier JSF jQuery <<Presenter>> <<Service>> <<Adapter DB>> Spring Data <<View>> CDI <<Model>> <<. . . >> << . . . >> Lombok Doozer Bean Validation <<Domain Model>> 06.09.2012 8 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 9. Warum CDI? Dependency Injection ► Container steuert Objekte und Abhängigkeiten > Instanziiert Objekte > Injiziert Abhängigkeiten zur Laufzeit (lose Kopplung) ► Konfiguration über Annotations oder XML-Datei ► Populär geworden durch das Spring Framework ► Seit EJB3.0 auch in Java EE verfügbar > @EJB > @PersistenceUnit > @Resource 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 10. Warum CDI? Dependency Injection mit CDI ► Standardisiertes DI für Java (SE/EE) > Typsicherheit > Wiederverwendbarkeit > Testbarkeit > Flexiblität > Lifecycle „Awareness“ ► User Story driven injizieren 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 11. CDI Bausteine CDI Bausteine ► Typsicherheit > Stereotypes > Qualifier > Alternatives ► Lose Kopplung > Interceptors > Decorator > Events ► Sichtbarkeiten > Scopes > Lifecycle Awareness 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 12. CDI im Detail Facelets (JSF) @ManagedBean #{ ... } @Named (JSF) @Inject User PostBoxService ... 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 13. CDI im Detail CDI Managed Bean import javax.enterprise.context.RequestScoped; import javax.inject.Named; import javax.inject.Inject; #{userController} @Named("userController") @RequestScoped gültig für Request public class UserController { @Inject POJO private UserService userService; private List<User> users; Injection Point @PostConstruct private void init() { this.users = userService.findAllUsers(); } 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 14. CDI im Detail CDI Injection Points ► Field Injection @Inject private UserService userService; ► Constructor Injection @Inject public UserController(UserService userService) { this.userService = userService; } ► Setter Injection @Inject public void setUserService(UserService userService) { this.userService = userService; } 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 15. User Story driven injizieren Qualifier & Producer ► Aktuellen Benutzer injizieren @Inject @Current private User user; ► Fachlichkeit injizieren @Inject @Admin private List<User> administrators; @Inject @Editor private List<User> editors; ► Infrastruktur injizieren @Inject @UserDB private EntityManager userDB; @Inject @ProductDB private EntityManager productDB; 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 16. User Story driven injizieren Qualifier & Producer import de.adesso.cdi.common.Current; import javax.enterprise.inject.Produces; @Named @SessionScoped public class Authenticationimplements Serializable { private User authenticatedUser; public String authenticate() {...} EL: #{authenticatedUser} @Produces @Named("authenticatedUser") @Current public User getAuthenticatedUser() { return authenticatedUser; } 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 17. Fachlichkeit statt Infrastruktur injizieren Qualifier & Producer import de.adesso.cdi.common.Current; public class CustomerService implements CustomerService { @Inject @Current private User currentUser; public void addCustomer(Customer customer) { customer.setCreator(currentUser); em.persist(customer); } 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 18. HTML 5 ► Mit JSF2.2 auch HTML5 Komponenten 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 19. Custom Components ► Technische Umsetzung des Styleguides 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 20. jQuery ► freie, umfangreiche JavaScript Bibliothek ► komfortable Möglichkeit zur DOM Manipulation ► Erweiterbarkeit durch Plugins (u.a. DataTable) 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 21. Lombok ► Reduziert Boilerplate Code durch Annoations > @Getter, @Setter > @ToString > @HashCodeAndEqu als > @Data > ... ► Delombok Funktionalität ► Eclipse Support 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 22. JSR 303: Bean Validation ► Standardisierung von Constraints in Form von Annotations ► Standardisierung des Metadata API ► Integration anderer Frameworks wie z.B. JSF und JPA 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 23. Doozer ► Java Bean to Java Bean Mapper 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 24. SpringData ► ermöglicht Zugriff auf relationale und NoSQL Datenbanken ► CDI Integration 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
  • 25. 10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.