SlideShare ist ein Scribd-Unternehmen logo
1 von 208
Downloaden Sie, um offline zu lesen
Building (a) Legacy
Wir bauen heute die Altlasten von Morgen
@FrankPrechtel
Twitter @eleneokamika
Software Qualität nach ISO 9126
angestaubt oder noch immer heißer Sch ... ?“
Mike Horn
Consultant & Software Architekt, pentacor GmbH
Quelle: https://de.wikipedia.org/wiki/ISO/IEC_9126  ist in der Norm ISO/IEC 25000 aufgegangen
Softwarequalitäten
Wie haben wir Systeme gebaut?
My Online Shop Monolith
Checkout &
Payment
Artikel-
Verwaltung
Bestell-
Verwaltung
Kunden-
verwaltung
Logistik
Management
…
Heute bauen wir domänen-orientiert und damit
auch verteilt …
ArtikelSystem
Checkout&
Payment
Bestellungen
System
LogistikSystem
KundenSystem
My Online Shop
SCS SCS SCS SCS SCS
Quelle: https://de.wikipedia.org/wiki/ISO/IEC_9126  ist in der Norm ISO/IEC 25000 aufgegangen
Challenge bei verteilten Systemen:
Erfüllung einiger Softwarequalitäten
Fehlertoleranz – Separation of Failure Units
My Online Shop
SCS SCS SCS SCS SCS
“Separation of Failure Units”  verhindert Seiteneffekte
Fehlertoleranz – Separation of Failure Units
My Online Shop
SCS SCS SCS SCS SCS
Self Containment  Separation of Failure Unit
Slide 08
Fehlertoleranz – Loose Coupling
ArtikelSystem
Checkout&
Payment
Bestellungen
System
LogistikSystem
KundenSystem
My Online Shop
Prevent Cascading Failures
SCS SCS SCS SCS SCS
Slide 08
Fehlertoleranz – Loose Coupling
ArtikelSystem
Checkout&
Payment
Bestellungen
System
LogistikSystem
KundenSystem
My Online Shop
ACLACL ACL
ACL - Anti Corruption Layer
SCS SCS SCS SCS SCS
Slide 08
Fehlertoleranz – Loose Coupling
ArtikelSystem
Checkout&
Payment
Bestellungen
System
LogistikSystem
KundenSystem
My Online Shop
Event Synchronisation
ACLACL ACL
Event Synchronisation über:
• Queue/Stream
• http feeds
• RESTful API
SCS SCS SCS SCS SCS
Slide 08
Fehlertoleranz – Loose Coupling
ArtikelSystem
Checkout&
Payment
Bestellungen
System
LogistikSystem
KundenSystem
My Online Shop
(RESTful) API as a Business Function
ACL ACL
SCS SCS SCS SCS SCS
Fehlertoleranz – Loose Coupling
Quelle: https://medium.com
Fehlertoleranz – Fail fast …
Quelle: https://medium.com
… and fail early
• Integration Tests
• Resilience Tests
• Consumer Driven Contracts
Änderbarkeit – Analysierbarkeit verteilter
Systeme
Netflix Micro Service Architecture at runtime
Analysierbarkeit: Monitoring eines SCSArtikelSystem
Quelle: https://redhat.com
SCS
Analysierbarkeit von Geschäftsprozessen
My Online Shop
Business Process 1
Business Process 2
Business Process …
Business Process n
Analysierbarkeit: Monitoring Business Processes
Business
Metrics
Business
Metrics
Business
Metrics
Business
Metrics
Business
Metrics
Analysierbarkeit: Traceability pro SystemArtikelSystem
Quelle: https://elastic.co
Analysierbarkeit: Traceability in Business
Processes
Fazit: Software Qualität in verteilten Systemen
„Kaniko - Docker Images bauen
ohne einen Docker Daemon“
by Yannik Neubert
„Problem“?
„Problem“?
Slide 02
Pipeline Docker-Container
Pipeline Docker-Container
Docker Daemon
Docker Build
„Docker-in-Docker“
Inception
Dockerception
Es gibt kein Problem?
Doch!
• Docker-in-Docker
erfordert privileged mode
Möglicher Zugangspunkt
für Angreifer
Lösung:
• In GoogleContainerTools enthalten
• Ermöglicht Docker-Build ohne einen Docker
Daemon
Pod
1. Dockerfile
• Standard, muss nicht für Kaniko angepasst werden
2. Build Context
Azure Blob Storage
Google Cloud Storage
3. Destination
• Zielpfad für fertiges Image
• Docker registry, bspw. Docker Hub, Amazon ECR
4. Registry-Credentials
(wenn destination private registry)
Done!
 kubectl apply -f
Restrictions
• Keine Windows-Container
• Kaniko-Executable kann nicht in anderem Image
verwendet werden
About me...
• Name: Manuel Heinzig
• Alter: 30
• Werdegang:
• Kindergarten  Mittelschule  Abitur
• Master Informatik @TU Chemnitz
• Wiss. Mitarbeiter/Dozent @HS Mittweida
Bereich Medieninformatik und Interaktives Entertainment
(aka Videospiele und alles drum herum)
Der Erklärbär
• „Manuel machts Protokoll, da wird das
wenigstens nicht so schwurbelig“
• „HiWi, komm mal mit zum Firmengespräch.
Nicht, dass ich mit denen dort wieder
aneinander vorbei rede.“
Dinge Erklären
Beispiel: Worte
• „Objektorientiert“
Beispiel: Worte
• „Objektorientiert“
Mein Job
• Vorlesungsreihe „Wissenschaft und Wirtschaft“:
• 4-8 Studis
(Studiengang Medieninformatik und Interaktives
Entertainment,
80% Kreative, 20% Programmierer)
• Informatisches Projekt eines (externen)
Stakeholders
• Erste praktische Erfahrungen
Mein Job
Studi (+), Stakeholder (+)
• Stakeholder: Entwicklerfirma für
Versicherungssoftware
• Ansprechpartner: Standortleiter Chemnitz +
Technischer Leiter
• Zielstellung: „Macht unsere
Versicherungssoftware hübsch. 3D, VR,
alles was euch einfällt.“
Studi (+), Stakeholder (+)
Projektverlauf
• Studi-Team organisiert sich selbst
• Studis interviewen Stakeholder für
Anforderungen
• Zwischenpräsentationen mit
lauffähigem MVP + Feedback
Studi (+), Stakeholder (+)
Fazit
• Nach Jahr 1: lauffähiger, dokumentierterPrototyp
• Nach Jahr 2 (heute): nutzeroptimierte, polished
Software mit Basic-Featureset
Software wird demnächst in Testeinsatz gehen
• 2 ehem. Studis bei Firma in Festanstellung
• 7 Praxis-/Abschlussarbeiten
Studi (-), Stakeholder (+)
• Stakeholder: „Die Verwaltung“ einer öffentlichen
Einrichtung
• Ansprechpartner: Informatisch versierter Mitarbeiter
der Einrichtung mit Ahnung von Verwaltungsprozessen
• Zielstellung: Ein Tool zur nachvollziehbaren
Budgetberechnung (Personal- und Projektplanung)
Studi (-), Stakeholder (+)
Projektverlauf
• 2/7 Studis erscheinen zum ersten Termin
• Thema ist “langweilig”
• Technische Hilfe des Stakeholders
“unverständlich”
Studi (-), Stakeholder (+)
Fazit
• Konzeptdokumente Copy-Pasted aus den
ersten 5 Googletreffern
• Programmfortschritt ausschließlich durch
Ansprechperson
• Projekt wird mit 2/7 Studis beendet, Rest
”macht das im nächsten Jahr nochmal”
Studi (-), Stakeholder (-)
• Stakeholder: Forschungsmitarbeiter der Hochschule mit
wenig Lehrerfahrung/Studikontakt
• Ansprechpartner: ebendieser Mitarbarbeiter
• Zielstellung: Performante und anschauliche Visualisierung
„biologischer Graphen“ für Dissertation des Mitarbeiters
Studi (-), Stakeholder (-)
Projektverlauf I
• Stakeholder definiert unverständliche technische
Anforderungen
• Programmierer des Studiteams fragen mit ihrem
Halbwissen nach
• Designer sind thematisch vollkommen raus
• Stakeholder nach Vorstellungsrunde skeptisch,
“ob ihm die Studis was bringen”
betrachtet Projekt in der Folge als “sinnlosen
Aufwand”
Studi (-), Stakeholder (-)
Projektverlauf II
• Studis nehmen Projekt als “nur technisch und programmierlastig” wahr
• Programmierer finden Aufgabe “zu schwer”
• Artists: “wir haben nichts zu tun, sind fertig mit allem”
Studi (+-), Stakeholder ??
• Stakeholder: Teilbereich eines großen
Medienproduzenten
• Ansprechpartner:
Geschäftsführer, Entwicklungsingeneur, IT-
Chef
• Zielstellung: Tool zur grafisch anschaulichen
Planung der Gerätedispo
Studi (+-), Stakeholder ??
• Stakeholder hat “eine Entwicklungsabteilung,
die große Hoffnungen in die Studis legt”
• Die drei Ansprechpartner diskutieren im Meeting
vor Studis noch über Kernziele
Projektabbruch mitten im Semester
Fazit I
• Schlüssel zum Erfolg (bei der Arbeit mit Studis):
• Vorher überlegen, was Studis in etwa leisten sollen
• Kleine Fehlschläge einplanen und nutzen
Fazit II
• Kooperationsprojekte mit Ausbildungsstätten...
• ...sind KEIN billiger Ersatz für eine in-House FuE-Abteilung
• ...bieten billiges Scouting für möglichen Nachwuchs
• ...sind die richtige Spielwiese fürs Ausprobieren
experimenteller Ideen
• Erfahrung: Kommunikationserfolg == Projekterfolg
Manifeste für Nerds
https://www.askapache.com/hacking/hacker-
manifesto/
https://www.askapache.com/hacking/hacker-
manifesto/
https://www.reactivemanifesto.org/de
Wir glauben, dass die Anforderungen, die heute an Computersysteme gestellt
werden, nur zu erfüllen sind durch die gleichzeitige Ausrichtung an vier
Qualitäten, deren Wert bislang nur einzeln betrachtet wurde: Systeme müssen
stets antwortbereit, widerstandsfähig, elastisch und nachrichtenorientiert sein.
Dann nennen wir sie reaktive Systeme.
SOA-Manifest
Service-Orientierung ist ein Paradigma, das den Rahmen für unser Handeln vorgibt.
Service-orientierte Architektur (SOA) ist ein Architekturtyp, der aus der Anwendung von
Service-Orientierung entsteht.
Wir haben Service-Orientierung angewendet, um Organisationen zu helfen, kontinuierlich
nachhaltigen Geschäftswert zu liefern
mit höherer Agilität und Kosteneffizienz und im Einklang mit den sich ändernden fachlichen
Bedürfnissen.
Im Rahmen unserer Arbeit sind wir zu folgender Priorisierung gekommen:
Geschäftswert über technische Strategie
Strategische Ziele über projektspezifischen Nutzen
Immanente Interoperabilität über maßgeschneiderte Integration
Gemeinsam verwendete Services über zweckgebundene Implementierungen
Flexibilität über Optimierung
Evolutionäre Vervollkommnung über Streben nach anfänglicher Perfektion
Das heißt, obwohl wir die Werte auf der rechten Seite schätzen, sind uns die Werte auf der
linken Seite wichtiger.
23.10.2009
http://soa-manifest.de/
The Modern DevOps Manifesto
1. Everything is code — Infrastructure, configuration, actions, and changes to production —
can all be code. When everything is code, everything needs DevOps.
2. Establish “trusted” resources — Enterprise assets such as images, templates, policies,
manifests, configurations that codify standards should be governed (with a pipeline)
3. Lean into Least Privilege — New roles are emerging: Cluster Engineer, Image Engineer, Site
Reliability Engineer…define roles with just enough access to the “trusted” resources they
access to get their job done, mitigating risk, limiting exposure.
4. Everything is observable — Lay the foundation for AI for Pipelines by collecting and
organizing data from an instrumented pipeline.
5. Expand your definition of “everything” — DevOps is not just for application code. DevOps
can apply to machine learning model (MLOps or ModelOps), integration (API lifecycle),
infrastructure and configuration (GitOps), and other domains. Expand your stakeholders to
include Security and auditors…the next evolution of breaking down silos.
https://medium.com/ibm-garage/the-modern-
devops-manifesto-f06c82964722
http://www.proclib.de/
https://web.archive.org/web/20120114152614/http:
//opencloudmanifesto.org/
https://manifesto.softwarecraftsmanship.org/
http://themindfulaimanifesto.org/
https://refactoringmanifesto.org/
Manifesto for Minimalist Software Engineers - Minifesto
http://minifesto.org/
http://www.growingagile.co.za/2015/04/the-testing-
manifesto/
http://re18.org/assets/downloads/workshops/RE4
SuSy/RE4SuSy18Shola.pdf
DevSecOps Manifesto
https://www.devsecops.org/
A Proposal for an Antifragile Software Manifesto
P. 1 – Our highest priority is to satisfy the customer by building a non-linear, proactive, and self adaptive
system
P. 2 – We welcome changing scenarios where unexpected events (Black Swans) are the real paradigm
shifting entities
P. 3 – We deliver assuring embedded and adaptive fault tolerance
P. 4 – All stakeholders, and the broader environment, lead the antifragile organization
P. 5 – Build antifragile projects around motivated, skilled and open minded people. Give them the
environment and support they need, and trust them to get the job done
P. 6 – The most efficient and effective method of building an antifragile organization is building on honest,
open and transparent communication
P. 7 – Continuous exposure to faults and automatic fixing is the primary measure
P. 8 – An antifragile organization promotes a context aware environment. The stakeholders should be able to
maintain a system indefinitely
P. 9 – Continuous attention to technical excellence, reality, redundancy
P. 10 – Error loving - the art of learning to be antifragile – is essential
P. 11 – Antifragile architectures emerge from self – organizing, context aware teams
P. 12 – At regular intervals, the developing team reflects about the context situation, on how to become more
effective, then tunes and adjusts its behavior accordingly
https://www.sciencedirect.com/science/article/
pii/S1877050916302290
The Practical Nerd manifesto
1) Cool is not neccessarily useful.
2) Software is never, ever going to be “dead.”
3) Free isn’t forever.
4) Features aren’t products in the long run.
5) Bubbles happen.
https://www.geekwire.com/2011/practical-nerd-
practical-nerd-manifesto/
https://badassprogrammers.com/manifesto
https://www.kimmok.com/the-manifesto-manifesto
Manifesto for Agile Software Development
http://agilemanifesto.org/
BizOps Manifesto
https://www.bizopsmanifesto.org/
Robot Operations Manifesto
https://robops.org/manifesto
Nerds with People Skills Manifesto
http://nerdswithpeopleskills.com/manifesto/
The DevOps Manifesto
https://www.opsview.com/resources/devops/blog/devops-manifesto
DevOps for ML Manifesto
https://dotscience.com/manifesto/
Digital Manifesto
https://www.digital-manifesto.org/
Team Manifesto
https://www.linkedin.com/pulse/team-manifesto-foundation-every-barry/
Scaling Manifesto
https://scalingmanifesto.org/
Vagrant
Gibt es virtuelles Leben neben Docker ?
Kay Thriemer
https://hub.docker.com
Dockerfile:
FROM ubuntu
RUN apt-get update
RUN apt-get install –y
nginx
CMD [“echo”,”Image
created”]
• 2010 startete Mitchell Hashimoto
• November 2012 Gründung von HashiCorp
• Umfangreiche Documentation https://www.vagrantup.com/docs
• Vorkonfigurierte VM– Boxen
• https://app.vagrantup.com/boxes/search
Initialisierung der Umgebung
vagrant init hashicorp/bionic64
Vagrantfile:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
end
Konfiguration:
• Provider, z.B. Virtualbox
• Betriebssystem
• Hauptspeicher
• Netzwerk
• Shared folders
• Provisioning
Provisioning von Vagrant
Provisioner:
• File
• Shell
• Ansible
• Chef
• Docker
• Puppet
• Salt
Beispielkonfiguration mit Shell Provisioner
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install -y ansible
SHELL
end
Beispielkonfiguration mit Shell Provisioner
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install -y ansible
SHELL
end
Shell Provisioner mit Script
config.vm.provision "shell", path: "installUsefulTools.sh"
#!/bin/bash
echo " ##### Install Useful Tools #####"
##
sudo apt-get update
sudo apt-get install -y openssl
sudo apt-get install -y firefox
sudo apt-get install -y gedit
sudo apt-get install -y geany
sudo apt-get install -y vim-gtk3
sync
Provisioning mit Ansible
playbook.yml
---
- hosts: all
become: yes
tasks:
- name: Install packages
apt:
name:
- ntpdate
- nmap
state: latest
cache_valid_time: 3600
Provisioning mit Ansible
Vagrantfile:
config.vm.provision :ansible do |ansible|
ansible.playbook = "playbook.yml"
end
Weitere Konfigurationsmöglichkeiten
• Networking
• Forwarded Ports
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
End
• Öffentliches Netzwerk
Vagrant.configure("2") do |config|
config.vm.network "public_network"
end
• Privates Netzwerks
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
end
Weitere Konfigurationsmöglichkeiten
• Synced Folders zwischen Host und Guest
Vagrant.configure("2") do |config|
config.vm.synced_folder "src/", "/srv/website"
End
• Unterstützte Typen:
• VirtualBox shared folders
• NFS
• SMB
• rsync
Vagrant starten
• vagrant up – erzeugt und konfiguriert die VM
• vagrant halt – stoppt die VM
• vagrant destroy – löscht die VM
• vagrant status – Status der VM
• vagrant ssh – SSH in gestartete VM
• https://www.vagrantup.com/docs/cli
Vorstellung
(erste Folie ohne automatischen Folienwechsel)
Wo ist die Zeit hin?
PhotobyAnnieSprattonUnsplash
Ablenkung, Fokus
PhotobyMarvinMeyeronUnsplash
Leistungsnachweis Projekt
PhotobyAgêBarrosonUnsplash
Stundenabrechnung/
Leistungsnachweise
Timeular Device
Timeular Device Seitenbelegung
Timeular Device Tracking
Timeular Desktop App Notes
Timeular App
Timeular Kalender
Timeular Report
Ablenkung/Unterbrechung
PhotobyPhotoBoardsonUnsplash
Automatisierung
PhotobyNeONBRANDonUnsplash
Timeular API
Existierende Tools
Timeular CLI Code
Timeular CLI
Timeular CLI Continue
Projekt
GitHub Contribute
PhotobyJamesPondonUnsplash
Dominik Hirt
Software [Architekt | Entwickler | Coach]
Wermsdorf / Oschatz / Hiddensee
@todo42 dominik@todo42.de
Keine großen Freunde ?
1995
2001
1997
Alternative to EJB2 entity beans
Provides an SQL inspired language (HQL)
for writing SQL-like queries
=> Warum nicht gleich SQL ?
[https://de.wikipedia.org/wiki/Hibernate_(Framework)]
HQL is the object-oriented version of SQL
Criteria Queries are provided as an
object-oriented alternative to HQL
It generates database independent queries
=> Genau wie SQL-92
[https://de.wikipedia.org/wiki/Hibernate_(Framework)]
�
EclipseLink
MyBatis
TopLink
JPA / JPQL
Spring Data
Derived Query Methods
Hibernate / HQL
JIRA / JQL
Java ORM Mapper
Impedance Mismatch
[https://dev.to/tinazhouhui]
Google Trends
[© 2018 Dominik Hirt]
#epicfail
Derived Query MethodsCriteria API
Die Lösung
No SQL Strings
Type Safety
DB Schema matching
SQL compliant
(not inspired by)
Fluent API
Dynamic SQL
JOOQ
Java Object Oriented Query
https://www.jooq.org
Die Lösung
Disclaimer: leider keinerlei DB connections zu Lukas Eder / Data Geekery GmbH
JOOQ
Java Object Oriented Query
DSL query
builder
Code
generation
Typesafe
SQL
Database
First
JOOQ
Hurra, ein compile
error
Type Safety
@Inject DSLContext jooq;
@GET("/songs/{id} ")
public List<SongDTO> loadAll(@PathParam("id") Long id) {
return jooq.select(SONG.ID, SONG.TITLE, ARTIST.NAME)
.from(SONG)
.join(ARTIST).on(ARTIST.ID.eq(SONG.ARTIST))
.where(SONG.ID.eq(id))
.orderBy(SONG.title.desc())
.fetchInto(SongDTO.class);
}
@GET("/songs")
public List<Songs> loadAll() {
return jooq.selectFrom(SONG).fetchInto(Song.class);
}
SQL compliant
(not inspired by)
DB Schema matching
DB Migration
(liquibase/flyway)
JOOQ
code generation
compile & test
maven / gradle
Pipelines / CI / CD
No SQL Strings
CommonTableExpression<Record3<BigDecimal, Long, String>> sollZeilen = name(SOLL)
.fields(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName(),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID.getName(),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName())
.as(select(coalesce(sum(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG), 0).cast(SQLDataType.DECIMAL),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID, BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG)
.from(BUCHUNGSSYSTEM_BUCHUNGSSATZ)
.where(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLKONTONUMMER.eq("1230"))
.groupBy(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID,
BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG));
CommonTableExpression<Record3<BigDecimal, Long, String>> habenZeilen = name(HABEN)
.fields(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName(),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID.getName(),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName())
.as(select(coalesce(sum(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG), 0).cast(SQLDataType.DECIMAL),
BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID,
BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG).from(BUCHUNGSSYSTEM_BUCHUNGSSATZ)
.where(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENKONTONUMMER.eq("1230"))
.groupBy(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID,
BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG));
final Field<BigDecimal> totals = DSL.decode()
.when(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName()).isNull(),
habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG)
.cast(SQLDataType.DECIMAL.precision(19, 2)))
.when(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName()).isNull(),
sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG).multiply(-1)
.cast(SQLDataType.DECIMAL.precision(19, 2)))
.otherwise(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG).multiply(-1)
.plus(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG))
.cast(SQLDataType.DECIMAL.precision(19, 2)));
return jooq.with(sollZeilen).with(habenZeilen)
.select(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID.getName()),
sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName()), totals.as("total"))
.from(habenZeilen)
.rightJoin(sollZeilen)
.on(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID)
.eq(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID)))
.where(val(BigDecimal.valueOf(0)).notEqual(totals))
.fetchInto(CommissionSammelkonto.class);
Dynamic SQL
JOOQ kann noch mehr
lots of generator options
Database
First
return values on
save/update
(e.g. generated values)
DAOs
lots of fetching options
(lists, maps)
simple CRUD
with generated records
use liquibase changelogs
POJOs
(no need for JPA entities)
Große Freunde !
Agile wohnt nicht weit von 

agile

Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night

Weitere ähnliche Inhalte

Was ist angesagt?

Holistische Sicherheit für Microservice Architekturen
Holistische Sicherheit für Microservice ArchitekturenHolistische Sicherheit für Microservice Architekturen
Holistische Sicherheit für Microservice ArchitekturenQAware GmbH
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteQAware GmbH
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsQAware GmbH
 
Kaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment RoadmapKaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment RoadmapStephan Kaps
 
DevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der SchieneDevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der SchieneVorname Nachname
 
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldEnterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldQAware GmbH
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020Stephan Kaps
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
 
Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzQAware GmbH
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererKubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererQAware GmbH
 
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesContinuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesTobias Schneck
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Mario-Leander Reimer
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.QAware GmbH
 
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEuropeDer Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEuropeMario-Leander Reimer
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!Tobias Schneck
 
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?Aarno Aukia
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesQAware GmbH
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...Marc Müller
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes QAware GmbH
 

Was ist angesagt? (20)

Holistische Sicherheit für Microservice Architekturen
Holistische Sicherheit für Microservice ArchitekturenHolistische Sicherheit für Microservice Architekturen
Holistische Sicherheit für Microservice Architekturen
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
Kaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment RoadmapKaps - Continuous Deployment Roadmap
Kaps - Continuous Deployment Roadmap
 
DevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der SchieneDevOps - Mehr Geschwindigkeit auf der Schiene
DevOps - Mehr Geschwindigkeit auf der Schiene
 
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldEnterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue Schwarz
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererKubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container Orchestrierer
 
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesContinuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
Serverless Survival Guide
Serverless Survival GuideServerless Survival Guide
Serverless Survival Guide
 
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEuropeDer Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?
Wir arbeiten in der Cloud – eine Herausforderung für das IT Management?
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
 

Ähnlich wie Softwerkskammer Chemnitz Special Pecha Kucha Night

Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Andreas Wissel
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudAarno Aukia
 
Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013superflomo
 
Agilität im Systems Engineering – geht das?
Agilität im Systems Engineering – geht das?Agilität im Systems Engineering – geht das?
Agilität im Systems Engineering – geht das?HOOD Group
 
Lean development 04
Lean development 04Lean development 04
Lean development 04SuperB2
 
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DNUG e.V.
 
Scrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für ProgrammiererScrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für ProgrammiererTobias Schlüter
 
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AG
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AGCCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AG
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AGCommunardo GmbH
 
Lean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungLean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungSuperB2
 
Agilität und Qualitätskriterien in der Softwareentwicklung
Agilität und Qualitätskriterien in der SoftwareentwicklungAgilität und Qualitätskriterien in der Softwareentwicklung
Agilität und Qualitätskriterien in der Softwareentwicklungrico.fritzsche
 
Large Scale Scrum (LeSS) als Organisations-Design-Framework
Large Scale Scrum (LeSS) als Organisations-Design-FrameworkLarge Scale Scrum (LeSS) als Organisations-Design-Framework
Large Scale Scrum (LeSS) als Organisations-Design-FrameworkJosef Scherer
 
SharePointCommunity.ch SharePoint Lösungen für die Zukunft
SharePointCommunity.ch SharePoint Lösungen für die ZukunftSharePointCommunity.ch SharePoint Lösungen für die Zukunft
SharePointCommunity.ch SharePoint Lösungen für die ZukunftDavid Schneider
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDevDay Dresden
 
Agile und Projektmanagement - Kein entweder-oder sondern anders
Agile und Projektmanagement - Kein entweder-oder sondern andersAgile und Projektmanagement - Kein entweder-oder sondern anders
Agile und Projektmanagement - Kein entweder-oder sondern andersSteffen Thols
 
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Pierluigi Pugliese
 
The new job of qa was ein quality engineer zukünftig können muss
The new job of qa   was ein quality engineer zukünftig können mussThe new job of qa   was ein quality engineer zukünftig können muss
The new job of qa was ein quality engineer zukünftig können mussraezz
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsAndreas Schreiber
 

Ähnlich wie Softwerkskammer Chemnitz Special Pecha Kucha Night (20)

Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
 
Agents of D.E.V.O.P.S
Agents of D.E.V.O.P.SAgents of D.E.V.O.P.S
Agents of D.E.V.O.P.S
 
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die CloudApplikationsmodernisierung: Der Weg von Legacy in die Cloud
Applikationsmodernisierung: Der Weg von Legacy in die Cloud
 
Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013
 
Agilität im Systems Engineering – geht das?
Agilität im Systems Engineering – geht das?Agilität im Systems Engineering – geht das?
Agilität im Systems Engineering – geht das?
 
Lean development 04
Lean development 04Lean development 04
Lean development 04
 
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
DACHNUG50 Erfolgreiche Digitalisierung Notes Anwendungen mit Low Code L”sung ...
 
Scrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für ProgrammiererScrum als agiles Vorgehensmodell für Programmierer
Scrum als agiles Vorgehensmodell für Programmierer
 
Xidra 2016 DevOps
Xidra 2016 DevOpsXidra 2016 DevOps
Xidra 2016 DevOps
 
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AG
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AGCCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AG
CCD 2012: Wissensmanagement @MPS - Sören Krasel, Daimler AG
 
Lean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungLean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-Entwicklung
 
Agilität und Qualitätskriterien in der Softwareentwicklung
Agilität und Qualitätskriterien in der SoftwareentwicklungAgilität und Qualitätskriterien in der Softwareentwicklung
Agilität und Qualitätskriterien in der Softwareentwicklung
 
Large Scale Scrum (LeSS) als Organisations-Design-Framework
Large Scale Scrum (LeSS) als Organisations-Design-FrameworkLarge Scale Scrum (LeSS) als Organisations-Design-Framework
Large Scale Scrum (LeSS) als Organisations-Design-Framework
 
SharePointCommunity.ch SharePoint Lösungen für die Zukunft
SharePointCommunity.ch SharePoint Lösungen für die ZukunftSharePointCommunity.ch SharePoint Lösungen für die Zukunft
SharePointCommunity.ch SharePoint Lösungen für die Zukunft
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
 
Agile und Projektmanagement - Kein entweder-oder sondern anders
Agile und Projektmanagement - Kein entweder-oder sondern andersAgile und Projektmanagement - Kein entweder-oder sondern anders
Agile und Projektmanagement - Kein entweder-oder sondern anders
 
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)Large-Scale Product Owner @ XPDays Germany (5.10.2023)
Large-Scale Product Owner @ XPDays Germany (5.10.2023)
 
The new job of qa was ein quality engineer zukünftig können muss
The new job of qa   was ein quality engineer zukünftig können mussThe new job of qa   was ein quality engineer zukünftig können muss
The new job of qa was ein quality engineer zukünftig können muss
 
CDI
CDICDI
CDI
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 

Softwerkskammer Chemnitz Special Pecha Kucha Night

  • 1. Building (a) Legacy Wir bauen heute die Altlasten von Morgen @FrankPrechtel
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 41.
  • 42.
  • 43. Software Qualität nach ISO 9126 angestaubt oder noch immer heißer Sch ... ?“ Mike Horn Consultant & Software Architekt, pentacor GmbH
  • 44. Quelle: https://de.wikipedia.org/wiki/ISO/IEC_9126  ist in der Norm ISO/IEC 25000 aufgegangen Softwarequalitäten
  • 45. Wie haben wir Systeme gebaut? My Online Shop Monolith Checkout & Payment Artikel- Verwaltung Bestell- Verwaltung Kunden- verwaltung Logistik Management …
  • 46. Heute bauen wir domänen-orientiert und damit auch verteilt … ArtikelSystem Checkout& Payment Bestellungen System LogistikSystem KundenSystem My Online Shop SCS SCS SCS SCS SCS
  • 47. Quelle: https://de.wikipedia.org/wiki/ISO/IEC_9126  ist in der Norm ISO/IEC 25000 aufgegangen Challenge bei verteilten Systemen: Erfüllung einiger Softwarequalitäten
  • 48. Fehlertoleranz – Separation of Failure Units My Online Shop SCS SCS SCS SCS SCS “Separation of Failure Units”  verhindert Seiteneffekte
  • 49. Fehlertoleranz – Separation of Failure Units My Online Shop SCS SCS SCS SCS SCS Self Containment  Separation of Failure Unit
  • 50. Slide 08 Fehlertoleranz – Loose Coupling ArtikelSystem Checkout& Payment Bestellungen System LogistikSystem KundenSystem My Online Shop Prevent Cascading Failures SCS SCS SCS SCS SCS
  • 51. Slide 08 Fehlertoleranz – Loose Coupling ArtikelSystem Checkout& Payment Bestellungen System LogistikSystem KundenSystem My Online Shop ACLACL ACL ACL - Anti Corruption Layer SCS SCS SCS SCS SCS
  • 52. Slide 08 Fehlertoleranz – Loose Coupling ArtikelSystem Checkout& Payment Bestellungen System LogistikSystem KundenSystem My Online Shop Event Synchronisation ACLACL ACL Event Synchronisation über: • Queue/Stream • http feeds • RESTful API SCS SCS SCS SCS SCS
  • 53. Slide 08 Fehlertoleranz – Loose Coupling ArtikelSystem Checkout& Payment Bestellungen System LogistikSystem KundenSystem My Online Shop (RESTful) API as a Business Function ACL ACL SCS SCS SCS SCS SCS
  • 54. Fehlertoleranz – Loose Coupling Quelle: https://medium.com
  • 55. Fehlertoleranz – Fail fast … Quelle: https://medium.com
  • 56. … and fail early • Integration Tests • Resilience Tests • Consumer Driven Contracts
  • 57. Änderbarkeit – Analysierbarkeit verteilter Systeme Netflix Micro Service Architecture at runtime
  • 58. Analysierbarkeit: Monitoring eines SCSArtikelSystem Quelle: https://redhat.com SCS
  • 59. Analysierbarkeit von Geschäftsprozessen My Online Shop Business Process 1 Business Process 2 Business Process … Business Process n
  • 60. Analysierbarkeit: Monitoring Business Processes Business Metrics Business Metrics Business Metrics Business Metrics Business Metrics
  • 61. Analysierbarkeit: Traceability pro SystemArtikelSystem Quelle: https://elastic.co
  • 62. Analysierbarkeit: Traceability in Business Processes
  • 63. Fazit: Software Qualität in verteilten Systemen
  • 64. „Kaniko - Docker Images bauen ohne einen Docker Daemon“ by Yannik Neubert
  • 71. Es gibt kein Problem? Doch!
  • 72. • Docker-in-Docker erfordert privileged mode Möglicher Zugangspunkt für Angreifer
  • 73.
  • 74.
  • 75. Lösung: • In GoogleContainerTools enthalten • Ermöglicht Docker-Build ohne einen Docker Daemon
  • 76. Pod
  • 77.
  • 78. 1. Dockerfile • Standard, muss nicht für Kaniko angepasst werden
  • 79. 2. Build Context Azure Blob Storage Google Cloud Storage
  • 80. 3. Destination • Zielpfad für fertiges Image • Docker registry, bspw. Docker Hub, Amazon ECR
  • 83. Restrictions • Keine Windows-Container • Kaniko-Executable kann nicht in anderem Image verwendet werden
  • 84.
  • 85. About me... • Name: Manuel Heinzig • Alter: 30 • Werdegang: • Kindergarten  Mittelschule  Abitur • Master Informatik @TU Chemnitz • Wiss. Mitarbeiter/Dozent @HS Mittweida Bereich Medieninformatik und Interaktives Entertainment (aka Videospiele und alles drum herum)
  • 86. Der Erklärbär • „Manuel machts Protokoll, da wird das wenigstens nicht so schwurbelig“ • „HiWi, komm mal mit zum Firmengespräch. Nicht, dass ich mit denen dort wieder aneinander vorbei rede.“
  • 90. Mein Job • Vorlesungsreihe „Wissenschaft und Wirtschaft“: • 4-8 Studis (Studiengang Medieninformatik und Interaktives Entertainment, 80% Kreative, 20% Programmierer) • Informatisches Projekt eines (externen) Stakeholders • Erste praktische Erfahrungen
  • 92. Studi (+), Stakeholder (+) • Stakeholder: Entwicklerfirma für Versicherungssoftware • Ansprechpartner: Standortleiter Chemnitz + Technischer Leiter • Zielstellung: „Macht unsere Versicherungssoftware hübsch. 3D, VR, alles was euch einfällt.“
  • 93. Studi (+), Stakeholder (+) Projektverlauf • Studi-Team organisiert sich selbst • Studis interviewen Stakeholder für Anforderungen • Zwischenpräsentationen mit lauffähigem MVP + Feedback
  • 94. Studi (+), Stakeholder (+) Fazit • Nach Jahr 1: lauffähiger, dokumentierterPrototyp • Nach Jahr 2 (heute): nutzeroptimierte, polished Software mit Basic-Featureset Software wird demnächst in Testeinsatz gehen • 2 ehem. Studis bei Firma in Festanstellung • 7 Praxis-/Abschlussarbeiten
  • 95. Studi (-), Stakeholder (+) • Stakeholder: „Die Verwaltung“ einer öffentlichen Einrichtung • Ansprechpartner: Informatisch versierter Mitarbeiter der Einrichtung mit Ahnung von Verwaltungsprozessen • Zielstellung: Ein Tool zur nachvollziehbaren Budgetberechnung (Personal- und Projektplanung)
  • 96. Studi (-), Stakeholder (+) Projektverlauf • 2/7 Studis erscheinen zum ersten Termin • Thema ist “langweilig” • Technische Hilfe des Stakeholders “unverständlich”
  • 97. Studi (-), Stakeholder (+) Fazit • Konzeptdokumente Copy-Pasted aus den ersten 5 Googletreffern • Programmfortschritt ausschließlich durch Ansprechperson • Projekt wird mit 2/7 Studis beendet, Rest ”macht das im nächsten Jahr nochmal”
  • 98. Studi (-), Stakeholder (-) • Stakeholder: Forschungsmitarbeiter der Hochschule mit wenig Lehrerfahrung/Studikontakt • Ansprechpartner: ebendieser Mitarbarbeiter • Zielstellung: Performante und anschauliche Visualisierung „biologischer Graphen“ für Dissertation des Mitarbeiters
  • 99. Studi (-), Stakeholder (-) Projektverlauf I • Stakeholder definiert unverständliche technische Anforderungen • Programmierer des Studiteams fragen mit ihrem Halbwissen nach • Designer sind thematisch vollkommen raus • Stakeholder nach Vorstellungsrunde skeptisch, “ob ihm die Studis was bringen” betrachtet Projekt in der Folge als “sinnlosen Aufwand”
  • 100. Studi (-), Stakeholder (-) Projektverlauf II • Studis nehmen Projekt als “nur technisch und programmierlastig” wahr • Programmierer finden Aufgabe “zu schwer” • Artists: “wir haben nichts zu tun, sind fertig mit allem”
  • 101. Studi (+-), Stakeholder ?? • Stakeholder: Teilbereich eines großen Medienproduzenten • Ansprechpartner: Geschäftsführer, Entwicklungsingeneur, IT- Chef • Zielstellung: Tool zur grafisch anschaulichen Planung der Gerätedispo
  • 102. Studi (+-), Stakeholder ?? • Stakeholder hat “eine Entwicklungsabteilung, die große Hoffnungen in die Studis legt” • Die drei Ansprechpartner diskutieren im Meeting vor Studis noch über Kernziele Projektabbruch mitten im Semester
  • 103. Fazit I • Schlüssel zum Erfolg (bei der Arbeit mit Studis): • Vorher überlegen, was Studis in etwa leisten sollen • Kleine Fehlschläge einplanen und nutzen
  • 104. Fazit II • Kooperationsprojekte mit Ausbildungsstätten... • ...sind KEIN billiger Ersatz für eine in-House FuE-Abteilung • ...bieten billiges Scouting für möglichen Nachwuchs • ...sind die richtige Spielwiese fürs Ausprobieren experimenteller Ideen • Erfahrung: Kommunikationserfolg == Projekterfolg
  • 108. https://www.reactivemanifesto.org/de Wir glauben, dass die Anforderungen, die heute an Computersysteme gestellt werden, nur zu erfüllen sind durch die gleichzeitige Ausrichtung an vier Qualitäten, deren Wert bislang nur einzeln betrachtet wurde: Systeme müssen stets antwortbereit, widerstandsfähig, elastisch und nachrichtenorientiert sein. Dann nennen wir sie reaktive Systeme.
  • 109. SOA-Manifest Service-Orientierung ist ein Paradigma, das den Rahmen für unser Handeln vorgibt. Service-orientierte Architektur (SOA) ist ein Architekturtyp, der aus der Anwendung von Service-Orientierung entsteht. Wir haben Service-Orientierung angewendet, um Organisationen zu helfen, kontinuierlich nachhaltigen Geschäftswert zu liefern mit höherer Agilität und Kosteneffizienz und im Einklang mit den sich ändernden fachlichen Bedürfnissen. Im Rahmen unserer Arbeit sind wir zu folgender Priorisierung gekommen: Geschäftswert über technische Strategie Strategische Ziele über projektspezifischen Nutzen Immanente Interoperabilität über maßgeschneiderte Integration Gemeinsam verwendete Services über zweckgebundene Implementierungen Flexibilität über Optimierung Evolutionäre Vervollkommnung über Streben nach anfänglicher Perfektion Das heißt, obwohl wir die Werte auf der rechten Seite schätzen, sind uns die Werte auf der linken Seite wichtiger. 23.10.2009 http://soa-manifest.de/
  • 110. The Modern DevOps Manifesto 1. Everything is code — Infrastructure, configuration, actions, and changes to production — can all be code. When everything is code, everything needs DevOps. 2. Establish “trusted” resources — Enterprise assets such as images, templates, policies, manifests, configurations that codify standards should be governed (with a pipeline) 3. Lean into Least Privilege — New roles are emerging: Cluster Engineer, Image Engineer, Site Reliability Engineer…define roles with just enough access to the “trusted” resources they access to get their job done, mitigating risk, limiting exposure. 4. Everything is observable — Lay the foundation for AI for Pipelines by collecting and organizing data from an instrumented pipeline. 5. Expand your definition of “everything” — DevOps is not just for application code. DevOps can apply to machine learning model (MLOps or ModelOps), integration (API lifecycle), infrastructure and configuration (GitOps), and other domains. Expand your stakeholders to include Security and auditors…the next evolution of breaking down silos. https://medium.com/ibm-garage/the-modern- devops-manifesto-f06c82964722
  • 116. Manifesto for Minimalist Software Engineers - Minifesto http://minifesto.org/
  • 120. A Proposal for an Antifragile Software Manifesto P. 1 – Our highest priority is to satisfy the customer by building a non-linear, proactive, and self adaptive system P. 2 – We welcome changing scenarios where unexpected events (Black Swans) are the real paradigm shifting entities P. 3 – We deliver assuring embedded and adaptive fault tolerance P. 4 – All stakeholders, and the broader environment, lead the antifragile organization P. 5 – Build antifragile projects around motivated, skilled and open minded people. Give them the environment and support they need, and trust them to get the job done P. 6 – The most efficient and effective method of building an antifragile organization is building on honest, open and transparent communication P. 7 – Continuous exposure to faults and automatic fixing is the primary measure P. 8 – An antifragile organization promotes a context aware environment. The stakeholders should be able to maintain a system indefinitely P. 9 – Continuous attention to technical excellence, reality, redundancy P. 10 – Error loving - the art of learning to be antifragile – is essential P. 11 – Antifragile architectures emerge from self – organizing, context aware teams P. 12 – At regular intervals, the developing team reflects about the context situation, on how to become more effective, then tunes and adjusts its behavior accordingly https://www.sciencedirect.com/science/article/ pii/S1877050916302290
  • 121. The Practical Nerd manifesto 1) Cool is not neccessarily useful. 2) Software is never, ever going to be “dead.” 3) Free isn’t forever. 4) Features aren’t products in the long run. 5) Bubbles happen. https://www.geekwire.com/2011/practical-nerd- practical-nerd-manifesto/
  • 123.
  • 125. Manifesto for Agile Software Development http://agilemanifesto.org/ BizOps Manifesto https://www.bizopsmanifesto.org/ Robot Operations Manifesto https://robops.org/manifesto Nerds with People Skills Manifesto http://nerdswithpeopleskills.com/manifesto/ The DevOps Manifesto https://www.opsview.com/resources/devops/blog/devops-manifesto DevOps for ML Manifesto https://dotscience.com/manifesto/ Digital Manifesto https://www.digital-manifesto.org/ Team Manifesto https://www.linkedin.com/pulse/team-manifesto-foundation-every-barry/ Scaling Manifesto https://scalingmanifesto.org/
  • 126. Vagrant Gibt es virtuelles Leben neben Docker ? Kay Thriemer
  • 127.
  • 128. https://hub.docker.com Dockerfile: FROM ubuntu RUN apt-get update RUN apt-get install –y nginx CMD [“echo”,”Image created”]
  • 129.
  • 130.
  • 131.
  • 132. • 2010 startete Mitchell Hashimoto • November 2012 Gründung von HashiCorp • Umfangreiche Documentation https://www.vagrantup.com/docs
  • 133. • Vorkonfigurierte VM– Boxen • https://app.vagrantup.com/boxes/search
  • 134. Initialisierung der Umgebung vagrant init hashicorp/bionic64 Vagrantfile: Vagrant.configure("2") do |config| config.vm.box = "hashicorp/bionic64" end
  • 135. Konfiguration: • Provider, z.B. Virtualbox • Betriebssystem • Hauptspeicher • Netzwerk • Shared folders • Provisioning
  • 136. Provisioning von Vagrant Provisioner: • File • Shell • Ansible • Chef • Docker • Puppet • Salt
  • 137. Beispielkonfiguration mit Shell Provisioner Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.provider "virtualbox" do |v| v.memory = 2048 v.cpus = 2 end config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y software-properties-common apt-add-repository ppa:ansible/ansible apt-get update apt-get install -y ansible SHELL end
  • 138. Beispielkonfiguration mit Shell Provisioner Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.provider "virtualbox" do |v| v.memory = 2048 v.cpus = 2 end config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y software-properties-common apt-add-repository ppa:ansible/ansible apt-get update apt-get install -y ansible SHELL end
  • 139. Shell Provisioner mit Script config.vm.provision "shell", path: "installUsefulTools.sh" #!/bin/bash echo " ##### Install Useful Tools #####" ## sudo apt-get update sudo apt-get install -y openssl sudo apt-get install -y firefox sudo apt-get install -y gedit sudo apt-get install -y geany sudo apt-get install -y vim-gtk3 sync
  • 140. Provisioning mit Ansible playbook.yml --- - hosts: all become: yes tasks: - name: Install packages apt: name: - ntpdate - nmap state: latest cache_valid_time: 3600
  • 141. Provisioning mit Ansible Vagrantfile: config.vm.provision :ansible do |ansible| ansible.playbook = "playbook.yml" end
  • 142. Weitere Konfigurationsmöglichkeiten • Networking • Forwarded Ports Vagrant.configure("2") do |config| config.vm.network "forwarded_port", guest: 80, host: 8080 End • Öffentliches Netzwerk Vagrant.configure("2") do |config| config.vm.network "public_network" end • Privates Netzwerks Vagrant.configure("2") do |config| config.vm.network "private_network", type: "dhcp" end
  • 143. Weitere Konfigurationsmöglichkeiten • Synced Folders zwischen Host und Guest Vagrant.configure("2") do |config| config.vm.synced_folder "src/", "/srv/website" End • Unterstützte Typen: • VirtualBox shared folders • NFS • SMB • rsync
  • 144. Vagrant starten • vagrant up – erzeugt und konfiguriert die VM • vagrant halt – stoppt die VM • vagrant destroy – löscht die VM • vagrant status – Status der VM • vagrant ssh – SSH in gestartete VM • https://www.vagrantup.com/docs/cli
  • 145.
  • 146. Vorstellung (erste Folie ohne automatischen Folienwechsel)
  • 147. Wo ist die Zeit hin? PhotobyAnnieSprattonUnsplash
  • 167. Dominik Hirt Software [Architekt | Entwickler | Coach] Wermsdorf / Oschatz / Hiddensee @todo42 dominik@todo42.de
  • 170. Alternative to EJB2 entity beans Provides an SQL inspired language (HQL) for writing SQL-like queries => Warum nicht gleich SQL ? [https://de.wikipedia.org/wiki/Hibernate_(Framework)]
  • 171. HQL is the object-oriented version of SQL Criteria Queries are provided as an object-oriented alternative to HQL It generates database independent queries => Genau wie SQL-92 [https://de.wikipedia.org/wiki/Hibernate_(Framework)] �
  • 172. EclipseLink MyBatis TopLink JPA / JPQL Spring Data Derived Query Methods Hibernate / HQL JIRA / JQL Java ORM Mapper
  • 178. Die Lösung No SQL Strings Type Safety DB Schema matching SQL compliant (not inspired by) Fluent API Dynamic SQL
  • 179. JOOQ Java Object Oriented Query https://www.jooq.org Die Lösung Disclaimer: leider keinerlei DB connections zu Lukas Eder / Data Geekery GmbH
  • 180. JOOQ Java Object Oriented Query DSL query builder Code generation Typesafe SQL Database First JOOQ
  • 182. @Inject DSLContext jooq; @GET("/songs/{id} ") public List<SongDTO> loadAll(@PathParam("id") Long id) { return jooq.select(SONG.ID, SONG.TITLE, ARTIST.NAME) .from(SONG) .join(ARTIST).on(ARTIST.ID.eq(SONG.ARTIST)) .where(SONG.ID.eq(id)) .orderBy(SONG.title.desc()) .fetchInto(SongDTO.class); } @GET("/songs") public List<Songs> loadAll() { return jooq.selectFrom(SONG).fetchInto(Song.class); } SQL compliant (not inspired by)
  • 183. DB Schema matching DB Migration (liquibase/flyway) JOOQ code generation compile & test maven / gradle Pipelines / CI / CD
  • 185. CommonTableExpression<Record3<BigDecimal, Long, String>> sollZeilen = name(SOLL) .fields(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName(), BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID.getName(), BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName()) .as(select(coalesce(sum(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG), 0).cast(SQLDataType.DECIMAL), BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID, BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG) .from(BUCHUNGSSYSTEM_BUCHUNGSSATZ) .where(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLKONTONUMMER.eq("1230")) .groupBy(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID, BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG)); CommonTableExpression<Record3<BigDecimal, Long, String>> habenZeilen = name(HABEN) .fields(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName(), BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID.getName(), BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName()) .as(select(coalesce(sum(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG), 0).cast(SQLDataType.DECIMAL), BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID, BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG).from(BUCHUNGSSYSTEM_BUCHUNGSSATZ) .where(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENKONTONUMMER.eq("1230")) .groupBy(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID, BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG)); final Field<BigDecimal> totals = DSL.decode() .when(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName()).isNull(), habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG) .cast(SQLDataType.DECIMAL.precision(19, 2))) .when(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG.getName()).isNull(), sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG).multiply(-1) .cast(SQLDataType.DECIMAL.precision(19, 2))) .otherwise(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG).multiply(-1) .plus(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.BETRAG)) .cast(SQLDataType.DECIMAL.precision(19, 2))); return jooq.with(sollZeilen).with(habenZeilen) .select(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID.getName()), sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.WAEHRUNG.getName()), totals.as("total")) .from(habenZeilen) .rightJoin(sollZeilen) .on(sollZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.SOLLSELLERACCOUNTID) .eq(habenZeilen.field(BUCHUNGSSYSTEM_BUCHUNGSSATZ.HABENSELLERACCOUNTID))) .where(val(BigDecimal.valueOf(0)).notEqual(totals)) .fetchInto(CommissionSammelkonto.class); Dynamic SQL
  • 186. JOOQ kann noch mehr lots of generator options Database First return values on save/update (e.g. generated values) DAOs lots of fetching options (lists, maps) simple CRUD with generated records use liquibase changelogs POJOs (no need for JPA entities)
  • 188. Agile wohnt nicht weit von 
  • 190.