andreas hartmann - herbstcampus 2020
TRANSCRIPT
![Page 1: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/1.jpg)
SchlankheitskurLean Web Architecture mit JSF 2.0, CDI & Co.
Andreas Hartmannadesso AG
![Page 2: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/2.jpg)
SchlankheitskurLean Web Architecture mit JSF 2.0, CDI & Co.
Andreas Hartmann
05.09.2012
![Page 3: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/4.jpg)
Architecture Vision
05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.3
![Page 5: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/6.jpg)
Architecture Vision – Cross-Sectional Tasks
05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.5
![Page 7: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/7.jpg)
Architecture Vision – Technology Stack
05.09.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.6
![Page 8: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/10.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 11: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/11.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 12: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/12.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 13: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/13.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 14: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/15.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 16: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/16.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 17: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/17.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")@Currentpublic User getAuthenticatedUser() {
return authenticatedUser;}
EL: #{authenticatedUser}EL: #{authenticatedUser}
Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 18: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/20.jpg)
Custom Components
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Technische Umsetzung des Styleguides
![Page 21: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/21.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 22: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/23.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 24: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/24.jpg)
Doozer
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
►Java Bean toJava Bean Mapper
![Page 25: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/26.jpg)
10.08.2012 Lean Web Architecture mit JSF 2.0, CDI & Co.
![Page 27: Andreas Hartmann - Herbstcampus 2020](https://reader036.vdocuments.mx/reader036/viewer/2022062408/62ac3aaca599f475df16d7e3/html5/thumbnails/27.jpg)
Vielen Dank!
Andreas Hartmannadesso AG