+ All Categories
Home > Technology > JSF & CDI - Dreamteam @Work

JSF & CDI - Dreamteam @Work

Date post: 26-Jun-2015
Category:
Upload: open-knowledge-gmbh
View: 655 times
Download: 1 times
Share this document with a friend
Popular Tags:
59
JSF & CDI: Dreamteam @Work Lars Röwekamp | CIO New Technologies @mobileLarson @_openknowledg e
Transcript
Page 1: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @WorkLars Röwekamp |  CIO New

Technologies

@mobileLarson@_openknowledge

Page 2: JSF & CDI - Dreamteam @Work

Der „Klassiker“

TX

Page 3: JSF & CDI - Dreamteam @Work

Java EE Web Framework

Java EE Service Framework

Java EE Persistence Framework

Der „Klassiker“

Page 4: JSF & CDI - Dreamteam @Work
Page 5: JSF & CDI - Dreamteam @Work

Wo liegt das Problem?

Page 6: JSF & CDI - Dreamteam @Work

Heterogene Lösungen

Page 7: JSF & CDI - Dreamteam @Work

eigene DI, Validierung, LifeCycle

Der „Klassiker“

eigene DI, Validierung, LifeCycle

eigene DI, Validierung, LifeCycle

Page 8: JSF & CDI - Dreamteam @Work

Technology drivesBusiness

Page 9: JSF & CDI - Dreamteam @Work

Der „Klassiker“

TX

Einen JSF ManagedBean

Controller, bitte.

Einen JSF ManagedBean

Controller, bitte.

Und für mich einen EJB Service.

Und für mich einen EJB Service.

Enitity X mit ID Y,wenn möglich.

Enitity X mit ID Y,wenn möglich.

UC: „Current User“ anzeigenUC: „Current User“ anzeigen

Page 10: JSF & CDI - Dreamteam @Work

Der „Klassiker“

String basiertes IoCString basiertes IoC

Infrastrutur InjectionInfrastrutur Injection

String basierte NaviString basierte Navi

Technology InjectionTechnology Injection

Page 11: JSF & CDI - Dreamteam @Work

Der „Klassiker“

Monster UseCaseMonster UseCase

String basierte Navi

Page 12: JSF & CDI - Dreamteam @Work

Der „Klassiker“

Session statt „Conversation“

Session statt „Conversation“

Scope MismatchScope Mismatch

String basierte Navi

Page 13: JSF & CDI - Dreamteam @Work
Page 14: JSF & CDI - Dreamteam @Work

Der „Klassiker“ revisted

Page 15: JSF & CDI - Dreamteam @Work

Der „Klassiker“ revisted

Page 16: JSF & CDI - Dreamteam @Work

CDI 1.0 ...aus 10.000 m

Page 17: JSF & CDI - Dreamteam @Work

CDI Kickstart

Page 18: JSF & CDI - Dreamteam @Work

> DI / IoC lite „Java EE without EJB“

> DI / IoC advanced LifeCycle Management

und Scoping

> DI / IoC eXtreme Typensicherheit und lose Koppelung

> DI / IoC open Extension-Mechanismus

CDI Features

Page 19: JSF & CDI - Dreamteam @Work

CDI Kickstart> LifeCycle Management & Scoping

> Scope sensitive Injection> Automatisches Cleanup

> Built-in Scopes> Request, Conversation, Session, Application

> Built-in Pseudo Scopes> Dependant, Singleton

Page 20: JSF & CDI - Dreamteam @Work
Page 21: JSF & CDI - Dreamteam @Work
Page 22: JSF & CDI - Dreamteam @Work
Page 23: JSF & CDI - Dreamteam @Work
Page 24: JSF & CDI - Dreamteam @Work

> KEIN Proxy und Default!

Page 25: JSF & CDI - Dreamteam @Work

CDI Kickstart> Typesafe Injection

> @Inject und #{...} via Type und Name > @Qualifer als zusätzliche Metadaten> @Inject @Current User loggedInUser

> @Stereotype als „Meta Annotation“> @Model entspricht @Named @RequestScoped

> @Alternative als „Switch“

Page 26: JSF & CDI - Dreamteam @Work

CDI Kickstart

Aufruf: @Inject @Current UserAufruf: @Inject @Current User

@Produces @Current User@Produces @Current User

@Produces @Current @RequestScoped @Named(“loggedInUser“)

Aufruf: #{loggedInUser}Aufruf: #{loggedInUser}

Page 27: JSF & CDI - Dreamteam @Work

CDI KickstartSelf-made Qualifier Self-made Qualifier

Page 28: JSF & CDI - Dreamteam @Work

> Interceptors > Realisierung orthogonaler Aufgaben („AOP“)> Around Advice unterbricht normalen Ablauf> Caching, Security, Transactions, Performance

> Events & Observer> CDI erlaubt Injection einer Event Source> Event Source „feuert“ eigenes Event> Observer „hört“ auf Event

CDI Kickstart> Lose Koppelung

Page 29: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @Work

Refactoring - Step 1

Page 30: JSF & CDI - Dreamteam @Work

Der „Klassiker“

String basiertes IoCString basiertes IoC

Infrastrutur InjectionInfrastrutur Injection

Scope MismatchScope Mismatch

String basierte NaviString basierte Navi

Technology InjectionTechnology Injection

Page 31: JSF & CDI - Dreamteam @Work

> via @Inject „technologieneutrale“ Injection> via @Qualifier und „Type“ typesafe Injection> via @Named Zugriff aus EL

CDI @Work> Refactoring - Step 1: CDI only

Page 32: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

String basierte Navi

Scope MismatchScope Mismatch

Page 33: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @Work

Refactoring - Step 2

Page 34: JSF & CDI - Dreamteam @Work

Der „Klassiker“Infrastruktur Injection in der

ViewInfrastruktur Injection in der

View

Page 35: JSF & CDI - Dreamteam @Work

> via @Named und @Produces Zugriff aus EL

CDI @Work> Refactoring - Step 2: View

Page 36: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

Page 37: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

fachliche Injection in der View

fachliche Injection in der View

Page 38: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @Work

Refactoring - Step 3

Page 39: JSF & CDI - Dreamteam @Work

Der „Klassiker“

Monster UseCaseMonster UseCase

String basierte Navi

Page 40: JSF & CDI - Dreamteam @Work

> via BeanValidation Logik-Validierung (sorry, OT)> via Event und @Observes UseCase Splittung

CDI @Work> Refactoring - Step 3: Split UseCase

Page 41: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

OT: Double usernamecheck via

BeanValidation

Page 42: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

OT: Double usernamecheck via

BeanValidation

Loosly coupled UseCase via Event

Loosly coupled UseCase via Event

Page 43: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored Event ConsumerEvent Consumer

Event ConsumerEvent Consumer

Page 44: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored Event ConsumerEvent Consumer

Event ConsumerEvent Consumer

Page 45: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @Work

Refactoring - Step 4

Page 46: JSF & CDI - Dreamteam @Work

Der „Klassiker“

TX

Page 47: JSF & CDI - Dreamteam @Work

> via @Interceptor UseCase Transaktion

CDI @Work> Refactoring - Step 4:

Page 48: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

Transactional UseCaseTransactional UseCase

Page 49: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

??Transactional

AnnotationTransactional

Annotation

Page 50: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactoredTransactional

InterceptorTransactional

Interceptor

Page 51: JSF & CDI - Dreamteam @Work

JSF & CDI: Dreamteam @Work

Refactoring - Step 5

Page 52: JSF & CDI - Dreamteam @Work

Der „Klassiker“

Session statt ConversationSession statt Conversation

Scope MismatchScope Mismatch

Page 53: JSF & CDI - Dreamteam @Work

> via @ConversationScoped Wizard

CDI @Work> Refactoring - Step 4:

Page 54: JSF & CDI - Dreamteam @Work

CDI @Work

Page 55: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

Page 56: JSF & CDI - Dreamteam @Work

Der „Klassiker“ refactored

TX

Page 57: JSF & CDI - Dreamteam @Work

Mis

Pieces

sing

Page 58: JSF & CDI - Dreamteam @Work

Bessere Conversationen

Bessere Conversationen

Built-in TransaktionenBuilt-in Transaktionen

weitere Scopesweitere Scopes

typesafe Navigationtypesafe Navigation

und vieles mehr ...und vieles mehr ...

Page 59: JSF & CDI - Dreamteam @Work

Missing Pieces


Recommended