27
Schlankheitskur Lean Web Architecture mit JSF 2.0, CDI & Co. Andreas Hartmann adesso AG

Andreas Hartmann - Herbstcampus 2020

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Andreas Hartmann - Herbstcampus 2020

SchlankheitskurLean Web Architecture mit JSF 2.0, CDI & Co.

Andreas Hartmannadesso AG

Page 2: Andreas Hartmann - Herbstcampus 2020

SchlankheitskurLean Web Architecture mit JSF 2.0, CDI & Co.

Andreas Hartmann

05.09.2012

Page 3: Andreas Hartmann - Herbstcampus 2020

Agenda

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

Architecture Vision

Lean Webarchitecture

JSF meets CDI

Technical Solutions

Page 4: Andreas Hartmann - Herbstcampus 2020

Architecture Vision

05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.3

Page 5: Andreas Hartmann - Herbstcampus 2020

Architecture Vision – 3 Layer Reflex

05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.4

Presentation Layer

Business Layer <<Service>>

<<GUI>>

Integration Layer <<Adapter>>

<<D

om

ain

Mo

del

>>

Over-engineering

Boiler Plate Code

Expensive

Page 6: Andreas Hartmann - Herbstcampus 2020

Architecture Vision – Cross-Sectional Tasks

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

Page 7: Andreas Hartmann - Herbstcampus 2020

Architecture Vision – Technology Stack

05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.6

Page 8: Andreas Hartmann - Herbstcampus 2020

Lean Webarchitecture – Tiny Applications

05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.7

Client Tier

<<View>>

<<Adapter DB>>

<< . . . >>

MiddleTier

<<Presenter>>

<<Model>>

<<Domain Model>>

Spring Data

jQuery

Bean Validation

Bean Validation

JSF

CDI

Lombok

Page 9: Andreas Hartmann - Herbstcampus 2020

Lean Webarchitecture – Large Scale Applications

05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.8

Client Tier

<<View>>

MiddleTier

<<Domain Model>>

jQuery

<<Presenter>> <<Adapter DB>><<Service>>

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

JSF

Spring Data

Doozer

CDI

Bean Validation

Bean Validation

Lombok

Page 10: Andreas Hartmann - Herbstcampus 2020

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.

Page 11: Andreas Hartmann - Herbstcampus 2020

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.

Page 12: Andreas Hartmann - Herbstcampus 2020

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.

Page 13: Andreas Hartmann - Herbstcampus 2020

CDI im Detail

10.08.2012

Facelets(JSF)

@ManagedBean(JSF)@Named

PostBoxService

#{ ... }

@Inject

User

...

Lean Web Architecture mit JSF 2.0, CDI & Co.

Page 14: Andreas Hartmann - Herbstcampus 2020

CDI im Detail

CDI Managed Bean

10.08.2012

#{userController}#{userController}

Injection PointInjection Point

gültig für Requestgültig für Request

import javax.enterprise.context.RequestScoped;import javax.inject.Named;import javax.inject.Inject;

@Named("userController")@RequestScopedpublic class UserController {

@Injectprivate UserService userService;

private List<User> users;

@PostConstructprivate void init() {

this.users = userService.findAllUsers();}

POJOPOJO

Lean Web Architecture mit JSF 2.0, CDI & Co.

Page 15: Andreas Hartmann - Herbstcampus 2020

CDI im Detail

CDI Injection Points

► Field Injection

► Constructor Injection

► Setter Injection

10.08.2012

@Injectprivate UserService userService;

@Injectpublic UserController(UserService userService) {

this.userService = userService;}

@Injectpublic void setUserService(UserService userService) {

this.userService = userService;}

Lean Web Architecture mit JSF 2.0, CDI & Co.

Page 16: Andreas Hartmann - Herbstcampus 2020

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.

Page 17: Andreas Hartmann - Herbstcampus 2020

User Story driven injizieren

Qualifier & Producer

10.08.2012

import de.adesso.cdi.common.Current;

import javax.enterprise.inject.Produces;

@Named@SessionScopedpublic class Authenticationimplements Serializable {

private User authenticatedUser;

public String authenticate() {...}

@Produces@Named("authenticatedUser")@Currentpublic User getAuthenticatedUser() {

return authenticatedUser;}

EL: #{authenticatedUser}EL: #{authenticatedUser}

Lean Web Architecture mit JSF 2.0, CDI & Co.

Page 18: Andreas Hartmann - Herbstcampus 2020

Fachlichkeit statt Infrastruktur injizieren

Qualifier & Producer

10.08.2012

import de.adesso.cdi.common.Current;

public class CustomerService implements CustomerService {

@Inject @Currentprivate User currentUser;

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

}

Lean Web Architecture mit JSF 2.0, CDI & Co.

Page 19: Andreas Hartmann - Herbstcampus 2020

HTML 5

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

►Mit JSF2.2 auch HTML5 Komponenten

Page 20: Andreas Hartmann - Herbstcampus 2020

Custom Components

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

►Technische Umsetzung des Styleguides

Page 21: Andreas Hartmann - Herbstcampus 2020

jQuery

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

►freie, umfangreiche JavaScript Bibliothek

►komfortable Möglichkeit zur DOM Manipulation

►Erweiterbarkeit durch Plugins (u.a. DataTable)

Page 22: Andreas Hartmann - Herbstcampus 2020

Lombok

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

►Reduziert BoilerplateCode durch Annoations

>@Getter, @Setter

>@ToString

>@HashCodeAndEquals

>@Data

> . . .

►DelombokFunktionalität

►Eclipse Support

Page 23: Andreas Hartmann - Herbstcampus 2020

JSR 303: Bean Validation

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

►Standardisierung von Constraints in Form von Annotations

►Standardisierung des Metadata API

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

Page 24: Andreas Hartmann - Herbstcampus 2020

Doozer

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

►Java Bean toJava Bean Mapper

Page 25: Andreas Hartmann - Herbstcampus 2020

SpringData

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

►ermöglicht Zugriff auf relationale und NoSQLDatenbanken

►CDI Integration

Page 26: Andreas Hartmann - Herbstcampus 2020

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

Page 27: Andreas Hartmann - Herbstcampus 2020

Vielen Dank!

Andreas Hartmannadesso AG