36
Programmieren im JAST-Stack Am Beispiel meiner Bachelorarbeit erläutert

Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

Programmieren im JAST-Stack

Am Beispiel meiner Bachelorarbeit erläutert

Page 2: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

2

Inhalt

Worum ging es in meiner Bachelorarbeit?

Was ist der JAST-Stack?

Welche Spring Projekte habe ich benutzt?

Wie konnte Angular mich unterstützen?

Wie sieht das Ganze dann aus?

Fazit

Page 3: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

3

Worum ging es in meiner Bachelorarbeit?

Page 4: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

4

Thema meiner Bachelorarbeit

Die Implementierung eines

Urlaubsantragsmanagementsystems

zur Evaluierung der technischen

Konzepte von Spring Boot

Ein System um die Vergabe von

Urlaub zu managen

Page 5: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

5

Aktivitätsdiagramm für den Ablauf eines Urlaubsantrages

Page 6: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

6

Was soll das Urlaubsantragsmanagementsystem können?

Login mit 4 Rollen unterstützen

User, Vorgesetzter, Personaler,

Admin

Einreichen und Beantworten von

Urlaubsanträgen

Mitarbeiter und Abteilungen

verwalten

Diagramme zur Übersicht

Page 7: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

7

Was ist der JAST-Stack?

Page 8: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

8

Der JAST-Stack

J : Jakarta EE

A : Angular

S : SQL

T : Tomcat

Page 9: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

9

Der JAST-Stack

J : Jakarta EE -> Backend

A : Angular -> Frontend

S : SQL -> relationales DB-System

T : Tomcat -> Web-Server des Backends

Begriff stammt von der GFI

Daher bei Google nicht auffindbar

Verwendet in meiner BA

JT => Spring Boot

A => Angular 6

S => MySQL

Page 10: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

10

Welche Spring Projekte habe ich benutzt?

Page 11: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

11

Wiederholung

Das Spring-Framework besteht aus

vielen Projekten

> 22 Main-Projects + Community

Projects

Problem:

Auswahl der Versionen bei diesen

Abhängigkeiten

Lösung:

Ist Spring Boot

Page 12: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

12

Spring Boot

Spring Boot wählt

kontextabhängig die sinnvollsten

Abhängigkeiten und konfiguriert

diese automatisch

Stellt konfigurierten Tomcat-Server

zur Verfügung

Anwendung direkt lauffähig

Page 13: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

13

Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7

Autorisierung / Authentifizierung: Spring Security 5.0.6

Container: Tomcat 8.5.31 (embedded) auf Port 80

Logging: Logback 1.2.3 (Log4J-Nachfolger) via slf4j

(Logging-Facade)

JSON-Binding: Jackson 2.9.6

Datenhaltung: JPA in einer H2 Datenbank

View-Engine: Thymeleaf 3.0.9

YAML-Verarbeitung: SnakeYAML 1.19

Validierung: Validation API / Hibernate Validator 6.0.10

Alles konfiguriert und „production ready“

Ich sage: „Sichere MVC-Anwendung mit Spring Boot 2“ Spring Boot sagt:

Page 14: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

15

Spring Data JPA

Baut auf Jakarta EEs JPA auf

(Java Persistance API)

Hilft beim Erstellen von Repositories

Page 15: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

16

Spring Data

Abfrage von Daten über:

Standard mit SQL

Query builder mechanism

Page 16: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

17

Spring Data

Abfrage von Daten über:

Standard mit SQL

Query builder mechanism

Methode brauch den

Präfix „find….By,

read…By oder get…By“

Page 17: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

18

Spring Security

Kümmert sich um die

Authentifizierung und

Autorisierung

Page 18: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

19

Spring Security

Kümmert sich um die

Authentifizierung und

Autorisierung

Page 19: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

20

Spring Security

Laden der Benutzer inklusive Rollen aus Datenbank

Page 20: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

22

Spring Web

Full-Stack Web Entwicklung mit Tomcat und Spring MVC

Hilft bei der Implementierung einer Rest Schnittstelle

Eine Rest Schnittstelle kann Requests empfangen

Page 21: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

23

Spring Web

Page 22: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

24

Einstellungen

application.properties

Page 23: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

25

DI in Spring (Dependency Injection)

Ohne DI

DI in Java

DI in Spring

Speicherung in einer Bean

Page 24: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

26

Wie konnte Angular mich unterstützen?

Page 25: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

27

Angular

SPA (Single Page Application)

Dynamischen Laden von HTML-

Fragmenten und Daten

Verwendet TypeScript, HTML, CSS

UI-Libs

Z.B. Angular Material,

PrimeNG

Page 26: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

28

Aufbau von Angular

Komponenten und Templates

definieren die Angular View

Ein Decorator an einer Komponente

fügt Metadaten hinzu. Mit einem

Zeiger auf das assoziierende

Template, z. B. templateUrl,

template, providers…

Direktiven und Bindungen in

Komponente <-> Templates

modifizieren Views, basierend auf

Programm Data und Logik

DI stellt den Komponenten Services

bereit.

Page 27: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

29

DI in Angular (Dependency Injection)

Zu injizierende Klasse

Klasse (Service) mit

@Injectable() erstellen

Klasse die Injektion erhält

Service in Provider übergeben

Page 28: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

30

Angular

HttpClient

In Angular 4 neu überarbeitet

Unterstützt beim Senden von

Requests

Page 29: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

31

Angular

Routing

Page 30: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

32

Angular

Routing

Validierung

Page 31: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

33

Angular

Angular CLI (Command Line Interface)

Hilft bei:

Code-Generierung

Erstellen von Komponenten,

Services, …

Starten der Anwendung

Bauen der Anwendung

Etc…

Page 32: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

34

Wie sieht das Ganze dann aus?

Page 33: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

35

Live-Demo

Page 34: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

36

Fazit

Der JAST-Stack ist für die Erstellung

einer solchen Anwendung zu empfehlen

Dabei die Empfehlung Spring statt

Jakarta EE zu verwenden

Die Einarbeitung in Spring und die

vielen Projekte ist anfangs schwierig

Erfahrenen Jakarta EE Entwicklern

dürfte dies deutlich einfacher fallen

Spring sowie Angular gut Dokumentiert

Angular.io ist sehr gut für die

Einarbeitung

Tutorial: Tour of Heroes gibt ersten

Einblick

Page 35: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

37

Quellen und Quellcode

https://spring.io/

https://angular.io/

https://blog.angular.io/version-7-of-angular-cli-prompts-virtual-scroll-drag-

and-drop-and-more-c594e22e7b8c

https://docs.spring.io/spring-data/data-

commons/docs/1.6.1.RELEASE/reference/html/repositories.html

https://material.angular.io/

https://www.primefaces.org/primeng/#/

https://bitbucket.int.w3l.de/scm/jast/urlaubsantrag.git

Page 36: Programmieren im JAST-Stack - W3L · 13 Runtime: Spring Boot 2.0.3 und Spring Core 5.0.7 Autorisierung / Authentifizierung: Spring Security 5.0.6 Container: Tomcat 8.5.31 (embedded)

38

Vielen Dank! Haben Sie Fragen?

Slupikowski, Christian

Software-Entwickler

Tel. +49 (231) 61 804 - 163

Mail: [email protected]