lean web architecture mit jsf 2.0, cdi & co
DESCRIPTION
Vortrag von Andreas Hartmann, Principal Software Architect bei adesso, auf dem Herbstcampus 2012 zu ‚Lean Web Architecture mit JSF 2.0 & CDI‘. Die Präsentation vermittelt, wie man in kürzester Zeit komplexe Anwendungen entwickeln kann – auf schlankem Weg.TRANSCRIPT
![Page 1: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/1.jpg)
10.04.2023
SchlankheitskurLean Web Architecture mit JSF 2.0, CDI & Co.
Andreas Hartmann
![Page 2: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/2.jpg)
10.04.2023 2
Agenda
Lean Web Architecture mit JSF 2.0, CDI & Co.
Architecture Vision
Lean Webarchitecture
JSF meets CDI
Technical Solutions
![Page 3: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/3.jpg)
10.04.2023 3
Architecture Vision
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 4: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/4.jpg)
10.04.2023 4
Architecture Vision – 3 Layer Reflex
Lean Web Architecture mit JSF 2.0, CDI & Co.
Presentation Layer
Business Layer <<Service>>
<<GUI>>
Integration Layer <<Adapter>>
<<
Do
mai
n M
od
el>
>
Over-engineering
Boiler Plate Code
Expensive
![Page 5: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/5.jpg)
10.04.2023 5
Architecture Vision – Cross-Sectional Tasks
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 6: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/6.jpg)
10.04.2023 6
Architecture Vision – Technology Stack
Lean Web Architecture mit JSF 2.0, CDI & Co.
JSF
Doozer
jQuery
Bean Validation
Spring Data
CDI
![Page 7: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/7.jpg)
Lean Webarchitecture – Tiny Applications
10.04.2023 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
JSF
CDI
Lombok
![Page 8: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/8.jpg)
Lean Webarchitecture – Large Scale Applications
10.04.2023 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
Lombok
![Page 9: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/9.jpg)
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 10: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/10.jpg)
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 11: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/11.jpg)
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 12: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/12.jpg)
CDI im Detail
10.08.2012
Facelets(JSF)
@ManagedBean(JSF)@Named
PostBoxService
#{ ... }
@Inject
User
...
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 13: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/13.jpg)
CDI im Detail
CDI Managed Bean
10.08.2012
#{userController}
Injection Point
gültig für Request
import javax.enterprise.context.RequestScoped;import javax.inject.Named;import javax.inject.Inject;
@Named("userController")@RequestScopedpublic class UserController {
@Inject private UserService userService; private List<User> users;
@PostConstruct private void init() { this.users = userService.findAllUsers(); }
POJO
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 14: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/14.jpg)
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 15: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/15.jpg)
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 16: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/16.jpg)
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") @Current public User getAuthenticatedUser() { return authenticatedUser; }
EL: #{authenticatedUser}
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 17: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/17.jpg)
Fachlichkeit statt Infrastruktur injizieren
Qualifier & Producer
10.08.2012
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); }
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 18: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/18.jpg)
HTML 5
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Mit JSF2.2 auch HTML5 Komponenten
![Page 19: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/19.jpg)
Custom Components
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Technische Umsetzung des Styleguides
![Page 20: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/20.jpg)
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 21: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/21.jpg)
Lombok
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Reduziert Boilerplate Code durch Annoations
>@Getter, @Setter
>@ToString
>@HashCodeAndEquals
>@Data
> . . .
►Delombok Funktionalität
►Eclipse Support
![Page 22: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/22.jpg)
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 23: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/23.jpg)
Doozer
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Java Bean to Java Bean Mapper
![Page 24: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/24.jpg)
SpringData
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►ermöglicht Zugriff auf relationale und NoSQL Datenbanken
►CDI Integration
![Page 25: Lean web architecture mit jsf 2.0, cdi & co](https://reader036.vdocument.in/reader036/viewer/2022062617/54d11fc84a7959964d8b4705/html5/thumbnails/25.jpg)
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.