rest-services ruck-zuck fertig04/2014 forms, java 7, jetty 9 0.8 03/2015 jax rs 2.0, jersey 2.x ....

22
REST-Services ruck-zuck fertig Microservices mit Dropwizard entwickeln Alexander Schwartz msg systems ag

Upload: others

Post on 05-Oct-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig Microservices mit Dropwizard entwickeln

Alexander Schwartz msg systems ag

Page 2: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig mit Dropwizard

3

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015

Application Server Evolution 1 5

Dropwizard 2 10

Beispielanwendung 3 14

Vorteile Drowizard 4 19

Page 3: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Mein Sponsor und Arbeitgeber – msg systems ag

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 4

1980 gegründet

mehr als 5.000 Kollegen

653 Mio € Umsatz 2014

23 Länder

in 13 Städten

in Deutschland präsent

Page 4: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Wer ich bin – Alexander Schwartz

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 5

12 Jahre Java

7 Jahre PL/SQL

7 Jahre

Absatzfinanzierung

3,5 Jahre Direktbank

1 Frau

2 Kinder

443 gefundene

Geocaches

@ahus1de

Page 5: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig mit Dropwizard

6

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015

Application Server Evolution 1 5

Dropwizard 2 10

Beispielanwendung 3 14

Vorteile Drowizard 4 19

Page 6: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Application Server Evolution

Traditionelle JEE Anwendungen brauchen einen Container

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 7

Container

WAR/EAR

Database

Browser

Page 7: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Application Server Evolution

Best Practices für Application Server

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 8

#1: Eine Anwendung pro Container

Vorteile:

• Anwendungsspezifische Konfiguration für Datenbank, Treiber, SSL, Thread Pools, …

• Neustart des Containers betrifft nur eine Anwendung

• Redeployment der Anwendung mit Neustart möglich

#2: Ein Container pro Anwendung

Vorteile:

• Konfiguration kann beim Deployment der Anwendung angepasst werden

• Anwendung läuft genau auf der getesteten Container-Version

• Anwendung bekommt genau die gewünschte Container-Version und JEE-Version

Page 8: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Application Server Evolution

Wechselseitige Abhängigkeit zwischen Anwendung und Container

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 9

Folgen:

• Nicht genutzt Features in traditionellen Containern

• Unnötig komplizierte Prozesse für Continuous Integration / Continuous Delivery

„Is JEE Dead?“ (Brian O‘Neill 03/2008)

„JEE is dead“ (Brian O‘Neill 10/2012)

„Applikationsserver sind tod“ (Eberhardt Wolff 05/2014)

Page 9: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Application Server Evolution

Application Server

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 10

Lösung: Kombiniere Anwendung mit Container

Effekt:

• Alles in einem JAR: einfache Installation und Staging

• Schneller Start: angenehme Entwicklung

# migrate database

java -jar application.jar db migrate config.yml

# start application

java -jar application.jar server config.yml

Dropwizard Spring Boot

Vert.x

Page 10: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig mit Dropwizard

11

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015

Application Server Evolution 1 5

Dropwizard 2 10

Beispielanwendung 3 14

Vorteile Drowizard 4 19

Page 11: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Dropwizard

Entstehung von Dropwizard

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 12

Yammer migrierte von einer monolithischen Rails-Anwendung zu modularen Dropwizard-

Microservices.

Version Datum Ereignis

0.1 12/2011 Initiales Release

06/2012 Microsoft kauft Yammer

0.7 04/2014 Forms, Java 7, Jetty 9

0.8 03/2015 JAX RS 2.0, Jersey 2.x

Page 12: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Dropwizard

Dropwizard Komponenten

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 13

• Jetty für HTTP

• Jersey für REST

• Jackson für JSON

• Metrics für Monitoring

„Freunde“: Hibernate Validator, JDBI, Hibernate, Liquibase, Freemarker, …

Page 13: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Dropwizard

Dropwizard Komponenten

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 14

Dropwizard

+ Anwendung

Datenbank

Browser

YAML Konfigurationsdatei

Page 14: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig mit Dropwizard

15

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015

Application Server Evolution 1 5

Dropwizard 2 10

Beispielanwendung 3 14

Vorteile Drowizard 4 19

Page 15: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Beispielanwendung

(Ausgewählte) Ideen des Domain Driven Designs

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 16

• Fachliche Domäne (Daten und Funktionalität) wird als Aggregates, Entities und Value Objects

implementiert

• Funktionalität wird ggf. zusätzlich Services implementiert

• Fachlicher Code ist nicht von technischem Framework-Code abhängig

• Daten werden in Repositories abgelegt

• Interfaces des Repositories ist Teil der fachlichen Domäne,

Implementierung des Repositories ist Teil der außenliegenden Schichten

• Umliegende Systeme werden über Adapter angebunden

und können einen Anticorruption Layer beinhalten

Literatur:

Eric Evans: “Domain-Driven Design: Tackling Complexity in Software," 2004

Vaughn Vernon: “Implementing Domain-Driven Design”, 2013

Page 16: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Beispielanwendung

Dropwizard Komponenten

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 17

Database

Browser

Application

Domain

Core

Framework Dropwiz.

http://fideloper.com/hexagonal-architecture

Legende:

Aufruf

IoC / DI

Repository

Adapter

Page 17: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Beispielanwendung

Demo

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 18

Zeit für Programmcode!

Page 18: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Beispielanwendung

Dropwizard Komponenten

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 19

Bereich Core Add-On Extra

Jersey / JAX 2.0 REST X

JDBI, Hibernate, Liquibase Datenbank X

Freemarker, Mustache View X

Metrics Monitoring X

AssertJ, Basisklassen Test Test X

Google Guice Dependency

Injection

X

Swagger Dokumentation X

Lombok Entwicklung X

JBoss Keycloak Sicherheit X

Arquillian Graphene GUI Test X

Shazam Gwen BDD Test X

Page 19: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

REST-Services ruck-zuck fertig mit Dropwizard

20

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015

Application Server Evolution 1 5

Dropwizard 2 10

Beispielanwendung 3 14

Vorteile Drowizard 4 19

Page 20: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Vorteile Dropwizard

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 21

• Dropwizard bringt viele Standardkomponenten mit

• Chance auf gleichartige, kleine Anwendungen

• Viele Wahlmöglichkeiten – junges, aktives Ökosystem

• Gute Dokumentation für die ersten Schritte

• Erprobte Komponenten

• Metriken integriert

• Wiederverwendung von JEE Knowhow

• Einfaches Deployment als JAR Datei

• Gute Vorbereitung für Tests

@ahus1de

Page 21: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

Links

Alexander Schwartz / Microservices mit Dropwizard / Herbstcampus Nürnberg 2015 / © msg systems 03.09.2015 22

Dropwizard Homepage

http://dropwizard.io/

Eric Evans: Domain Driven Design Quickly

http://www.infoq.com/minibooks/domain-driven-design-quickly

Vaughn Vernon: Implementing Domain-Driven Design

https://vaughnvernon.co/?page_id=168

Guice für Dropwizard

https://github.com/HubSpot/dropwizard-guice

Swagger für Dropwizard

https://github.com/federecio/dropwizard-swagger

Lombok

http://projectlombok.org/

JBoss Keycloak

http://keycloak.jboss.org/

Keycloak Dropwizard Integration

https://github.com/ahus1/keycloak-dropwizard-integration

@ahus1de

Arquillian Graphene

http://arquillian.org/modules/graphene-extension/

Shazam Gwen

https://github.com/shazam/gwen

Gwen: BDD-Framework für lesbare und refaktorisierbare Tests

in Java

http://heise.de/-2520872

https://github.com/ahus1/bdd-examples/

JGiven: Behavior-Driven Development in Plain Java

http://jgiven.org/

Page 22: REST-Services ruck-zuck fertig04/2014 Forms, Java 7, Jetty 9 0.8 03/2015 JAX RS 2.0, Jersey 2.x . Dropwizard Dropwizard Komponenten ... • Jersey für REST • Jackson für JSON •

.consulting .solutions .partnership

Alexander Schwartz

Principal IT Consultant

+49 171 5625767

[email protected]

@ahus1de

msg systems ag (Headquarters)

Robert-Buerkle-Str. 1, 85737 Ismaning

Germany

www.msg-systems.com