Will man richtig coole Webanwendungen entwickeln, kommt es auf darauf an, den geeigneten Technologiemix zu beherrschen. Erfahren Sie daher live in diesem Workshop, wie sich unter Verwendung von Angular, TypeScript, Spring Boot und Spring Data moderne Anwendungen entwickeln lassen, die Ihre Kunden begeistern werden!
In diesem Hands-on-Workshop werden relevante Themenaus den neuesten Java-Versionen vorgestellt.
Dadurch erhalten die Teilnehmer einen guten Überblick über wichtige, mit Java 9 eingeführte Neuerungen sowie Erweiterungen aus Java 10 und 11 als auch dem aktuellen Java 12.
Asynchrone Nachrichten statt Methodenaufrufe, fachliche Actor-Hierarchien statt Schichtenarchitektur, Supervisor und "let it crash" statt langer Stack-Traces, Zustand in Anwendungskomponenten statt zustandsloser Server, Sharding statt identischer Serverinstanzen — Akka erlaubt völlig andere Architekturen als z. B. Spring oder Java EE. Es bringt andere Trade-offs mit als klassische Komponentenframeworks und eröffnet eine weitere Sicht auf Architektur jenseits etablierter Patterns. Dieser Workshop gibt eine praxisorientierte, quelltextzentrierte Einführung in Akka. Wir bauen ein lauffähiges System, an dem wir reaktive Patterns kennenlernen und neue architektonische Wege ausprobieren. Die Beispiele sind vollständig in Java, aber wenn jemand die Übungen lieber in Scala implementieren will, unterstütze ich ihn oder sie dabei gern.
Wie schnell lässt sich eine vollwertige Web-API mitNode.js implementieren? Dieser Frage gehen wir in diesem Workshop auf denGrund. Node.js und sein umfangreiches Ökosystem lösen zahlreicheStandardaufgaben, sodass Sie sich auf das Wesentliche, also Ihre Businesslogikkümmern können. Sie müssen nur wissen, auf welche Pakete, Frameworks undBibliotheken Sie zugreifen wissen und wie diese funktionieren.
Eine grundsätzliche Frage bei der Softwareentwicklung ist, wie man die Domäne richtig schneiden kann. In Zeiten von Microservices ist das besonders bewusst geworden, aber auch unabhängig davon muss man diese Frage beantworten. Ziel ist es, zu einer tragfähigen Architektur und einem guten Domänenmodell zu kommen. Dabei ist erstens wichtig, die Bounded Contexts und Subdomänen herauszuarbeiten; im zweiten Schritt werden die Kontexte mit Context-Mapping miteinander verbunden. Der Workshop wird aus Vorträgen und Übungen bestehen. Dabei werden wir uns auch mehrere Beispiele aus der Praxis anschauen, und in den Übungen erarbeiten sich die Teilnehmer selbst an einer Beispieldomäne eine Aufteilung in Bounded Contexts.
Fred Brooks said, "How do we get great designers? Great designers design, of course." So how do we get great architects? Great architects architect. But architecting a software system is a rare opportunity for the non-architect. The kata is an ancient tradition, born of the martial arts, designed to give the student the opportunity to practice more than basics in a semi-realistic way. The coding kata, created by Dave Thomas, is an opportunity for the developer to try a language or tool to solve a problem slightly more complex than "Hello world". The architectural kata, like the coding kata, is an opportunity for the student-architect to practice architecting a software system.
Begrüßung und Einführung in den Agile Day.
Agile ist erwachsen geworden: Vor achtzehn Jahren wurde das Manifest für Agile Softwareentwicklung veröffentlicht. Mittlerweile ist Agilität im Mainstream angekommen. Doch oft fühlt sich das nicht besser an - es geht wieder um Prozesse, Geschwindigkeit und Kontrolle. Dabei wollte das Agile Manifest doch etwas ganz anderes. Die Prinzipien und Werte, die hinter erfolgreicher Agilität stecken, sind so wichtig wie nie zuvor. Kunden erwarten zügig neue Features, die sie von der Konkurrenz kennen. Gleichzeitig muss die Qualität stimmen. Entwickler findet man nicht mehr wie Sand am Meer - und sie haben keine Lust auf unnötige Bürokratie, suchen einen Sinn in ihrer Arbeit und möchten dabei nicht ausbrennen. Bekannte Agilisten haben sich vor einiger Zeit daran gemacht, die Agilität mit ihren eigenen Methoden weiterzuentwickeln: ausprobieren und lernen. Alte Zöpfe abschneiden, Neues versuchen. Und an guten Ideen festhalten. Herausgekommen sind Bewegungen wie "Heart of Agile" und "Modern Agile". Wir machen eine Bestandsaufnahme, wo Agile heute steht. Vor allem schauen wir uns die vier Prinzipien von "Modern Agile" an, warum gerade sie den Weg in die agile Zukunft ebnen. Dieser Vortrag liefert Anregungen und Impulse zur Bewertung des eigenen agilen Vorgehens - und zur Orientierung, wenn jemand gerade vor der Einführung von Agilität im eigenen Unternehmen steht.
Aus Sicht eines DevOps-Teams ist für eine hohe angestrebte Geschwindigkeit hohe Autonomie bei allen Architektur- und Implementierungsentscheidungen notwendig. Aus Sicht der DB Systel, die den stabilen IT-Betrieb der Deutschen Bahn sicherstellen soll, ist die Forderung nach Autonomie jedoch ein Risiko.
Zur Lösung dieses Konfliktes findet man daher in der Industrie häufig Ansätze, bei der Betriebseinheiten zentral betreute CI/CD-Pipelines bereitstellen. Während die mit dieser Lösung verbundene Automatisierung eine gute Kontrolle von Betriebsaspekten mit sich bringt, stellt die damit auch verbundene notwendige Standardisierung von Architekturaspekten häufig eine zu starke Einschränkung der Autonomie von DevOps-Teams dar.
In diesem Talk möchten wir darauf eingehen, wie die DB Systel ihren DevOps-Teams durch Verortung der Betriebsverantwortung in den DevOps-Teams eine optimale Autonomie gewährt und gleichzeitig die Risiken für Stabilität, Datenschutz und Compliance kontrolliert.
Wir geben Ihnen auch einen Einblick in den Alltag eines DevOps-Teams in der DB Systel aus Sicht eines Betroffenen. Wir stellen dar, wie hohe Autonomie und umfängliche Verantwortung eine völlig neue Arbeitsweise erfordern.
Keine Lust mehr auf schlecht initialisierte Projekte? Keine Lust mehr, Fehler mühsam auszubügeln, die beim Projektstart gemacht wurden? Keine Lust mehr auf unnützen Stress? Diese Session richtet sich an alle, die Projekte initialisieren oder unter einer schlechten Initialisierung leiden (also an alle). Sie zeigt, wie man sich mittels einer Definition of Project Initiation (DoPI) gut auf die Unsicherheiten der Produktherstellung vorbereitet und gibt Impulse, wie man Unwissen zu Wissen, Ungewissheit zu Gewissheit und Risiko zu Chance werden lässt. Das Wissen um komplexe Systeme hilft dabei, ein tiefes Verständnis für die Projektinitialisierung zu gewinnen.
Die Transition hatte einen guten Start: Einzelne Teams arbeiten agil, mit dem Management wurden Workshops für agile Führung durchgeführt und ein gutes Mindset beginnt sich zu entwickeln. Aber irgendwie läuft es doch nicht so wie erwartet. Warum funktioniert es im „Kleinen“ auf Teamebene, aber nicht, wenn wir den Schritt weiter gehen? Woran kann es liegen? Gibt es doch Reibungsverluste innerhalb der Organisation? Haben wir etwas übersehen? Wo und wie wird der agile Gedanke so lange gebeugt bis er passt? Wird in einzelnen Projekten versucht, Agilität mit „Gewalt“ umzusetzen oder passt die von uns konzernweit gewählte Methode doch nicht für jeden Bereich? Sollen wir doch wieder alles zurückdrehen und es so lassen wie es vorher war?
Eine Transition durchzuführen ist ein langer und steiniger Weg und verlangt von allen Beteiligten nicht nur Disziplin und Durchhaltevermögen ab. Fehlschläge entmutigen oft die Kollegen oder man versucht, andere zu kopieren. Jede Organisation und jede Transition ist ein komplexes Vorhaben und kann nicht bis ins letzte Detail im Vorfeld geplant werden. Georgia Gaitatzi und Christian Schneiker gehen in ihrem Vortrag auf Beispiele aus der Praxis ein, die sie in ihrer langjährigen Arbeit als Agile Coaches in Unternehmen erlebt haben, und zeigen mögliche Lösungswege und Indikatoren auf, die als Anregung dienen sollen, dass eine Transition erfolgreich und vor allem nachhaltig durchgeführt werden kann.
Moderne Softwareentwicklung entwickelt sich von einer Expertenkultur hin zum ausgeprägter Teamarbeit. Viele Techniken und Frameworks wie Scrum, DesignThinking oder DevOps basieren auf den Konzepten interdisziplinärer Teams und Selbstorganisation. Die Leistungsfähigkeit von Teams ist besonders in Zeiten kontinuierlicher Releaseprozesse ein entscheidender Erfolgsfaktor für die effektive und effiziente Produktentwicklung. Grund genug, sich neben der technischen Architektur auch mit Architektur und Dynamik von Teams zu beschäftigen. Diese Session zeigt Kriterien, die für den Aufbau agiler Produktteams wichtig sind, und beschreibt Techniken, um diese Teams zu entwickeln.
Lernen, Lehren, Probleme lösen und Softwareentwicklung haben eine ganze Reihe von gemeinsamen Eigenschaften. All diese Dinge benötigen eine ordentliche Portion Gehirnschmalz. Aber ist das wirklich so? Oder können wir vielleicht doch im Schlaf lernen? In meinem Talk stelle ich gehirngerechte Methoden und Techniken vor, mit deren Hilfe wir uns unser Leben einfacher machen können. Die Techniken eignen sich sowohl für den täglichen Entwickleralltag als auch für das Erlernen und Erarbeiten neuer Konzepte. Und auch das leidige Thema Prokrastination kommt nicht zu kurz.
Zum Abschluss des Agile Days bietet sich Gelegenheit, mit den Sprechern zu diskutieren und die wichtigsten Fragestellungen zu vertiefen, die sich im Laufe des Tages ergeben haben. Besonders wichtig dabei: Die abschließende Diskussion bietet allen Teilnehmern Gelegenheit für Diskussionsbeiträge und Feedback.
Sebastian Meyen, Chefredakteur des Java Magazins und Program Chair der JAX, führt gemeinsam mit der Advisory-Crew ins Programm der diesjährigen JAX ein. Neben wichtigen Tipps zur Orientierung auf der Konferenz wird auf wichtige technologische Trends eingegangen, die im Programm behandelt werden.
Kubernetes ist der Industriestandard für Containerorchestrierung. Doch es ist mehr als ein weiteres Tool. Es ist die eierlegende Wollmilchsau der Containerinfrastrukturen. Dieser Hands-on-Vortrag will zeigen, warum Kubernetes als zukünftige und alleinige Infrastruktur zum Container-Deployment gedacht werden sollte. Der Zugriff auf ein Kubernetes-Cluster ist vollkommen ausreichend, um die Container mit allem drum und dran zu betreiben. Der Entwickler bekommt nicht nur eine Umgebung, um seine Container hoch verfügbar auszurollen, sondern auch ein Life-Cycle-Management frei Haus. Richtig eingerichtet bringt Kubernetes viel mehr: Scaling aufgrund eigener Metriken, automatisches Verfügbarkeitsmonitoring, zentrales Logging, Aufzeichnen aller Metriken, Service Discovery, einfaches Einrichten des Load Balancers, dynamisches Volumemanagement. Vereinfacht wird kein anderes Tool mehr gebraucht, um seine Container produktiv zu betreiben. All die erwähnten Features lernen wir kennen, indem eine Beispielapplikation ausgerollt wird. Wir werden die grundlegenden Kubernetes-Objekte kennenlernen: Pods, Deployments, Services, Ingres-Ressourcen. Der Zuhöhrer soll am Ende des Vortrags mit den ersten Schritten zur Verwendung von Kubernetes vertraut sein. Auch soll klar werden, warum in Zukunft nicht mehr viel mehr als Kubernetes gebraucht werden muss.
Nach der Freigabe von JDK 12 werden die aktuellen Merkmale vorgestellt. Neben Bug-Fixes und Security-Patches stecken im JDK-12-Feature-Release Sprach- und JVM-Änderungen, Erweiterungen, zugefügte und entfernte Klassen und Methoden, deprecated markierte Features sowie JDK-Tool-Änderungen.
Bereits mit Einführung der JDK Version 11 wurden die technischen Unterschiede bei der Gleichstellung von Oracle JDK mit dem Oracle OpenJDK entfernt. Bei diesem Technologietransfer sind alle Bestandteile vom Oracle JDK als Open-Source-Implentierungen in das OpenJDK geflossen, sodass das Oracle JDK 12 durch das OpenJDK 12 augetauscht werden kann. Die Anwender können ein JDK oder ein OpenJDK verschiedener Hersteller frei auswählen.
In der Session wird außerdem ein Blick auf den langfristigen Einsatz vom Java-Modulsystem geworfen und dies anhand von Beispielen durch Erstellung einer individueller Java Runtime mit der Anwendung verdeutlicht. Zudem werden die Migrationsaspekte älterer Java-Anwendungen zum JDK 12 dargestellt.
In dieser Session wird Kai zeigen, wie man REST APIs mit Hilfe von Hypermedia so gestalten kann, dass sie neben den eigentlichen Ressourcendaten auch Informationen bereitstellen, was man mit den REST-Ressourcen machen kann. Dies kann in Form von Hyperlinks zur Navigation und Beschreibung von Aktionen geschehen, die auf den Ressourcen ausgeführt werden können. Kai wird viele konkrete Anwendungsfälle und natürlich Codebeispiele zeigen. Als Beispielrepräsentation wird HAL-Forms verwendet, eine Erweiterung des beliebten HAL-Formats. Dabei wird er auch auf das Affordances API der aktuellen Spring HATEOAS (Hypertext as the Engine of Application State) eingehen. Ziel dieser Session ist, zu zeigen, dass man viel Domain- und Business-Prozess-Know-How in die APIs bringen kann, was normalerweise auch zu wesentlich robusteren und einfacheren Clients führen sollte.
Continuous Integration (CI) ist mittlerweile ein etabliertes Prinzip. Die meisten Teams haben heute einen Server wie Jenkins für CI. Ohne Continuous Integration gibt es keine Continuous Delivery. Oft genug wird CI allerdings halbherzig durchgeführt und das Team wiegt sich in trügerischer Sicherheit - sie spielen CI-Theater. Wie kann ich CI-Theater erkennen und welche Maßnahmen helfen mir bei echter CI? Der Talk gibt hierauf Antworten.
Wie fällt ihr Product Owner oder Team Entscheidungen? Wonach wird das Backlog oder die Roadmap geplant? War eine Verbesserungsmaßnahme erfolgreich? Viele Teams vertrauen hier nur auf ihr Bauchgefühl und Schätzungen in Story Points. Dabei warten bereits Daten aus vorhandenen Quellen wie JIRA, Ticketsystemen und CI/CD-Tools nur auf die Auswertung. In dieser Session stelle ich Metriken und KPIs aus Agile, Lean und DevOps vor und wir fokussieren uns auf das Lernen des Build-Measure-Learn Loops. Wir sehen uns digitale sowie physische Vorgehen und Tools an, die die Daten in Prozesse und die tägliche Arbeit einfließen lassen. Anhand von Beispielen und Diagrammen zeige ich, wie sich diese Daten für eine realistischere Roadmap-Planung nutzen lassen und wie diese Daten dem Team helfen können, sich selbst zu verbessern.
Wenn man die Ideen von Lean, Agile, XP etc. ernst nimmt, müsste man alles daran setzen, seine Aufgaben zu priorisieren und die wichtigste Aufgabe möglichst zügig und gut zum Kunden auszuliefern. Leider sieht die Realität oft anders aus: Die individuelle Auslastung wird maximiert, die Entwickler arbeiten an vielen Aufgaben gleichzeitig. Die Features landen halbgar beim Kunden, die dann kein Feedback zu fachlichen Experimenten liefern, sondern durch simple Fehler frustriert sind. Für fachliche Weiterentwicklung ist kaum Zeit, weil die Entwickler ständig in Feuerwehreinsätzen Bugs fixen. Als Lösung dieses Problems setzen wir auf Team-Building, arbeiten an der Kommunikation, machen Pair Programming, suchen Collective Code Ownership. In Zeiten von zunehmend komplexen oder chaotischen Problemen ist das vielleicht nicht mehr genug... Besonders wenn die Teams nicht nur das Ergebnis gemeinsam verstehen müssen, sondern auch den Weg der Problemlösung - warum ein bestimmter Weg eingeschlagen wurde, warum bestimmter Code *nicht* da ist. Vor einigen Jahren kam die Idee auf, Softwareentwicklung wirklich durch das gesamte Team durchführen zu lassen - und zwar zusammen, Aufgabe für Aufgabe. "Mob Programming" war geboren. Die Blockaden während der Entwicklung verschwinden, weil sich alle nötigen technischen und fachlichen Ansprechpartner im selben Raum befinden. Klingt verrückt? Funktioniert aber! In diesem Talk werde ich die Grundlagen von Mob Programming vorstellen, die Gemeinsamkeiten und Unterschiede zum Pair Programming und wann sich das Arbeiten als "Mob" lohnt. Dazu gibt es Tipps aus der Praxis.
Ein in die Jahre gekommenes und nicht mehr updatefähiges System für ein Antragsverfahren im Bereich Lohnersatzleistungen soll erneuert werden. Geschäftsprozesse mit vielen Schritten, Regeln, Attributen, Dokumenten, Freigaben, Akten, Überweisungen, ... In diesem Vortrag werde ich euch vorstellen, mit welcher Architektur wir diesem Konstrukt begegnet sind und welche Technologien uns dabei geholfen haben. Enstanden ist ein (fast) komplett digitalisiertes und an vielen Stellen automatisiertes Antragsverfahren mit einer Anbindung an Drittsysteme und einer Prozesssteuerung durch eine Workflow-Engine.
Dabei gehe ich auf den Technologiestack, die Architekturen und die dazugehörigen Infrastrukturen sowie die Organisation für agiles Arbeiten ein. Stichworte sind: Verteilt, REST, Microservices, Docker, BPMN, Testautomatisierung, Mikro- und Makroarchitektur, Observability, Resilience, Security, ... Um die Digitalisierung noch weiter voranzubringen, sind weitere Ausbaustufen denkbar, die wir gemeinsam diskutieren können, da uns dafür die geeigneten Konzepte teilweise noch fehlen!
Die Session zeigt, wie es der DATEV gelingt, die Transformation für ca. 2 000 Entwickler in den Bereichen Technologie (Cloud-native, Big Data, Kafka, MongoDB, Ceph, Spring, Angular und vieles mehr), Kultur (Fehlerkultur, Full-Stack-Mindset, vom Softwareentwickler zum Engineer/Craftsman) und Organisation (Cross Functional Teams, Agilität) zu gestalten. Wichtig hierbei ist die Etablierung einer sich stetig anpassenden und organisationsweiten Basis zum interdisziplinären Erfahrungsaustausch und gemeinsamen Lernen. Dafür wurden ganzheitliche Onlineschulungen geschaffen, die immer an den jeweiligen Zielgruppen ausgerichtet sind. Das Plattformkonzept ging viral: Bisher wurden 300 Entwickler auf diesem Weg fortgebildet und vernetzt.
Running your application in a cloud is not always simple, especially when we talk about stateful applications. Running your application in a single data center makes it fragile by design: You can't count on 100 % uptime if you keep all eggs in one basket. To protect ourselves from inevitable downtime, we have to diversify our cloud strategy and go further having our application in multiple data centers of multiple cloud providers: public, private and on-premise.
At this point, traditional databases already aren't enough as they are not designed to work in this multi-cloud environment. We have to go deeper and see what the NoSQL world offers us to consider. Cloud-native distributed decentralized databases allow us to build resilient solutions while getting even more advantages: faster responses, better scalability, and big data readiness.
Are you in a cloud already or are you going to? You can do better. Follow us to see how!
Für Cloud-native Anwendungen liefern Kubernetes und Istio out of the box eine Vielzahl von Schlüsselfunktionen, die generisch für Microservices verwendet werden können, egal in welcher Sprache sie implementiert sind und ohne Änderungen an der Anwendungslogik. Einige Funktionen können jedoch nicht von Orchestrierungs-Frameworks und Service Meshes abgedeckt werden, sie müssen in der Geschäftslogik der Mikroservices gehandhabt werden, z. B. anwendungsspezifische Fail-over-Funktionalität, Metriken und fein abgestufte Autorisierungen.
In dieser Session zeigen wir anhand eines konkreten Beispiels, wie man Microservices mit Java EE und Eclipse MicroProfile erstellt und wie man sie auf Kubernetes und Istio ausrollt und betreibt. MicroProfile verfügt selbst über einige komfortable Funktionen, die man typischerweise bei der Entwicklung von Mikroservices benötigt, z. B. für die Aufrufe von REST APIs und die Implementierungen dieser, einschließlich ihrer Dokumentation. Wir benutzen für die Session unser Codebeispiel cloud-native-starter, das wir auf Github als Open Source veröffentlicht haben, zusammen mit Skripten zum schnellen Deployment auf Minikube und Anleitungen.
Man könnte den Eindruck gewinnen, dass mit Microservices die Universallösung für all unsere (Architektur-)Probleme gefunden wurde. Aber ist das wirklich so? Natürlich nicht. Microservices sind lediglich Mittel zum Zweck und kein Selbstzweck. Was also, wenn meine Probleme nicht zur Lösung „Microservices“ passen? Ist es nach wir vor legitim, einen Monolithen zu bauen? Oder gibt es andere Architekturansätze, mit denen sich Monolithen aufbrechen lassen? In der Session werfen wir einen kritischen Blick auf Microservices und beleuchten – immer ausgehend von bestehenden Problemfeldern – eine Reihe alternativer Architekturen inkl. ihrer Vor- und Nachteile.
Die Entwicklung des MicroProfiles schreitet weiter voran. In beeindruckender Geschwindigkeit wurden zahlreiche APIs entwickelt, die (nicht nur) für die Entwicklung von Microservices sehr hilfreich sind. Hierzu zählen die Unterstützung von Metriken, Health Checks, Fault Tolerance und JSON Web Tokens. Für den Einsatz im Projekt kann aus unterschiedlichen Implementierungen wie TomEE, Thorntail oder OpenLiberty gewählt werden. In dieser Live-Coding-Session wird der praktische Einsatz von MicroProfile anhand eines Praxisbeispiels demonstriert.
Der Kunde wird immer digitaler. Er vergleicht Preise online, bewertet den Service und spricht Empfehlungen aus. Das bedeutet, dass sich die Unternehmen, Dienstleistungen und Produkte diesen Erwartungen und dem Verhalten anpassen müssen um wettbewerbsfähig zu sein. Wer das nicht schafft, läuft Gefahr, dem digitalen Darwinismus zum Opfer zu fallen und vom Markt zu verschwinden. Allerdings reicht es nicht, "etwas mit Big Data" zu machen. Hier müssen Strategie, Technologie und Produkte aufeinander abgestimmt werden. In dieser Session wollen wir uns diesem Zusammenspiel zuwenden.
Diese Session zeigt mit einem Minimum an Folien und viel Quelltext was neu ist, was man damit praktisch anfangen kann und worauf man achten sollte. Hier werden nicht nur Featurelisten und Syntaxvarianten präsentiert, sondern die Neuerungen werden — Code-basierend! — in einen alltagsrelevanten Kontext gestellt.
Ein echter Survival-Kurs für Anfänger und fortgeschrittene Java-Entwickler, die sich mit funktionaler Programmierung konfrontiert sehen. Nach der Session kann jeder locker über Funktoren und Monoide diskutieren oder schnell einen Java-Stream mit einer gecurryten Funktion einbauen. Vor allem kennt man die Momente, in denen funktionales Programmieren hilfreich ist und wann eher nicht.
Kulturwandel und Veränderung der inneren Haltung und Einstellung lassen sich nicht befehlen. Sie sind aber unerlässlich, wenn Organisationen sich auf den Weg in Richtung neue Arbeitswelt, digitale Transformation und Agilität machen. Aber wie kann man die passende, ja notwendige Kultur und die dafür erforderliche innere Haltung und Einstellung entwickeln? Gibt es Techniken, Methoden oder Praktiken, die das Umdenken und die damit verbundene Veränderung fördern?
In dem Vortrag zeigen wir verschiedene Wege, Kultur, innere Haltung und Einstellung praktisch erlebbar zu machen und dadurch Veränderungen anzustoßen. Mit Spaß und Verständnis geht so manches deutlich besser.
Virtual machines rule the world of programming right now: The Java Virtual Machine (JVM) and the .NET Common Language Runtime (CLR) are perhaps the two best-known, but Python, Ruby, and Chrome's V8 engine (powering Chrome and NodeJS) are all also virtual machines, and between those five, we have most of the world covered. But how do these machines work? On what principles do they operate? In short, how are they built? In this session, we will explore that idea by - believe it or not - building a simple, working virtual machine that won't be good for much, but will reflect many of the same principles that all of the aforementioned ones use.
In großen Softwareprojekten mit vielen parallel entwickelten Features und Branches kommt der Build-Server schnell an seine Grenzen. Lagert man den Build in Docker-Container aus, lassen sich zwar Builds parallel bauen, aber die Ressourcen sind weiterhin beschränkt auf die des Docker-Hosts. Ein Ausweg ist der Einsatz eines Build-Clusters, doch dieser bietet diverse Herausforderungen, für die es keine Out-of-the-box-Lösungen gibt. Warum ist der Aufbau eines Kubernetes-Clusters auf Bare-Metal nicht trivial und wie meistert man ihn trotzdem? Wie alloziert man on-the-fly Ressourcen zur Lastverteilung? Welche Fallstricke sind durch den Sprung von einer Single-Host-Welt auf eine Multi-Host-Welt zu beachten? Wo ist mein Storage und welche Ressourcen werden wo benötigt, insbesondere im Hinblick auf die kleinteilige I/O eines Build-Jobs? Wie werden die verschiedenen Scheduler des Betriebssystems, des Kubernetes-Clusters und des Jenkins sauber miteinander verheiratet? Wie hält man die Kosten in Grenzen, wenn man Ressourcen in der Cloud nutzen muss? Wir zeigen eine Architektur auf Kubernetes-Basis, die die Anforderungen erfüllt, und geben Antworten auf all diese Fragen. Das System bildet dabei eine Hybrid-Cloud, benötigte Ressourcen werden zusätzlich zu den eigenen Build-Hosts durch den Cluster-Auto-Scaler automatisch in der Cloud angefordert und wieder freigegeben. Für den Entwickler fühlt sich der Build-Server weiterhin wie ein einzelnes System an.
Der universelle Quantencomputer verspricht ein hohes Anwendungspotenzial im Bereich der Kryptografie, der selbst lernenden Verfahren und der Quantensimulation. Ein Quantencomputer kann potenziell Probleme lösen, die mit keinem anderen Verfahren lösbar sind. Erste Quantencomputer können bereits heute wie in herkömmlichen Cloud-Computing-Verfahren verwendet werden. Die größte Hürde zur Realisierung eines Quantencomputers ist momentan die hohe Anzahl an Qubits, die zur Fehlerkorrektur gebraucht werden. In dem Vortrag gebe ich einen Ausblick auf die vielfältigen neuen Möglichkeiten und diskutiere den momentanen Stand der Technik.
In dieser Session zeigt Max Schulte einen Einstieg in Single-Sign-on-Lösungen anhand von Keycloak bzw. RedHat SSO. Wo ist der Unterschied zwischen SAML und dem OpenID oder OAuth2 Standard, warum entscheidet man sich wofür und was ist eigentlich ein Bearer-Token? Diese und mehr grundlegende Fragen werden betrachtet und erörtert. Dieser Talk richtet sich an SSO-Neulinge und alle, die sich noch damit beschäftigen möchten. Anhand einer Beispielanwendung wird die Verwendung des von Red Hat entwickelten SSO gezeigt.
In vielen Unternehmen steht neben der Automatisierung von Geschäftsprozessen das verteilte bzw. abteilungsübergreifende Arbeiten im Fokus. Workflow-Engines führen Anwender durch fachliche Geschäftsprozesse und steuern, welcher Anwender welche Aufgabe zu welcher Zeit zu bearbeiten hat.
Verteilte Systeme sind in aller Munde und bringen neben Vorteilen auch bestimmte Hürden mit sich. Inwieweit können nunmehr Ende-zu-Ende-Geschäftsprozesse mit Benutzeraufgaben in verteilten Systemen abgebildet werden? Was bedeutet dies für die Gesamtarchitektur und wie können regional unterschiedliche (Sub-)Prozesse wie etwa die Zollabfertigung eingebunden werden, ohne einen BPM-Monolithen zu schaffen? Diesen Fragen möchte ich anhand von Praxiserfahrungen bei dem weltweit tätigen Logistikunternehmen Kühne + Nagel nachgehen und Designentscheidungen anhand von möglichen Architekturkonzepten und einer abschließenden Demo begründen.
Die ganze Welt nutzt Microservices! Die ganze Welt? Nein! Ein (gar nicht so kleiner) Teil der Industrie hat immer noch Monolithen im Einsatz. Es ist nicht immer sinnvoll oder möglich, diesen Monolithen in Microservices zu überführen. Was also tun, wenn der Monolith gesetzt ist, die Wartung zur Qual und jedes neue Release zur Zitterpartie wird? Basierend auf einer wahren Geschichte zeige ich in meinem Vortrag Möglichkeiten, einen Monolithen zu zähmen. Der Vortrag umfasst dabei organisatorische und technische Lösungen aus den Bereichen Architektur, Qualitätssicherung, Betrieb und Werkzeuge. Das Zielpublikum meines Vortrags sind jene Entwickler, die durch organisatorische Vorgaben oder Budgetbeschränkungen nur kleine Schritte in eine bessere Welt machen können.
Plötzlich ist Networking wieder cool! Trafficmanagement in verteilten Microservices-Applikationen ist nicht trivial und es gibt einige Stolpersteine zu beachten. In der Präsentation wird Steffan erläutern, wie Networking immer wichtiger wird, einige Ansätze erklären, wie das Problem bisher angegangen wurde, und helfen, den richtigen Ansatz für Ihre Anforderungen an Applikationen zu finden.
Die Präsentation endet mit einigen Beispielen von NGINX Unit, dem dynamischen Web- und Application-Server, der Anwendungen in mehreren Programmiersprachen ausführt und über ein RESTful JSON API dynamisch konfigurierbar ist.
What present day conference wouldn't have a track on containers and/or microservices? How many sessions would have a significant focus on the use of public, private, or discuss hybrid cloud? (Hint: lots of them). However, in the immortal words of Queen: "Is this the real life" or "is this just fantasy?" While the software industry has a long history of (sometimes over-promised) hype cycles promoting the "next big thing", we'll look at how the modern buzzwords of cloud-native are actually bringing measurable improvements to the development and operations disciplines in the enterprise.
In this talk, we'll specifically look at enterprise examples of how these capabilities are transforming companies both internally and externally. And what about open source? Clearly, everyone is utilizing open source, but what about giving back and prioritizing involvement in upstream communities? We'll answer these questions and more as we look at containers, cloud, microservices, and open source together!
The way we design, develop and run applications on Cloud Native platforms as Kubernetes differs significantly from the traditional approach. When working with Kubernetes, there are fewer concerns for developers to think about, but at the same time, there are new patterns and practices for solving every-day challenges. Last year we have looked mostly at foundational patterns for developing cloud native applications for Kubernetes. In this talk, we will we see how patterns like the Sidecar have evolved over the last year and are used nearly everywhere, building the backbone for infrastructure services like service meshes. In addition, we will look at the following new pattern categories: Behavioral patterns describe concepts for different types of applications; structural patterns are for structuring your cloud native application; advanced patterns for introducing concepts like operators and controllers. In the end, you will have a solid overview of how common problems can be categorized and solved with patterns when developing cloud native applications for Kubernetes.
Viele Product Owner und Teams kämpfen mit ihren wild gewachsenen Backlogs, die ihnen zunehmend die Reaktionsfähigkeit rauben. Meist nutzen sie Tools wie JIRA, um der unübersichtliche Menge an Einträgen Herr zu werden. Doch Tools verschleiern die Probleme oft nur: Immer wieder sondiert man in der stetig wachsenden Liste die relevanten Einträge von Karteileichen. Seitenlang beschriebene und kommentierte Tickets erscheinen so wertvoll, dass man sie nicht löscht und Konsolidieren zu aufwendig ist. Der Vortrag zeigt Probleme, Lösungsansätze, Tipps und Erfahrungen aus der Praxis, die bei einer effizienten Backlog-Pflege unterstützen. Im Fokus stehen konkrete Techniken, die uns beim Starten sowie beim Fortschreiben zu einem sauberen, übersichtlichen Backlog verhelfen. Wir sehen, wie wir das üblicherweise flache Backlog mit Hilfe offensichtlicher Kriterien strukturieren. Wir betrachten Aktivitäten wie das Akzeptieren, Verfeinern, Sortieren sowie Selektieren explizit und gelangen so zu einfachen Pflegeregeln.
Im letzten Jahr gab es kaum eine Umfrage über beliebte Sprachen und Technologien in der Kotlin nicht auftauchte. Warum sind Java-Entwickler begeistert von der Sprache? Warum wurde das Spring-Framework um Kotlin-Features erweitert? Viele Entwickler schätzen die kompakte Syntax und die pragmatischen Lösungen von typischen Java-Schmerzpunkten. Innovative Features ermöglichen es, NullPointerException's zu verbannen, vorhandene Klassen um Funktionen zu erweitern und mit verbesserten Lambdas eigene DSLs umzusetzen. Dieser Vortrag gibt einen kompakten Überblick über die Möglichkeiten der Sprache und diskutiert den Einstieg in die Entwicklung mit Kotlin.
Reactive Programming ist in der Enterprise-Java-Welt angekommen. Frameworks wie Akka und RxJava waren da Vorreiter, mit WebFlux und Project Reactor in Spring 5 ist ein weiteres prominentes dazugekommen. Aber was steckt eigentlich hinter Reactive Programming? Wann ergibt der Einsatz Sinn und wie kann ich es in bestehende Anwendungen integrieren?
Die Session gibt eine Einführung in das Programmiermodell, zeigt die Umsetzung in den verschiedenen Projekten, diskutiert, wann Reactive Programming Sinn ergibt, und liefert einen Ausblick, welche Themen im Bereich Reactive Programming in Zukunft kommen.
Wenn die entwickelte Software nicht den Performanceansprüchen genügt oder gar instabil läuft, dann müssen zügig die Ursachen analysiert werden. Hierbei helfen die unzähligen Java-Profiling- und -Analysewerkzeuge. Aber welches ist eine effektive Vorgehensweise, um nicht tagelang im Nebel zu stochern? Wie werden zum Beispiel GC-Logs erstellt und analysiert? Wie finde ich Memory Leaks in Heap Dumps, bevor dem Server die Puste ausgeht? Wie werden Thread Dumps interpretiert und existieren eventuell Dead Locks oder Thread-Content-Probleme? Bremsen eventuell SQL-Hotspots oder Transaktionssperren meine Anwendung aus? In dieser Session wird gezeigt, wie man sich systematisch einen Überblick über das Laufzeitverhalten einer Anwendung verschafft, um anschließend gezielt in die Detailanalyse gehen zu können.
Schreiben wir besser "+ 42" oder Integer.toString(42)? Wie viel Speicher spart man, wenn man intern() auf alle Strings anwendet? Wie reduziert String Deduplication den Memory Footprint und welche Nachteile handelt man sich dabei ein? Welches ist die maximale Länge eines konstanten Strings? Und wie sieht es bei einem dynamischen String aus? Wie viel schneller ist das neue StringBuilder().append("Hello ").append(name).toString() als "Hello " + name? Was sind Intrinsics und was haben sie mit Strings zu tun? Sind Strings wirklich immutable? Wie kann man effizient Substrings erzeugen? Diese und viele weitere Fragen werden in diesem Talk beantwortet.
Auch Microservices sind nicht die Lösung aller Probleme, sondern stellen Projekte vor einige Herausforderungen. Dieser Vortrag zeigt, warum Microservice-Projekte scheitern. Dabei geht es nicht nur um technische Gesichtspunkte, sondern ebenso um Aspekte wie Organisation oder Architektur. Natürlich zeigt die Session auch, wie man diese Klippen erfolgreich umschiffen kann, um Microservices gewinnbringend einzusetzen. Damit können die Teilnehmer typische Probleme in den Projekten frühzeitig erkennen und lösen.
Diese Session gibt eine Übersicht zum aktuellen Stand von JavaFX im Jahr 2019 und zeigt, wie das UI-Toolkit auch mit Java 11 oder Java 12 erfolgreich zum Erstellen von Java-basierten Desktopanwendungen genutzt werden kann. Dazu werden Informationen über die zukünftige Entwicklung und den Support von JavaFX gegeben und natürlich auch ein paar coole Demos gezeigt ;)
Eigentlich gibt es kein Entwicklungsteam, das nicht von sich behauptet, bessere Codequalität zu wollen. Aber ganz oft scheitert es schon daran, gemeinsam zu definieren, was das überhaupt bedeutet und wie man anfangen kann, wenn das Legacy-System, an dem gearbeitet wird, nicht schön aussieht. Wie kann man da also gezielt vorgehen, besser werden und sich dabei nicht durch die ganzen Fehler unterkriegen lassen, beziehungsweise zu viel auf einmal vornehmen? In diesem Vortrag werde ich einige Erfahrungen und Ideen vorstellen, wie man in solchen Situationen vorgehen und die Codequalität Schritt für Schritt verbessern kann. Dies soll eine pragmatische und flexible Richtlinie aufzeigen, da jedes Team eigene Anforderungen und Bedürfnisse hat. Ich werde zeigen, wie Codereviews als Startpunkt genutzt werden können, wo der Unterschied zwischen Coding-Styleguide und Coding-Guidelines liegt, welche Pair-Programming-Methoden helfen können, und welche Tools euer Leben erleichtern, statt euch nur abzulenken und eure Zeit zu verschwenden.
Die kontinuierliche Integration und Auslieferung von Software stellt in heterogenen IT-Landschaften eine große Herausforderung dar. Neben den passenden Tools und Technologien entscheidet zentral auch der abgestimmte Workflow über den Erfolg oder Misserfolg einer CI/CD-Pipeline. Wann hört der Buildprozess auf, wann fängt der Deploymentprozess an? An welchen Stellen werden Securityaspekte berücksichtigt? Wie genau laufen die Verantwortlichkeiten innerhalb eines DevOps-Teams? Diese und weitere Fragen werden in dieser Session diskutiert.
Geschäftsprozesse sind die Algorithmen unserer Unternehmen und ihre Automatisierung ein wichtiger Schritt zur Digitalisierung. Die Open-Source-Workflow-Engine Camunda BPM verspricht hier eine einfache Lösung, insbesondere zur Anbindung bestehender Fachanwendungen. Doch gilt das auch, wenn die Realität zuschlägt und man nicht nur modulare Microservices mit idealtypischen REST-Schnittstellen, sondern gewachsene Anwendungslandschaften und vielleicht sogar Hostsysteme orchestrieren muss? Auch hier verspricht Camunda eine hohe Flexibilität, über die wir aus unseren Erfahrungen berichten möchten. Bedarf es einer synchronen oder asynchronen Kommunikation? Gilt es, externe Bibliotheken einzubetten oder eine reine UI-Anwendung zu integrieren? Für die richtige Wahl der technischen Mittel skizzieren wir zunächst die zu betrachtenden Architekturdimensionen. Ausgestattet mit diesem Wissen durchleuchten wir die Möglichkeiten, die Camunda BPM zur Verfügung stellt: von einfachen Delegates über Connectoren bis hin zu External Tasks. Für alle Alternativen erklären wir anhand konkreter Codebeispiele, wie gut sich welche Architekturanforderungen erfüllen lassen. Zudem zeigen wir, wie sich verschiedene Arten von Systemschnittstellen, seien es Web-Services oder auch Robotic-Process-Automation-(RPA-)Lösungen für Hostsysteme, anbinden lassen. Damit Sie bei der Fülle an Möglichkeiten für Ihren Alltagseinsatz gut gerüstet sind, runden wir das Bild mit Erfahrungen und Entscheidungshilfen aus unseren Projekten ab.
Dass wir in einem Projekt zuerst die Software erstellen und danach die Spezifikation, kommt selten vor. Und wenn es vorkommt, geben wir es nicht zu, sondern erzählen die Geschichte von strukturierter, planmäßiger Vorgehensweise.
Und wenn wir es absichtlich tun? Wenn wir dadurch ein erstaunliches Tempo bei der Realisierung von Funktionalität erreichen? Wenn wir fachliche Annahmen sehr früh validieren können?
Dann … sind Anwender so begeistert, dass sie die Testinstanz produktiv nutzen. Dann werden echte Produktdaten erfasst und der Geschäftsprozess um mehr als eine Größenordnung beschleunigt. Dann steigen die Anwenderzahlen, weil die Umsetzungsgeschwindigkeit von Anpassungen revolutionär ist.
Dann … wird ein robuster Betrieb wichtig mit Logging, Monitoring und Zero-Downtime-Deployments. Dann rückt all das in den Fokus, was ein Prototyp nicht ist. Dann müssen wir aus dem Prototyp schrittweise ein Produktivsystem machen, ohne die bisherigen Vorteile zu verlieren.
Wir geben Ihnen einen ehrlichen Einblick in ein Projekt, dessen Dynamik uns überrascht hat. In dem vieles brillant lief, aber bei weitem nicht alles. Wir erzählen von der Transformation des Projekts und des Teams sowohl bei uns als auch bei unserem Auftraggeber.
Wir erzählen Ihnen, warum es manchmal wirklich besser ist, mit Coden zu beginnen!
Der Einstieg in Kotlin fällt den meisten Java-Entwicklern nicht schwer. Die neue Syntax für Klassen, Funktionen und Properties ist schnell verinnerlicht. Andere Sprachfeatures, wie 'Lambdas with Receiver', 'Delegated Properties' und 'Reified', erschliessen sich nicht ganz so einfach. Mit diesen und weiteren Innovationen ist es möglich, die eigenen Basisfunktionalitäten so umzusetzen, dass der fachliche Code kompakt und elegant aussieht. Dieser Vortrag zeigt anhand von vielen Codebeispielen, welche erweiterten syntaktischen Möglichkeiten Kotlin bietet und wie man diese sinnvoll einsetzt.
Kubernetes bietet eigene und einfach zu verwendende Deploymentstrategien. Damit ist es möglich, den Ablauf der Upgrades der eigenen Container im Deploymentobjekt zu hinterlegen. Dadurch ist es nicht nötig, auf externe Tools zum Upgraden der eigenen Container in Kubernetes zu wechseln. Zudem wären diese nur eingeschränkt nützlich. Wir schauen uns an, wie z. B.Rolling Updates, Blue/Green und Canary Deployments in Kubernetes realisiert werden können. Dazu verwenden wir: Deployments, Ingress und Services.
Jedes Scrum-Team hat die Aufgabe, seine Microservices zu deployen. Dazu muss es z. B. für Jenkins eine Pipeline, eine ‚Build-Chain‘, erstellen. Diese Aufgabe lenkt zum einen vom Erstellen der Businesslogik ab, zum anderen ist das Wissen für diese Tätigkeit nicht weit verbreitet. Verschiedene Qualitätsanforderungen an eine Build Chain haben entscheidend Einfluss auf ihr Aussehen und ändern ihren Charakter. Welchen Ansatz muss das Team wählen? Ist auch nichts vergessen? Ist die Chain performant, wartbar und testbar?
Spring Cloud Pipelines nimmt dem Team diese Entscheidung ab. Es erstellt nach einem Best-Practice-Ansatz automatisch eine Pipeline. Dabei fließen Erfahrungen aus vielen Projekten mit ein. Spring Cloud Pipelines unterstützt die Arbeit wie Spring Boot mit seinem ‚@IWantToGoHomeEarly-Konzept‘, nur eben beim Erstellen von Build-Pipelines. Der Talk beschreibt den Einsatz von Spring Cloud Pipelines und seinen Möglichkeiten. Außerdem erklärt er die sinnvolle Zusammenarbeit mit Spring Statemachine und gibt einen Einblick in dieses ebenso interessante Framework aus der Schmiede von Spring.
Viele Unternehmen kennen nur eine hierarchisch steuernde Organisationsform. In einem Markt, der nicht besonders dynamisch/gesättigt ist, ist diese Organisationsform häufig sehr effizient. In diesem Talk erläutere ich an Beispielen aus dem E-Commerce, wieso in heutigen Märkten diese Organisationsform, im Gegensatz zu komplett selbstorganisierten Teams, deutlich zu träge ist. Ich behaupte, dass solche etablierten Unternehmen lernen müssen, neben ihrer etablierten Organisationsform die von vollständig selbstorganisierten Teams zu erlernen, um in kritischen Geschäftsbereichen wettbewerbsfähig zu bleiben. Und ich beschreibe ein paar Vorbedingungen, die gegeben sein müssen, um diese Veränderung zu bewältigen.
Wenn Komponenten unserer Software miteinander kooperieren, dann folgen sie einem Vertrag (engl. Contract). Oft ist dieser Vertrag unspezifiziert und nur in den Köpfen der Entwickler vorhanden. Dies kann dazu führen, dass ein System im Zusammenspiel nicht funktioniert, obwohl die Einzelteile getestet sind und korrekt zu funktionieren scheinen. Um dieses Problem zu vermeiden, greifen manche Teams auf integrierte Tests zurück. Diese kommen jedoch mit ihrer eigenen, großen Menge an Kosten und Nachteilen. Eine Alternative stellen Contract- und Collaboration-Tests dar, die beide Seiten eines Vertrags auf Erfüllung der Vertragsbedingungen hin überprüfen. In diesem Vortrag stelle ich Möglichkeiten vor, wie wir als Entwickler solche Verträge automatisiert testen können. Dabei beginne ich mit klassischen Entwicklertests à la JUnit, um anschließend auf effektivere Methoden aus dem Bereich des Property-basierten Testens einzugehen.
Die MVC-1.0-Spezifikation hat eine turbulente Geschichte. Die ursprünglich für Java EE 8 geplante Spezifikation wurde Anfang 2017 von Oracle an die Community übergeben und seitdem aktiv weiterentwickelt. Obwohl MVC 1.0 kein offizieller Bestandteil von Java EE ist, liegt der Fokus doch auf einer starken Integration mit anderen Bestandteilen der Plattform, was MVC 1.0 zu einer sehr interessanten Technologie für viele Entwickler macht. Vor Kurzem ist die Spezifikation final verabschiedet worden. Der nächste Schritt wird aber bereits geplant, nämlich die offizielle Aufnahme von MVC 1.0 in Jakarta EE. Dieser Talk erzählt die Geschichte von MVC 1.0, zeigt was die Spezifikation zu bieten hat und wie die Arbeit am Community-JSR in der Praxis funktioniert. Praxisorientierte Beispiele zeigen, wie einfach mit MVC 1.0 eine Webanwendung erstellt werden kann und wie die Integration mit Java EE konkret aussieht.
In agilen Projekten kann es schnell vorkommen, dass man sich zu sehr auf das schnelle Liefern von Features konzentriert und dabei die Technical Excellence nicht beachtet wird. Wobei jedoch eins der zwölf Prinzipen aus dem Agile Manifesto „Continuous attention to technical excellence and good design enhances agility“ ist. Dies nicht zu beachten, wird nach und nach die Entwicklung verlangsamen, zu großen Refactorings und/oder zu schlecht wartbarem Code führen. Erfahren sie hier aus vielen Projekten bewährte Methoden, wie einerseits kontinuierlich Features entwickelt und gleichzeitig die technischen Schulden sinnvoll verwaltet werden können und auch eine Architektur definiert werden kann.
Für eine langfristig erfolgreiche Software sollten wachsende Nutzerzahlen, genauso wie neu entstehende Anforderungen von Anfang an mitgedacht werden.
Wie können wir verhindern, dass wir von Anfang an eine Infrastruktur für Millionen von Nutzern betreiben müssen und sind trotzdem für die Zukunft gewappnet? Wie können wir neue Anforderungen unabhängig und schnell umsetzen?
Wir zeigen Euch eine erfolgreich erprobte Architekturlösung für wachsende Infrastruktur und unabhängige Teams.
New tools and frameworks have popped up around workflow automation, sometimes framed as microservice or function orchestration engines. Many of these got their start "organically", where companies built a tool to solve their own problem. From Airbnb came Apache Airflow, from Netflix came Conductor, from Uber came Cadence, Amazon offers Step Functions, Google has Cloud Composer, and Camunda is working on Zeebe.
So workflow automation is far more than human task management or the "BPM dinosaur". In this talk I discuss typical use cases of workflow automation, dive into philosophies and flow languages of relevant tools, and show concrete code examples and live demos. I will not only wear a developer's hat but also look at operations, DevOps and the link to business stakeholders. Afterwards, you'll better understand the role of workflow automation in your project and have some initial criteria for selecting a tool.
As co-founder of a workflow automation vendor, I am definitely opinionated - but as workflow automation addict with 15 years of real-world experience, the presentation will be rooted in the frontline customer engagements that have formed those opinions.
.
KNative ermöglicht Serverless basierend auf Kubernetes Clustern. Bevor wir in eine Live Demo eintauchen diskutieren wir die folgenden Punkte:
Was ist die Motivation hinter dem ganzen?
Was ist KNative? Was ist es nicht?
Wann sollte man KNative verwenden?
Die drei Bausteine von KNative
In Microservice-Architekturen ist die Authentifizierung und Autorisierung mit Hilfe von OAuth 2.0 und OpenID Connect 1.0 (OIDC) inzwischen weit verbreitet. Doch wie lassen sich diese oft nicht ganz einfach zu verstehenden Standardprotokolle bzw.Frameworks sicher in eigene Anwendungen integrieren?
Dieses Session besteht aus zwei Teilen:
Im ersten Teil wird Andreas Falk nach einer kurzen Einführung in die Grundkonzepte von OAuth 2 und OIDC über die neuesten Erkenntnisse und Best-Practices aus der OAuth2/OIDC-Community berichten.U.a. wird hier auf den aktuellen Stand der Diskussion um den Einsatz des Implicit Flows eingegangen. Ergänzend dazu werden weitere OAuth2 Specs vorgestellt, die aktuell erarbeitet werden.
Im zweiten Teil wird es in einer Live Demo darum gehen wie aktuelle Frameworks, hier am Beispiel von Spring Security 5, die einfache und sichere Integration von OAuth 2 und OpenID Connect in eigene Anwendungen für Entwickler vereinfachen.
Most non-trivial software systems suffer from significant levels of technical and architectural debt. This leads to exponentially increasing cost of change, which is not sustainable for a longer period of time. The single best thing you can do to counter this problem is to carefully manage and control the dependencies among the different elements and components of a software system. This session will first look at the major reasons why so many systems end up in an unmaintainable state and then look at different strategies for better code organization. We will first consider module systems like Java 9 or OSGi. Then we will look at a new innovative domain specific language to describe software architecture that allows to define an enforceable architectural blueprint for any software system. As a takeaway, you will understand the limitations of module systems used for architectural purposes.
Wenn wir digitale Produkte bauen, geben wir uns oft irrelevanter Informatikerromantik oder Designerfantasien hin. Darüber hinaus ist „Output“ oft wichtiger als „Outcome“: Berge von Features werden über Monate – wenn nicht Jahre – hinweg gebaut, ohne Validierung durch echte Nutzer. Das endet häufig in mittelmäßigen Produkten, die oft nichts zu Geschäftszielen beitragen und lediglich Kopfschmerzen bei allen Beteiligten verursachen. In diesem Vortrag zeigen wir, wie sich Irrwege in der Produktentwicklung vermeiden lassen, damit wir endlich die richtigen Dinge bauen, anstatt nur die Dinge richtig zu bauen.
Der klassische Ansatz, Software als einen großen, unternehmensweiten Monolithen zu bauen, hat sich als Irrweg erwiesen. DDD und sein strategisches Design zeigen uns, dass es besser ist, die Domäne in sogenannte Bounded Contexts aufzuteilen. Diese enthalten kleinere Modelle, die einfacher zu verstehen sind, weniger fehleranfällig und von mehren Teams parallel entwickelt werden können. Mit Project Jigsaw und dem daraus resultierenden Java Platform Module System steht uns seit Java 9 endlich ein Modulmechanismus zur Verfügung, mit dem wir Bounded Contexts direkt im Quellcode ausdrücken können. In diesem Talk betrachten wir, wie wir uns das zunutze machen und ein sauber entworfenes und geschnittenes Domänenmodell implementieren können. Das kann eine Vorstufe zu oder ein Ersatz für Microservices sein.
Microservices gut zu schneiden, ist nach wie vor eine der größten Herausforderungen, wenn wir über solche Architekturen nachdenken. Heute stehen Lösungsmuster wie Sidecar oder Access-Tokens zur Verfügung, die sich in verschiedenen Bereichen bereits bewährt haben. Insbesondere in den übergreifenden Bereichen wie Cross-cutting Concerns oder Security können Implementierungen solcher Lösungsmuster immer wieder verwendet werden – auch wenn sich die Domänen ändern. Auch Lösungen für Reporting oder Monitoring werden immer gebraucht. Die Session diskutiert verschiedene Lösungsmuster anhand von Beispielen für solche übergreifenden Bereiche, sodass sie im nächsten oder laufenden Projekt verwendet werden können.
Wahrscheinlich jede IT steht (oder stand) vor der Entscheidung, ob oder eher wann ein Container Scheduler wie z.B. Kubernetes eingeführt werden soll. Das technische Zielbild formt sich dabei relativ schnell, aber wie sieht es mit der Migration bestehender Systeme aus? Muss ich all meine Spring-Anwendungen auf Spring Boot portieren? Wie kann die Migration hin zu Docker und Kubernetes im laufenden Betrieb vollzogen werden? Wie nehme ich die gesamte Entwicklungsmannschaft mit? Wie kann ein inkrementelles Onboarding aussehen?
Bei Shopping24 kommen wir von einem klassischen Set-up mit Baremetal- und virtuellen Servern und haben in zwölf Monaten unsere gesamte Infrastruktur auf Docker und Kubernetes umgezogen. In diesem Talk beschreibe ich die inkrementellen Schritte der Migration von ersten Gehversuchen auf dem CI-Server hin zum Multi-Cluster-Set-up von Kubernetes. Ich beleuchte die Learnings im Betrieb von Kubernetes und CEPH, die Lernkurve der Entwickler, aber auch den tiefgreifenden Shift in der Betriebsverantwortung innerhalb der IT.
"Wir brauchen unbedingt Kafka!", "Ohne Service Discovery geht hier gar nichts!", "Das muss das Ops-Team machen, das dauert vier Wochen!" - Solche oder ähnliche Sätze fallen eigentlich in jedem Projekt, und erstaunlicherweise meist schon in einer sehr frühen Phase. Aber wollten wir nicht gerade das BDUF (Big Design Up-front) mit Methoden wie Scrum oder DevOps überwinden und uns um die wesentlichen Themen kümmern? Sollten wir nicht erst einmal herausfinden, ob sich die Endkunden überhaupt für das Produkt interessieren, bevor wir eine Menge Zeit und Geld in der Aufbau einer Infrastruktur investieren, die dann im schlimmsten Fall am Ende ungenutzt herumliegt? Und wäre es nicht deutlich wichtiger, dass Menschen miteinander reden anstatt Maschinen? Nach rund fünfzehn Jahren als Softwareentwickler und -architekt habe ich erkannt, dass die Bezeichnung Softwaretherapeut für meinen Job wirklich sehr passend wäre. Darum möchte ich keine trockene Theorie präsentieren, sondern meine Erfahrungen weitergeben und erzählen, was ich im Projektalltag rund um DevOps, Microservices, Cloud-Migrationen, Architekturen und Kultur funktionieren und vor allem auch scheitern sehen habe. Da diese Berichte selbstverständlich hochgradig subjektiv sind, erhoffe ich mir, Denkanstöße setzen und Diskussionen anregen zu können.
Die Auskunftsfähigkeit zu laufenden und abgeschlossenen Prozessinstanzen, nicht nur gegenüber dem Kunden, wird mit komplexeren Abläufen und mehr Beteiligten immer wichtiger!
In diesem Vortrag stellen wir kurz die Entwicklung von den Anfängen der Prozessautomatisierung hin zu den aktuellen, detailierten Prozessmodellen in der AXA dar. Dabei gehen wir insbesondere auf die Ansprüche verschiedener Stakeholder ein, die auf Prozessdaten und -status zuzugreifen.
Wir erläutern unsere aktuelle Berechtigungsstruktur, die gesetzlichen Bestimmungen (Versicherungsgesetzgebung, Datenschutz, ...) abbildet und zusätzliche, interne Vorgaben berücksichtigt. Danach gibt es eine Livedemonstration der tatsächlichen Implementierung anhand von Beispielprozessen in Camunda.
Zwar gibt es mit Frameworks wie DL4J und Smile mächtige und umfangreiche Machine Learning Frameworks für die JVM, dennoch kann es in der Praxis vorkommen, dass der Einsatz von TensorFlow notwendig wird. Dies kann z. B. der Fall sein, wenn es einen bestimmten Algorithmus nur in einer TensorFlow-Implementierung gibt und der Portierungsaufwand in ein anderes Framework zu hoch ist. Zwar interagiert man mit TensorFlow über ein Python API, die zugrundeliegende Engine jedoch ist in C++ geschrieben. Mit Hilfe der TensorFlow-Java-Wrapper-Bibliothek kann man deshalb sowohl Training als auch Inferenz von TensorFlow-Modellen aus der JVM heraus betreiben, ohne auf Python angewiesen zu sein. So können bestehende Schnittstellen, Datenquellen und Infrastruktur mit TensorFlow integriert werden, ohne die JVM zu verlassen. Die Codebeispiele dieses Vortrages sind in Kotlin umgesetzt, aber das Vorgehen lässt sich auf jede JVM-Sprache übertragen.
CompletableFutures are the rage today. We use them to describe complicated concurrent workflows. For example, HttpClient in Java 11 returns them when we send asynchronous requests. They can also describe parallel divide and conquer workflows. In this talk, we will start by parallelizing a large Fibonacci calculation with Fork/Join. We will then change java.math.BigInteger to multiply in parallel. You will learn how to patch with the new modules system. Then we will show the issues with Fork/Join and show a solution based on CompletableFuture. This talk will be interesting for intermediate to advanced Java programmers.
In today's world, most developers, architects, and others do things over the internet and over HTTP at least occasionally. New and improved HTTP protocols and new transport protocols for that are of course very likely to affect the majority of them.
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, primarily by changing the transport layer. HTTP/3 is the first major protocol to step away from TCP and use QUIC instead.
Would you fly in a plane designed by a craftsman or would you prefer your aircraft to be designed by engineers? Engineering is the application of iterative, empirical, practical science to real-world problems. Craftsmanship is a wonderful thing, and as a reaction to the terrible abuses of the term Engineering in software development, Software Craftsmanship has helped in our learning of what really works.
The term "Software Engineering" has gained a bad reputation. It implies big up-front design and mathematically provable models in place of working code. However, that is down to our interpretation, not a problem with Engineering as a discipline.
In recent years, we have discovered what really works in software development. Not everyone practices approaches like Continuous Delivery, but it is widely seen as representing the current state-of-the-art in software development. This is because at its root, CD is about the application of an iterative, practical, empirical, maybe even science-based approach to solving problems in software development. Is this a form of Software Engineering?
Software isn’t bridge-building, it is not car or aircraft development either, but then neither is Chemical Engineering, neither is Electrical Engineering. Engineering is different in different disciplines. Maybe it is time for us to begin thinking about retrieving the term Software Engineering, maybe it’s time to define what our Engineering discipline should entail.
This isn’t a talk about microservices, NoSQL, container solutions or hip new frameworks. This talk will show some of the standard Java APIs that are part of Java since version 5, 6, 7 or 8. All those features are very helpful to create maintainable and future-proof applications, regardless of whether JavaEE, Spring, JavaFX or any other framework is used. The talk will give an overview of some important standard concepts and APIs of Java like annotations, null values and concurrency. Based on an overview of these topics and some samples, the talk will answer questions like: How can I create my own annotations? How can I create a plugin structure without using frameworks like OSGI? What’s the best way to handle NullPointerExceptions? How can I write concurrent code that is still maintainable?
Serverless ist cool und bringt viele Vorteile. So weit, so gut. Doch über der Serverless-Welt hängt für viele immer noch das Schwert des Damokles mit der Aufschrift „Vendor lock-in“. Dass dem nicht so sein muss und wie man auch in einer Multi-Cloud-Umgebung mit Serverless glücklich und erfolgreich Apps betreiben kann, zeige ich in dieser Session. Dabei gehe ich auf anbieterspezifische APIs ein und die Frage, ob und wie man sie umgehen kann. Zusätzlich zeige ich, wie man mit Hilfe eines Event-Gateways die einzelnen Events in seiner Mulit-Cloud und sogar in seiner eigenen Infrastruktur verteilen kann, ohne dass die Konsumenten des APIs davon etwas mitbekommen. Vendor lock-in war gestern. #LessSlides #MoreLive
Spendiert man jedem Microservice seine eigene Datenbank (Database per Service Pattern), läuft man irgendwann unweigerlich in das Problem verteilter Businesstransaktionen. Die gute alte DB-Transaktion fällt per Definition aus dem Rennen. Lässt sich also aus fachlicher Sicht ganz auf Transaktionen verzichten? In vielen Fällen ist das durchaus möglich. Als Alternative zur Sicherstellung Service-übergreifender Datenkonsistenz bietet sich u. a. eine Realisierung auf Basis mehrerer lokaler, technischer Transaktionen an, auch "Saga-Pattern" genannt. Die Session führt in die Theorie des Saga-Patterns ein und zeigt dessen praktische Verwendung an verschiedenen Beispielen.
Docker verändert die IT Welt aktuell wie keine andere Technologie. Aus Servern werden Container, die bereits in der Entwicklung erstellt werden. Dies stellt den Betrieb vor neue Herausforderungen.
Wir zeigen live und in Echtzeit, wie Sie eine bestehende Anwendung dockerisieren und in ein Docker-Swarm-Cluster deployen. Verfolgen Sie die spannende Reise einer Spring-Boot-Anwendung in das Docker-Swarm-Cluster.
Zielsetzung:
In der Softwareentwicklung ist nichts so beständig wie der Wandel: Die letzten Jahre waren geprägt vom Microservice-Trend und der damit verbundenen Abkehr von schwergewichtigen, monolithischen Anwendungen hin zu kleineren, Cloud-basierten Services und zuletzt zu Serverless Computing.
Hilfe bei der Umsetzung dieser Konzepte bieten Microframeworks. Darunter versteht man minimalistische Frameworks zum Bau von leichtgewichtigen, modularen Anwendungen. Im Gegensatz zu Full-Stack-Frameworks liegt ihr Fokus in der Einfachheit und Geschwindigkeit für die Entwicklung.
In letzter Zeit gewinnen Microframeworks auf Basis der JVM wie beispielsweise Javalin, KTor, Spring Fu oder Micronaut an Bedeutung.
Sie zeichnen sich insbesondere durch eine kurze Startzeit und einen geringen Speicherverbrauch aus. Das macht sie nicht nur für die effiziente Entwicklung von Microservices interessant, sondern auch für Serverless Computing, da hier eine geringe Kaltstartzeit ein ganz entscheidender Faktor ist.
In der Session werden JVM-Microframeworks und mögliche Einsatzszenarien vorgestellt. Anschließend werden verschiedene Frameworks anhand konkreter (Code-)Beispiele genauer erläutert. Die Teilnehmer erwarten somit neben einem generellen Überblick auch ganz praktische Impulse, wie sie selbst mit dem Thema JVM-Microframeworks starten können.
TypeScript is mostly known for being a strongly-typed JavaScript. While this is certainly a viable view of the language, it ignores the view that TypeScript has a unique place among languages, that of being strongly-typed on top of a weakly/untyped platform. This enables TypeScript to do some language syntax and implementation that would be difficult, if not impossible, to do in traditional strongly-typed languages. In this session, we will explore some of these language features, see how we can design with them, and explore the beauty that is TypeScript on its own.
How can we improve the efficiency of an existing web application? We could completely rewrite it, leverage more concurrency and even reactive features. But is it really worth it if we don't even measure and track the relevant metrics? In this talk, Stéphane will work on an existing Spring Boot MVC application to make it more efficient. He'll replace `RestTemplate` with `WebClient` and use Reactor operators to improve efficiency, without the concurrency pitfalls. He'll use out-of-the-box metrics, add new ones to measure, and keep an eye on capacity gains with dashboards.
Die Migration unternehmenskritischer Anwendungen in die Cloud führt zu einer zunehmenden Komplexität hinsichtlich der Schnittstellen, welche automatisiert werden müssen. Mit dem Open Service Broker API hat sich ein Open-Source-Projekt formiert, das sich zum Ziel setzt, über ein standardisiertes API verschiedene Cloud Services (Services der internen IT) für Entwickler zur Verfügung zu stellen. In diesem Talk wollen wir einen Erfahrungsbericht sowie konkrete Beispiele geben, wie sich das OSB API in der Praxis beweist, wo es noch hakt und wo es Verbesserungspotenziale gibt.
Scrum, KanBan, DevOps, … Jedes Unternehmen ist heutzutage agil – aber sind sie es wirklich? Ohne agile Entwicklung scheint es nicht mehr zu gehen – aber wie soll man diese in bestehende Prozesse, Strukturen und Hierarchien einordnen? Wie soll man in Großprojekten agil entwickeln und wie sich als Manager von agilen Teams verhalten? All diese Herausforderungen werden in dem Vortrag thematisiert und mögliche Lösungswege dargestellt.
The production of software is a complex, collaborative process that stretches our ability as human beings to cope with its demands. Many people working in software development spend their careers without seeing what good really looks like.
Our history is littered with inefficient processes creating poor quality output, too late to capitalise on the expected business value. How did we get into this state? How do we get past it? What does good really look like?
Continuous Delivery changes the economics of software development for some of the biggest companies in the world, whatever the nature of their software development, find out how and why.
When we talk about prices, we often only talk about Lambda costs. But we rarey use only Lambda in our applications. Usually, we have other building blocks like API Gateway, data sources like SNS, SQS or Kinesis and Log service (Cloud Watch). Also, we store our data either in S3 or in serverless databases like DynamoDB or recently in Aurora Serverless. All these services have their own price models which we have to pay attention to. Moreover, we have to consider application data transfer costs. In this talk, we will draw the complete picture about the costs in the serverless applications, look at the Total Cost of Ownership and make some recommendations about when it's worth using serverless and when the traditional approach (EC2, Container).
Den Chancen, die der Microservices-Ansatz bietet, stehen auch einige Herausforderungen gegenüber, die man aber gut mit Frameworks handhaben kann. Mit Micronaut hat nun ein ganz neuer Vertreter die Bühne mit dem Versprechen betreten, modulare, leicht testbare und sehr performante Anwendungen in Java, Kotlin oder Groovy entwickeln zu können.
Auch wenn Micronaut dem Platzhirsch aus dem Spring-Ökosystem ähnlich sieht, wurde es von Grund auf explizit für die Erstellung von Microservices im Cloud-Computing-Umfeld erstellt. Dank extrem kurzer Startzeiten, einem enorm niedrigen Speicherverbrauch und sehr kleinen JAR-Größen wird es die Microservices-Welt umkrempeln.
Ermöglicht wird das neuartige Programmiermodell mittels Compile-Zeit-Metaprogrammierung, wodurch die Metadaten für beispielsweise Dependency Injection und die aspektorientierte Programmierung bereits beim Kompilieren erzeugt werden. Reflection, Proxy Generierung und Data Caching zur Laufzeit entfallen dadurch. Zur Verwendung in der Cloud oder Serverless-Umgebungen gibt es zudem bereits zahlreiche fertig gestellte oder geplante Anbindungen an Service-Discovery-Dienste, Configuration Sharing, Load Balancing und Serverless Computing.
Im Rahmen dieser Session wollen wir uns die Funktionsweise näher anschauen und anhand von realistischen Codebeispielen und Performancemessungen im Vergleich zu anderen JVM-basierten Microservices-Frameworks auf den Prüfstand stellen.
Test-driven Development ist keine Mode, sondern professionelle Entwicklung. Welche Herausforderungen und passende Lösungen es dabei vor allem in Bezug auf JavaScript-Anwendungen im Browser gibt, wird in diesem Vortrag vermittelt. Neben einem Überblick der zur Verfügung stehenden Werkzeuge wird anhand von Codebeispielen eine Einführung in den Einsatz in eigenen Projekten vermittelt. Tipps aus der Praxis zu Best Practices im Umgang mit Tests bei Webanwendungen helfen, Stolperfallen von Anfang an zu vermeiden. Als Referenztechnologien werden Angular und React herangezogen und anhand von Beispielen die konkrete Umsetzung demonstriert - eine Übertragung auf andere Frameworks ist jedoch leicht möglich. Damit ist für jeden, der sich mit Tests beschäftigen möchte, etwas dabei.
Once, long ago, we looked upon serialisation as an important part of Java. As the years passed, we began to recognise the flaws in its design and sighed. Today we realise that the story of serialisation has become a dark and twisted tale. In this session you will see why we still need serialisation, how the inbuilt design is fatally flawed, and how it is being exploited and used against us. Learn how to work against the dark arts railed against us and understand how even the alternative forms of Java serialisation can still be open to attack. Does this tale have a happy ending? Can goodness prevail and can you make your application safe from Java serialisation weaknesses? Only you can decide.
In den meisten Projekten gibt es irgendwo eine Dokumentation der Architektur und der Code-Conventions. Die Frage ist nur: Wo? Und sind die Beschreibungen aktuell? Hält sich der Code wirklich daran? In der Praxis ist solche Dokumentation leider allzu häufig "write-only" und hat mit der Realität nur noch entfernt zu tun. Viel schöner wäre es doch, wenn die Vorgaben automatisiert geprüft werden könnten. Beispielsweise in Form von Unit-Tests, die von den Entwicklern zusammen mit der Anwendung gepflegt und angepasst werden, als Teil einer "Living Documentation".
Mit ArchUnit können die typischen Architekturvorgaben mit einer Fluent-API als Regeln definiert und z. B. in JUnit getestet werden. Dazu gehören Schichten und fachliche Schnitte, deren erlaubte und verbotene Abhängigkeiten sowie Zyklenfreiheit. Außerdem können Code-Conventions wie Namen von Elementen, die Zuordnung von Klassen zu Packages und die Verwendung von Annotationen und Exceptions geprüft werden. Bestehende Regeln können so nicht nur mit Unit-Tests festgezurrt, es können auch Ausnahmen definiert werden. Vorhandener Code kann so nach und nach an die Vorgaben angepasst werden, z. B. als Vorbereitung einer Modularisierung - und das auch mit älteren Java-Versionen. Neben der allgemeinen Vorstellung von ArchUnit bietet dieser Vortrag Tipps aus der Praxis - inkl. Live-Coding.
Die Integration von Microservices und überhaupt der Umgang mit verteilten Systemen ist nicht trivial. Im Vortrag werde ich drei Herausforderungen aus unserem Projektalltag skizzieren und diskutieren, wie man diese meistern kann.
In der Session gibt es nicht nur Folien, sondern viele konkrete Live-Coding-Beispiele!
Big Data ist der Treibstoff für Deep Learning. Aber was kann ich tun, wenn meine vorhandenen Datenmengen zu klein sind, um die Parameter meines Machine-Learning-Modells ausreichend zu trainieren? Dies ist eins der größten Hindernisse auf dem Weg zum erfolgreichen Einsatz von Machine Learning.
In dieser Session werden für Deep-Learning-Anfänger und Machine-Learning-Praktiker die Herausforderungen von kleinen Datensets anschaulich erläutert.
Anschließend werden Strategien vorgestellt, die auch mit Small Data zum Erfolg führen. Dabei wird gezeigt, wie man mit Hilfe von verschiedenen Data-Augmentation-Verfahren seinen Datensatz vergrößern kann. Auch der Einsatz von vortrainierten neuronalen Netzen und Transferlearning wird vorgestellt, damit Small Data nicht zu einem großen Problem wird.
This talk is a live coding where I will show how to gradually transform a Spring Boot application developed with Java, annotations and JPA to an idiomatic Kotlin application that will leverage Coroutines, WebFlux, Kofu configuration DSL (from Spring Fu incubator) and R2DBC (Reactive SQL).
I will introduce the official support for Coroutines in Spring (Framework, Boot, Data) as well as Kofu, the Kotlin DSL developed in the Spring Fu incubator I have created a few months ago. It allows to configure Spring Boot applications explicitly and make them even more efficient. I will also give an update about GraalVM native images support for Spring Boot applications.
Since Oracle announced in October 2017 that they would open source Java EE at the Eclipse Foundation under the name of Jakarta EE, a lot of things have happened! Many Java EE leaders and the wider Java community have taken part and gotten very interested and excited about the new opportunities Jakarta EE is bringing. With other cloud native projects at Eclipse Foundation, including Eclipse MicroProfile, the Java EE community can now dive into cloud native architecture application development.
Come and learn about Jakarta EE status, the upcoming Jakarta EE 8 release, and the opportunities for community involvement and participation going forward. We are looking for you to start innovating for Jakarta EE 9 as well! Please join the talk so we can start working together, building the future of Cloud-native Java.
Die Migration von Softwaresystemen stellt Unternehmen vor technische und organisatorische Herausforderungen und birgt ein erhebliches unternehmerisches Risiko, falls die Migration fehlschlägt. Neben der technischen Konzeption der Migrationssoftware sind u. a. Themen wie die fachliche Erhebung und Verwaltung der Migrationsregeln, die Datenbereinigung in der Altanwendung, ein frühzeitiger Test mit Echtdaten und die Bildung von Prüfkennziffern zentrale Aufgaben eines Migrationsprojekts. Im Rahmen des Vortrags werden diese Aspekte aufgegriffen und insbesondere ein technisches Konzept unter Berücksichtigung der horizontalen Skalierbarkeit, schnellen Anpassbarkeit, Wiederaufsetzbarkeit und stufenweisen Migration vorgestellt.
Würden Sie sagen, dass die Benutzung von kubectl dem entspricht, was man landläufig eine gute "developer experience" nennt ? Oder würde sie sagen, dass Container Scheduler inzwischen simple Handelsware sind?? Wenn Sie die erste Frage mit "nein" und die Zweite mit "Vielleicht" oder "Ja" beantwortet haben, dann ist dieser Vortrag genau richtig für Sie! Wir werden zeigen, wie "Projekt Eirini" austauschbare Container Scheduler mit der berühmten Cloud Foundry developer experience vereint und damit die Einfachheit von "cf push" mit dem Goldstandard der Container orchestrators (Kubernetes) verheiratet. Damit wird natürlich eine hervorragende DevOps Platform für ihre Entwickler und ihren Betrieb erschaffen, und wir diskutieren, was das für Ihre Entwickler (nicht viel) und für Ihren Betrieb bedeutet (potenziell eine ganze Menge). Mehrere Live-Demos von Eirini auf Kubernetes begleiten den Talk - verfolgen Sie die Reise ihres Codes von ihrem Laptop hin zu first-class deployments, pods and services in Ihrem Kubernetes Cluster - mit einem einzigen Kommandozeilen-Befehl.
Events fundamentally change the way we build systems. As a means of communication they loosely couple microservices together, meaning sections of an architecture become isolated from the failure semantics of the rest. As a data model they tie communication and storage together via a technique called event sourcing, which retains information exactly as it happened, primed for future use cases or for analytics. Events also imply motion: Data moves from one application to another, with stream processors used to manipulate these data flows as they progress. Finally, events are the backbone of serverless architectures. A programming model that is likely to be pervasive in our future.
In this talk, we’ll look at the relationship between these different aspects of the humble event, providing insight into why the paradigm is important now, as well as reflecting on its inevitable positioning in our future.
Laut mehrerer Umfragen ist fehlende Dokumentation ein großes Hindernis für den Einsatz von Open-Source-Software. In diesem Vortrag wird gezeigt, wie Sie einfach für Ihr Produkt, egal ob Open oder Inner Source, verschiedene Arten von Dokumenationen erzeugen. Dazu werden die gleichen Tools und Ansätze verwendet, wie sie schon zur Entwicklung des Codes Ihres Produkts eingesetzt werden. Damit können Sie die Qualität Ihrer Dokumentation erhöhen und gleichzeitig den Aufwand zur Pflege reduzieren. Anhand des Beispiels einer Architekturdokumentation zeigt Ralf, wie Sie mit dem arc42-Template im AsciiDoc-Format und Gradle als Build-Tool einfach Diagramme in Ihre Dokumentation integrieren, stakeholderspezifische Dokumente erzeugen und verschiedene Ausgabeformate generieren. Zum Schluss werden die Dokumente noch zu einer hübschen Website zusammengeführt.
This session examines both the open future and the current ecosystem of Java. As technology advances in the cloud, so do the ways it is developed and delivered. What are the implications of new communities replacing much of the old governance around Java? What are the consequences of having multiple vendors of OpenJDK or the emergence and growth of a disparate set of views about what cloud-native actually means? It's an exciting time for Java as so much new technology and ideas are evolving, but it's a scary time for Java developers, too. What should you learn next? What's on the up or the down? The changing business landscape around Java support in the industry is shaking things up! In this talk, see the facts and figures that outline what the Java ecosystem looks like and where it could be heading. This talk will help you answer this important question: Will the Java community continue to rise to the challenge of keeping Java vital, healthy, and moving forward or is there a darker future ahead?
Das Big-Data-Ökosystem ist komplex und nur schwer überschaubar. Theoretische Annäherungen erlauben es oft kaum zu bewerten, ob eine Technologie für den eigenen Anwendungsfall geeignet ist. Durch die praktische Beschäftigung mit den Technologien kann das Verständnis stark verbessert werden. Diese Session zeigt wichtige populäre Technologien wie unter anderem HDFS, Hive, Avro, Spark, Sqoop, Kafka und Power BI in einer nachvollziehbaren Live-Demo. Anhand eines konkreten Szenarios wird gezeigt, welche Aufgaben die verschiedenen Technologien haben und wie das Zusammenspiel funktioniert. Die Teilnehmer sollen erkennen, welche Anwendungsfälle für Big-Data-Technologien geeignet sind und ob sich der Einsatz im eigenen Unternehmen lohnt.
Wenn ein API erst einmal live ist, ist es nicht mehr so einfach, es zu ändern. Doch jede noch so gut definierte Schnittstelle kommt irgendwann an den Punkt, an dem sie weiterentwickelt werden muss; sei es nur, weil sich die Anforderungen geändert haben. Dann stellt sich die Frage, ob die Schnittstelle abwärtskompatibel weiterentwickelt werden kann oder ob eine neue Version gebaut werden muss. Wie muss sich dann der Client verhalten, damit er weiter funktioniert? Neben den technischen Herausforderungen, die zu meistern sind, stellt diese Session aus der Praxiserfahrung heraus vor, welche Konzepte in Enwicklung, Dokumentation und Deployment verwendet werden können, um client- und serverseitig nicht in der Versionshölle zu landen.
Mit Spring Framework 5.1, Spring Boot 2.1 und Java 11/12 entwickelte Reactive Microservices versprechen nicht zuletzt aufgrund des neuen Reactive-Stacks eine bessere Performance und mehr Stabilität unter Last. Doch wie groß sind die Vorteile tatsächlich und wann lohnt sich eine Umstellung der Architektur für ein Projekt? In dieser Session wird gezeigt, wie sich Reactive Services zu den klassischen Servlet-Stacks unter Last verhalten. Anhand von Performancemessungen in der AWS-Cloud wird gezeigt, wie Benchmarks für die verschiedenen Optionen erstellt werden und mit welchen Handgriffen bestimmt wird, ab wann sich eine Umstellung lohnt.
Seit dem 25. Mai 2018 ist die EU-Datenschutz-Grundverordnung (EU-DSGVO) in Kraft getreten. Bei der EU-DSGVO handelt es sich um eine Verordnung und nicht um ein Gesetz und es muss nicht in nationale Gesetze überführt werden. Die Datenschutz-Grundverordnung regelt insbesondere den generellen Umgang mit Daten und stärkt insbesondere die Rechte der Betroffenen. Neben den Rechten der Betroffenen regelt die DSGVO auch die Rollen der Verantwortlichen und Auftragsverarbeiter. Insbesondere fordert die DSGVO in Artikel 25 den Datenschutz durch Technikgestaltung - Privacy by Design - und durch datenschutzfreundliche Voreinstellungen - Privacy by Default. Sowohl Privacy by Design als auch Privacy by Default sind keine neuen Begriffe, jedoch erlangen sie mit der DSGVO eine wesentlich höhere Bedeutung. Beide sind mit der Einführung der DSGVO kein Nice-to-have sondern müssen frühzeitig in Projekten, bei denen personenbezogene Daten verarbeitet werden, explizit berücksichtigt werden. Dieser Vortrag stellt die Privacy-by-Design-Prinzipien dar und zeigt auf, welche Auswirkungen diese auf Architekturen/das Design von Systemen haben.
Webanwendungen sind unter ständigem Beschuss. Sie sind Einfallstore für Angriffe aus dem offenen Netz. Was kann getan werden, um frühzeitig und effektiv Sicherheit in die Anwendung zu bringen? Wie kann eine dynamische Abwehr proaktiv helfen?
Ziel des Vortrags soll sein, sowohl Entwickler als auch Produktverantwortliche dafür zu sensibilisieren, wie einfach manchmal unsere Software gehackt werden kann. Im Vortrag wird anschaulich dargestellt, wie Hacker eine Anwendung angreifen und welche Tools sie dafür zur Verfügung haben. Außerdem wird gezeigt, wie man sich vor Angriffen schützen kann und welche Abwehrmaßnahmen es gibt.
Shenandoah ist ein Garbage Collector der seit Java 12 standardmäßig mitgeliefert wird. Der ist "ultral-low pause" - wow, das klingt toll! Aber was bedeutet es genau? Sollte man diesen bei sich im Projekt einsetzen? Und warum gibt es überhaupt noch einen weiteren Garbage Collector?
Diese und weitere Fragen werden in diesem Vortag erläutert. Es werden keine Garbage-Collector-Kenntnisse vorausgesetzt. Dieser Vortrag wird von Grund auf aufgebaut und geht nach und nach in die Tiefen von Shenandoah. Die Funktionsweise wird durch sehr viele Bilder und Animationen dargestellt.
Die Implementierung wird im Detail erklärt. Dabei wird klar, warum ein weiterer Collector entwickelt wurde und wann der Einsatz sinnvoll ist.
Process Engines mit Unterstützung von BPMN (Business Process Model and Notation), wie z. B. Camunda, erfreuen sich immer größerer Beliebtheit. Durch die systemgestützte Ausführung von Unternehmensprozessen fällt eine Menge Prozessdaten an, deren Nutzung ein großes Potenzial für die Optimierung der Prozesse bietet. In diesem Talk zeigen wir, wie wir mit Hilfe von Apache Spark eine leistungsfähige Pipeline zur Vorverarbeitung von Prozessdaten realisiert haben, um damit Machine-Learning-Algorithmen in H2O anlernen zu können. Diese können in verschiedenen Stufen zur Unterstützung und Optimierung von Unternehmensprozessen eingesetzt werden. Zudem zeigen wir am Beispiel von Camunda, wie wir mit Hilfe von Apache Kafka die Prozessdaten so extrahieren und archivieren, dass der Produktivbetrieb der Process Engine nicht beeinträchtig wird, wir aber trotzdem einen schnellen und effizienten Zugriff auf die Prozessdaten haben. Wie wir dies in der Praxis bereits bei unseren Kunden Duni und Provinzial erprobt haben, darüber wird ebenfalls in diesem Talk berichtet. Wir freuen uns über Feedback und Beiträge zum zugehörigen Open-Source-Prozess bpmn.ai.
Mit Web Components wird es möglich, komponentenorientierte Webanwendungen zu schreiben - und zwar direkt mit Standardwebtechnologien, ohne Frameworks. Dadurch wird es aber auch möglich, Web Components mit Frameworks wie Angular oder React zu kombinieren.
Web Components, das bedeutet Custom Elements, Shadow DOM, HTML Imports und HTML Templates. Mit diesen vier Features wird es möglich, gekapselte Komponenten zu erstellen, die trotzdem erweiterbar sind. Mit Hilfe von Libraries wie z. B. lit-html wird das Schreiben von Web Components noch einfacher.
In diesem Vortrag zeige ich anhand von praktischen Beispielen, wie und wofür man Web Components jetzt schon verwenden kann. Ich werde zeigen, wie Komponenten sich verhalten und aussehen können und wie sie konfigurierbare Schnittstellen anbieten können.
Bad actors have recognized the power of open source and are now beginning to create their own attack opportunities. This new form of assault, where OSS project credentials are compromised and malicious code is intentionally injected into open source libraries, allows hackers to poison the well. In this session, Brian Fox, 20 year open source developer and CTO of Sonatype, will ...
... explain how both security and developers must work together to stop this trend. Or, risk losing the entire open source ecosystem.
... analyze and detail the events leading to today’s “all-out” attack on the OSS industry.
... define what the future of open source looks like in today’s new normal.
... outline how developers can step into the role of security to protect themselves and the millions of people depending on them.
Sie sind Java-Entwickler, haben bisher noch keine Erfahrung mit Single Page Applications und wollen mal einen Blick über den Tellerrand werfen? Dann kommen Sie in diese Einsteigersession und gehen Sie mit uns auf Entdeckungsreise! Auf der Reise erfahren Sie, wie die neue Art der Cliententwicklung funktioniert, warum JavaScript hier so eine zentrale Rolle spielt und welche Werkzeuge außerdem von großer Bedeutung sind. Sie lernen Vue.js kennen und werden sehen, wie man dieses Framework in der neuen Welt einsetzt. Am Ende der Reise haben Sie genug Basiswissen gesammelt und wissen, was Komponenten sind. Die Grenzen zum Web-Components-Standard werden abgesteckt sein und Sie werden ein Gefühl dafür haben, warum man in Komponenten denken sollte. Wenn Sie am Ende bereit sind, weitere eigene Reisen in die interessante Welt von Vue.js zu unternehmen, dann hat diese Entdeckungsreise ihren Sinn erfüllt.
Das relationale Dogma von SQL wurde bereits 1999 aufgegeben. Seither hat SQL viele nicht relationale Funktionen erhalten, die einfache Lösungen für Probleme bieten, die mit relationaler Logik nur sehr mühsam umzusetzen sind. Heute ist SQL Turing-Complete, kann Graphen verarbeiten, mit XML- und JSON-Dokumenten umgehen, alte Daten automatisch versionieren, Zeitreihen mit Regular Expressions analysieren und vieles mehr. Dieser Vortrag zeigt, was modernes SQL für Dich tun kann. Er vergleicht jeweils zwei Lösungsansätze zu häufigen Problemstellungen: den relationalen und den modernen Ansatz. Dadurch erhalten Entwickler und Architekten ein besseres Verständnis, wo SQL heute steht und sind damit in der Lage, bessere Entscheidungen zu treffen. Seit SQL-92 hat sich einiges getan!
Ausgerechnet für den immer wichtiger werdenden Aspekt der HTTP-Kommunikation mussten sich Java-Entwickler jahrelang mit der betagten HttpURLConnection herumplagen. Diese wurde mit Java 1.1 eingeführt und galt verständlicherweise als altmodisch und schwierig zu benutzen. In der Regel wurden daher externe Bibliotheken als Ersatz verwendet. Mit Java 9 wurde der neue HttpClient im Incubator vorgestellt, seit Java 11 ist er nun endlich offiziell eingeführt! Er bietet ein modernes Builder API, Unterstützung für HTTP/2 und Push Promises sowie die bequeme Definition mehrstufiger, asynchroner Abläufe mittels CompletableFuture. Für die Verabreitung von Streams wurden zudem die Schnittstellen an das Flow API angepasst. Höchste Zeit also, den neuen HttpClient genauer unter die Lupe zu nehmen!
Wie bitte? Microsofts Azure Cloud auf der JAX? Ja, in der Tat. Denn nicht immer muss oder soll es AWS (Amazon Web Services) oder GCP (Google Cloud Platform) sein. Azure bietet mittlerweile eine holistische Plattform für so gut wie jede Cloud-Anforderung an. Auch und vor allem in den Bereichen Cloud Native und Serverless investiert Microsoft sehr viel. In dieser Session zeigt Christian Weyer von Thinktecture - ohne großes Marketing-Tamtam - neben den Grundlagen vor allem typische Anwendungsszenarien für Azure Functions, Azure Service Bus und Co. Fokus soll dabei auf Event-getriebene Microservices-Architekturen liegen. Lehnen Sie sich also zurück und sehen Sie "die andere Cloud" - auch mit Java - in Action.
Modularisierung im Backend kann mit Microservice-Architektur als "erledigt" betrachtet werden. Doch was ist mit dem Frontend? Welche Ansätze gibt es hier, und welche eignen sich für einen modernen Entwicklungsstack? In dieser Session werden Architekturansätze vorgestellt und ihre jeweiligen Eigenschaften betrachtet. Neben Self-Contained-Systems (SCS) und Microfrontends liegt ein Augenmerk auf den Chancen, die sich dank des etablierten Web-Components-Standard v1 ergeben. Für die praktische Umsetzung wird der Einsatz von Spring Boot und Angular sowie Angular Elements demonstriert.
Schauen wir uns mal wesentliche Frameworkhypes nur von Google der letzten zehn Jahre an: GWT, Dart, Angular JS, Angular, Polymer. Ein großer Teil dieser Frameworks befindet sich heute auf dem Abstellgleis (GWT, Dart, Angular JS) - Nachfolger sind in der Regel inkompatibel zu den Vorgängern. Leider haben umfangreiche Geschäftsanwendungen eine Taktung, die anders ist: Entwicklung, Vertrieb, dann Nutzung beim Kunden - da kommen gerne zehn bis fünfzehn Jahre zusammen, in denen aktiv an einem Produkt entwickelt wird. Oder noch mehr? Alle paar Jahre die Frontend-Technologie zu wechseln, ist vom Entwicklungsaufwand her illusorisch. Was also machen? Im Vortrag werden Architekturen und Frameworks vorgestellt, die die langfristigen Dialoge einer Anwendung "Hype-resistent" machen. Der Vortrag ist gespickt mit konkreten Beispielanwendungen aus praktischem Einsatz - das "direkte Anschauen" spielt also eine große Rolle!
Spring Security ermöglicht das Absichern von Microservices und Self Contained Systems auf Basis von Rollen und Rechten. Eine Prüfung auf Objekteben, wie z. B. dass ein Kunde nur auf seine eigenen Bestellungen zugreifen darf, ist auch möglich und auf verschiedene Arten nutzbar. Erfahren sie hier in einer Live-Demo mit der aktuellen Version von Spring Security, wie ein SCS umfassend abgesichert werden kann und welche neuen Funktionen dazugekommen sind. Weitere Themen sind z. B. die Änderungen bei Spring Boot 2, Änderungen bzgl. Passwort-Hash, OAuth2, OIDC uvm.
Gibt es heute tatsächlich noch ein Projekt, das ohne Open-Source-Software auskommt? Wann darf ich Open-Source-Software nutzen, wann muss ich meinen Source Code ebenfalls veröffentlichen? Wie verstehe ich die Vielzahl an Lizenzen und welche Feinheiten gilt es zu beachten? Haften ich oder mein Unternehmen für die eingebundene Software? Und wer kennt das nicht: In Stackoverflow steht die Lösung für mein Problem, also füge ich das Codebeispiel in meinen Source Code ein - nur, darf ich das überhaupt? Der Vortrag gibt einen verständlichen Einblick mit detaillierten rechtlichen und technischen Hintergründen zu den geläufigen Open-Source-Lizenzen, Fragen in der Haftung, in lizenz- und urheberrechtliche Fragestellungen wie auch die prozessuale Einbindung in den Entwickler- und Unternehmensalltag in Build-Pipelines mit Lösungen wie Blackduck und Co.
Softwarearchitektur ist zunächst etwas sehr Einfaches: Wir definieren klar abgegrenzte Bausteine und die Beziehungen zwischen diesen Bausteinen. Das war’s. Mit etwas Mühe lassen sich in jeder Anwendung fachliche Schnitte finden, um die geforderten Bausteine voneinander abzugrenzen. Doch welche Modularisierungstechnik sollte man dabei wählen? Java Package? JAR? Jigsaw Modul? OSGI Bundle? ReSTful API? Microservices? Docker-Container? Kubernetes Pod?
In dieser Session möchten wir Sie ermutigen, Entscheidungen im Zweifel auch gegen den aktuellen Markthype und für die am besten zu Ihren Anforderungen passende Technik zu treffen. Dazu berichten wir über unsere selbst gemachten Erfahrungen aus zwei Jahrzehnten praktischer Softwaremodularisierung und werfen auch einen Blick auf bekannte Softwarehersteller mit ihren Modularisierungsentscheidungen und deren Konsequenzen.
Klassische serverseitige Frameworks wie JSF oder Spring MVC haben ausgedient. Heute schreibt man Frontends in Angular, React oder Vue.js, ist doch klar… Aber warum eigentlich? Was bedeuten rein clientseitige Ansätze für die Architektur einer Webanwendung? Und wann sollte man lieber auf die klassischen Frameworks zurückzugreifen? Diese und weitere Fragestellung werden in der Session behandelt.
Docker, LXC, systemd-nspawn, Rkt und viele Andere nutzen die gleichen Kernelfeatures von Linux, um Container aufzubauen.
Dieser Talk ist mehr eine interaktive Session, in der wir auf der Kommandozeile besonders
* Namespaces,
* Cgroups,
* chroot/pivot_root,
* Overlay,
* Netzwerk und
* Mounts
betrachten werden, um in der Shell selbst einen Container bauen.
Die Session hilft zu verstehen, wie Container funktionieren. Egal ob standalone, im Docker Swarm Mode, Kubernetes oder "younameit".
Mit Spring Data JDBC verfügt die Spring-Data-Familie nun über ein zweites ORM-Framework für Relationale Datenbanken. Das zentrale Versprechen dabei sind eine reduzierte Komplexität durch Konzentration aufs Wesentliche und die Modellierung nach DDD. Aber was heißt das eigentlich für unsere Anwendungen? Welche Probleme von Spring Data JPA können wir vermeiden? Und welche neuen Herausforderungen müssen wir stattdessen lösen? Diese Fragen werde ich nach einer kurzen Einführung in Spring Data JDBC in diesem Vortrag beantworten.
React, Angular und neuerdings auch Vue und Web Components bestimmen den Bereich der modernen Frontend-Frameworks. Weitgehend unabhängig von der Wahl des Frameworks ergeben sich architektonische Herausforderungen, die sich stark von denen einer Backend-Architektur unterscheiden. In diesem Talk beschäftigen wir uns damit, was eine moderne Single-Page-Anwendung (SPA) ausmacht und wie sie sich von einer klassischen Web-Anwendung unterscheidet, wie man eine SPA durch Typisierung wartbar hält, wie sich ein zyklischer Datenfluss auf die Architektur auswirkt und warum daher eine Schichtenarchitektur unbrauchbar wird und wie man eine Single-Page-Anwendung in kleinere Module aufspalten und sie dann wieder zu einem stimmigen Ganzen zusammensetzen kann. Dieser Talk geht nicht auf die Details einer Implementierung ein und bleibt auf einer Ebene, der Sie auch ohne JavaScript-Kenntnisse folgen können.
Die Java VM ist zu einer einzigartigen Laufzeitumgebung gereift, die insbesondere für Serveranwendungen mit einer überragenden Performanz glänzt. Die Betriebsanforderungen für Java-Anwendungen haben sich jedoch im Lauf der letzten Jahre deutlich gewandelt. Während lange Zeit permanent laufende Prozesse auf einzelnen Servern im Vordergrund standen, sind es heute zumeist viele kurzlebige Prozesse, die in der Cloud und auf Plattformen wie Kubernetes elastisch skaliert werden. Dieser Vortrag liefert eine umfassende Bestandsaufnahme, wie das Java-Ökosystem die Herausforderungen der Cloud annimmt. Dabei betrachten wir zunächst verschiedene Möglichkeiten, Java-basierte Container zu erstellen und in den eigenen Buildprozess zu integrieren. Neuartige Konzepte wie Jib, Metaparticle, Skaffold, Draft oder auch klassische Build-Integrationen wie das docker-maven-plugin werden vorgestellt und verglichen. Im zweiten Teil sehen wir, wie man Java-Applikationen in einem Kubernetes-Cluster optimal betreibt und die Ressourcenlimits und Health-Checks einstellen sollte. Bei der oft recht komplexen Konfiguration der Deploymentdeskriptoren greifen einem diverse Tools unter die Arme. Ein Ausblick auf die neuesten Entwicklungen rund um die JVM runden den Vortrag ab. Wir werden die Vorzüge und Einschränkungen von Graals Substrate VM kennenlernen, die Java-Anwendungen bezüglich Start-up-Zeiten und Speicherverbrauch auf das gleiche Niveau wie kompilierte Sprachen heben soll und damit zu Cloud-Bewohnern erster Klasse macht.
We generate setters, getters, `equals()` and `hashCode()`, and other code when we all know that code generation is something not good. Nobody likes generated code, but we still use it. Generating code aids the coding at some points that are subpar. It can be the developer, the available tools, the environment. Developers can educate themselves, and languages like Java also develop and get better and better. What is the reason that there are always problems that crave for code generation? This talk explains the reasons for that and shows the different ccode generating tools, strategies, and examples that are followed by different ccompanies, developer communities, and FOSS tools.
Funktionale Programmierung (FP) verbreitet sich inzwischen auch in Deutschland immer weiter. Die Produktivitätssteigerungen durch FP sind schon lange bekannt, die Entwicklungstechnologien ausgereift. FP bedeutet aber auch fundamentale Änderungen in der Softwarearchitektur: Die Verwendung unveränderlicher Daten und reiner Funktionen steht diametral der allgegenwärtigen Verwendung gekapselter, veränderlicher Zustände in OO-Architekturen gegenüber, was zu größerer Flexibilität und Robustheit der entstehenden Software führt. Der Vortrag gibt einen Überblick über die wichtigsten Aspekte funktionaler Architektur: unveränderliche Daten, Funktionen, Typen, Entwurf und Umsetzung von Domänen- mit Kombinatormodellen, DDD und wichtige Architekturmuster.
Jahrelang nur akademische Kuriosität und jetzt in aller Munde: neuronale Netze. Man liest viel darüber, wie angeblich Gehirne nachgebaut werden und der KI-Hype ist auf dem Höhepunkt. Aber was ist ein neuronales Netz wirklich? Was heißt es, wenn ein neuronales Netz „lernt”? Und was haben Tensoren damit zu tun? In diesem Vortrag werden wir am Beispiel eines Standard-Multilayer-Netzwerks erklären, wie ein neuronales Netz Voraussagen macht und wie es trainiert wird.
Dabei werden die wichtigsten Schritte sowohl durch Formeln als auch durch Code erläutert.
Serverless Functions are hot, developer and corporate interest are exploding! But let’s face it, although Java is one of the most popular programming languages in the world, it isn’t the most popular language for writing functions — at least not yet. According to James Governor, “When Web Companies grow up they turn into Java Shops”, so as functions become mainstream will Java become the dominant language for authoring functions? Can it be?
In this hands-on session, we will examine the challenges of using Java for Serverless functions and the latest features provided by the Java platform that address them. We will also dig into the open source Fn project’s unparalleled Java support (including GraalVM and Kotlin support) which makes it possible to build, test, and scale out Java-based functions applications.
OVH has 27 data centers, more than 300 000 servers and 1.3 million customers. We operate one of the world's largest cloud infrastructures on a daily basis, running millions of applications. Those softwares manage millions of transactions every second. To monitor such an architecture, OVH has chosen to build a unified monitoring platform: OVH Metrics Data Platform. Such a platform uses complex distributed systems to operate, based mainly on open source tools running on the JVM (Apache Kafka, Apache HBase, Warp 10, ...). In order to improve developments on such systems, it is useful to have visualization tools to be able to observe the different behaviors of the JVM. This approach makes it possible, for the purpose of continuous improvement and in the interest of performance, to perfect the applications that we develop. This talk summarizes two years of experiments on the development and administration of applications using the JVM in a distributed world.
Node.js ist mittlerweile aus der Webentwicklung nicht mehr wegzudenken und das sowohl als Plattform für die Entwicklung von Werkzeugen als auch als Laufzeitumgebung für Web Services. Die Gründe für den Erfolg sind der leichtgewichtige und modulare Charakter von Node.js und das Ökosystem, das sich um die Plattform gebildet hat. Für nahezu alle Belange in der Applikationsentwicklung existiert ein Paket, das Sie über den Paketmanager in Ihre Applikation integrieren können. Der Entwicklungsprozess selbst wird so erheblich vereinfacht und beschleunigt. In dieser Session stelle ich Ihnen die wichtigsten Features von Node.js sowie einige Best Practices bei der Entwicklung von Applikationen vor. Das Ziel dieses Vortrags ist, Ihnen einen Überblick über den aktuellen Stand der Entwicklung von und mit Node.js zu geben.
Agilität ist kein Selbstzweck und auch nicht immer zu gleichen Maßen erstrebenswert. Doch wonach macht man in einer IT Organisation fest, wie viel Agilität man wann und wo benötigt? Wie schneidet man agile Teams und welche Verantwortung haben diese bzgl. der Architektur eines Gesamtsystems? Wie beeinflusst die Organisation die Architektur und wie kann man sich das zunutze machen? Am Beispiel von Spreadshirt werden Prinzipien, Risiken und Chancen einer sinnvoll geschnittenen IT-Organisation demonstriert. Da auch der Vortragende die Weisheit nicht gepachtet hat, wird es ausreichend Zeit zum interaktiven Erfahrungsaustausch geben.
Wir alle kennen das: Stress im Job und Projekt, keine Zeit oder Lust zu frühstücken, lieber „schnell was unterwegs“, mittags nach der Kantine in einem „Nahrungskoma“ und abends mit den Kollegen noch in die Kneipe und dort ein paar Bier und Snacks. Gleichzeitig werden wir immer träger, weniger leistungsfähig, Bewegungen fallen uns schwerer, Krankheiten und Entzündungen dauern länger und die Waage zeigt auch von Woche zu Woche mehr an. Willkommen im Metabolischen Syndrom! Genau so erging es mir - bis ich mir eines Tages gesagt habe, dass es genau so NICHT weitergeht! Veränderung musste her. Und zwar grundlegend und willentlich. Also fing ich an, mich mit dem Thema Ernährung, Kraft- und Ausdauersport intensiver auseinanderzusetzen. Heraus kamen Fitnesstrainerlizenzen (A, Medical & Personal) und Ernährungsberatung. Hauptberuflich immer noch Softwareentwickler, aber deutlich leichter (-20 kg), fitter und leistungsfähiger als all die Jahre zuvor. Wenn auch Ihr mit einer gesunden, aber dennoch leckeren Ernährung, die auch noch satt macht, auf Kriegsfuss steht, dann kommt in meine Session, in der ich Euch gerne ein paar Tipps und Hintergründe zu einer gesunden Ernährung gebe. Wenn man wirklich will und einige grundlegende Dinge verstanden hat, ist ein gesunder Lebensstil gar nicht so schwer.
Diese unterhaltsame und interaktive Night-Session nimmt Sie mit auf eine Reise in die Untiefen der IT-Security... Es werden in einem Versuch eines Live-Quizzes interaktiv unter Votingteilnahme des Auditoriums typische und untypische Securitythemen beleuchtet: Hierbei können Sie sich den Securitythemen in einem Live-Quiz-Style anonym teilnehmend technisch und fachlich stellen. Treten Sie gegen den Rest der Zuhörerschaft im Saal an, nur mit Ihrem Smartphone zum Abstimmen der richtigen Antworten bewaffnet (Browser und ein frei wählbarer Nickname reichen aus). Wer am Ende die meisten Quiz-Fragen richtig und schnell beantwortet und es in das Security-Leaderboard des Abends schafft, wird sich über thematisch passende Preise freuen können. Auch wer nicht mitvoten möchte, sei herzlich eingeladen, sich dem Thema passiv zu widmen und über die eine oder andere Securityfrage zu grübeln — oder zusammen mit spontan gebildeten Teams gemeinsam anzutreten.
"Das Leben ist eine Tragödie, wenn man es aus der Nähe betrachtet. Von Ferne gesehen ist es eine Komödie." (Charlie Chaplin)
Agiles Kabarett: Gibt es so was? Ja, das gibt es – und zwar hier und heute. So manches, was fälschlicherweise unter „agil“ erzählt und verkauft wird, könnte einen ärgerlich machen. Muss es aber nicht. Wenn man es mit etwas Abstand, Empathie, Kreativität und viel Humor betrachtet, kann man schon wieder darüber schmunzeln. Auch aus eigenen Fehlern lernt man am besten, wenn man übt, über sich zu lachen, ohne sich auszulachen. Darum soll es in dieser Session gehen. Mit einer großen Prise Humor beschäftigen wir uns mit dem „Homo Agilikus" und seinen Zeitgenossen, die ihm das Leben manchmal schwer und manchmal schön machen.
Mit seinem agilen Kabarett will Jürgen Knuplesch uns zum Lachen, zum Nachdenken und vielleicht sogar zum Handeln anregen. Für den musikalischen Rahmen zwischen den Wortvorträgen sorgt Musiker Michael Mesox Hecht.
In the ever-changing world of software development, technologies and paradigms come and go. New programming languages appear every year, and an exponentially growing number of new developers join our profession.
There are many young developers that could learn from more experienced programmers. But many claim that the design principles we teach "don't apply" to them because they work in JavaScript, or they do functional programming, or they're making microservices.
The fact is that the same fundamental design principles apply today that were being recommended before most of us were born. All that's really changed is the syntax. Illustrating with examples in three languages and three programming paradigms - procedural, object oriented and functional - Jason will demonstrate how the design principles he teaches in 2019 could have been applied in 1989, and 1969, and will very probably still apply in 2039 and beyond.
Machine-Learning-Star Andrej Karpathy, Head of AI bei Tesla, beschreibt neuronale Netzwerke als Software 2.0. Also die neue Art zu Software zu entwickeln, die die klassische Art nicht ersetzen, sondern ergänzen wird. Passend dazu zeige ich in diesem Talk, wo uns als Softwareentwickler Machine Learning begegnet, wo sich der Ansatz von Machine Learning grundsätzlich von dem der Softwareentwicklung unterscheidet und wo es Parallelen gibt. Wir werden dabei die unterschiedlichen Arten des Machine Learnings diskutieren, was diese auszeichnet, wie sie sich unterscheiden und welche Anwendungspotenziale in ihnen stecken. Anhand einer praktischen Beispiels werden wir dabei Machine Learning als Alternative zu klassischer Businesslogik erleben und auch bereits erste Werkzeuge kennenlernen, mit denen wir Machine Learning implementieren können. Dieser Talk eignet sich für jeden, der sich mit Softwareentwicklung beschäftigt, und setzt kein Wissen über Machine Learning voraus.
Die Entwicklung einer Cloud-native-Anwendung ist nur eine Seite der Medaille, die andere Seite ist die Cloud-Umgebung, in der die Anwendung betrieben werden soll. Als Architekt muss man Entscheidungen treffen, die auch von der Laufzeitumgebung abhängig sind. Einige Aspekte, wie zum Beispiel Konfiguration, Resilienz, Health Checks, Metriken, Request Tracing und Service Discovery besitzen eine starke Kopplung mit der Cloud-Umgebung.
Istio, das als offene Plattform auf beispielsweise Kubernetes betrieben werden kann, bietet diese Funktionalitäten. Auf der anderen Seite besitzt MicroProfile auch eine Menge von Spezifikationen, die bei der Implementierung der Cloud-native-Anwendung hilfreich sein können. Die Session startet mit einer kurzen Einführung in Istio und MicroProfile und zeigt im Anschluss, wie diese beiden Welten in einer Cloud-native-Anwendung am besten miteinander kombiniert werden können.
Der Betrieb einer Microservices- und/oder einer Containerinfrastruktur birgt beim Logging — gelinde gesagt — einige Herausforderungen. Die Infrastruktur ist volatil, das Debugging einer Benutzersession über Logfiles eines einzigen Servers ist nicht mehr möglich. Eine zentrale Logging-Infrastruktur zum Einsammeln, Verarbeiten und Speichern von Logs muss her!
Allerdings ist solch eine zentrale Logging-Infrastruktur nicht mit einer "Shared Nothing"-Architektur kompatibel. Konsequenterweise muss dort jedes Team seine eigene Logging-Infrastruktur betreiben. Ehrlicherweise fehlt es dazu den meisten Teams an Zeit und Wissen, weshalb der Architekturansatz hier dann bricht.
Am Beispiel von Shopping24 zeigt dieser Talk, wie wir die Herausforderung mit Methoden der Softwareentwicklung gemeistert haben. Gemeinsam werden Schnittstellen definiert, eine Default-Logging-Implementation bereitgestellt und die Teams können diese Implementation nach Bedarf erweitern. Mit ein wenig Governance können wir dann sicherstellen, dass die Teams untereinander von neuen Features und Versionen profitieren.
Der Monolith hat ausgedient, kleine wartbare Microservices sind im Trend. Aber wie nutzt man diese Idee in der Welt von Angular und Single Page Applications? In dieser Session betrachten wir verschiedene Ansätze für den Einsatz von Angular in Microservices-Architekturen und bewerten deren Vor- und Nachteile. Wir untersuchen verschiedene Realisierungsoptionen wie den Einsatz von Web Components und diskutieren Lösungen für Herausforderungen wie App-übergreifende Security, Routing und Kommunikation zwischen Micro Apps und das Bereitstellen optimierter Bundles. Am Ende wissen Sie, ob sich Micro Apps für Ihr Vorhaben überhaupt lohnen und welche Ansätze sich für Ihren konkreten Fall anbieten.
Today, our world is full of things that are “as a service” — infrastructure, containers, platforms, software… and of course functions. With developers just now wrapping their heads around application platforms and containers, what are they to make of functions as a service? How does a busy developer cut through the hype and make sense of the world of Serverless, Kubernetes, Spring Cloud Function and all the rest?
This talk will clear up the confusion! We examine Riff, a FaaS built atop Kubernetes. We will discuss where functions and serverless fits in your world, and how you can get started with some simple demos. Though functions aren’t a silver bullet, they are an important part of the development toolbox; this talk saves you from the buzzword bingo to give you a solid foundation of the FaaS landscape.
After many years of arguments debating the differences between Spring and JEE, it seemed that the Spring Framework finally came out on top. With the rise of cloud environments and microservices, application servers had nothing to offer against Spring Boot.
In 2016, the Eclipse foundation presented a new contender: MicroProfile. This approach for Cloud-Native Java, based on the proven Java EE technology, was advanced with an ambitious roadmap to catch up on Spring Boot. Time for a closer look: How do both compare? We are exploring similarities and differences in development, configuration, and operations and take a look at how well the MicroProfile project prepared enterprise Java for the cloud.
Everyone wants to understand what their application is really doing in production, but this information is normally invisible to developers. Profilers tell you what code your application is running but few developers profile and mostly on their development environments. Thankfully production profiling is now a practical reality that can help you solve and avoid performance problems.
Profiling in development can be problematic because it’s rare that you have a realistic workload or performance test for your system. Even if you’ve got accurate perf tests maintaining these and validating that they represent production systems it's hugely time consuming and hard. Not only that but often the hardware and operating system that you run in production are different from your development environment.
This pragmatic talk will help you understand the ins and outs of profiling in a production system. You’ll learn about different techniques and approaches that help you understand what’s really happening with your system. This helps you to solve new performance problems, regressions and undertake capacity planning exercises.
A Java release every six months? Awesome! But maybe you’re worried about upgrading and deprecation? Don’t be! This session highlights the tools and concrete strategies necessary for adapting to the new OpenJDK release cycle. Come learn from JVM developers how to prepare for continuous change without losing your mind.
Was steckt eigentlich hinter den Begriffen "Clean Architecture" oder "Hexagonal Architecture"? Clean ist immer gut, oder? Sollte ich die mir so ans Herz gewachsene Layerarchitektur vergessen und nur noch Clean Architecture anwenden?
Diese Session gibt einen Überblick über die Konzepte und Ziele hinter Uncle Bob's Clean Architecure und Co. und stellt Möglichkeiten vor, diese in (Java-)Code umzusetzen. Wir werden diskutieren, wann sich eine Clean Architecture lohnt, welche Abkürzungen man einbauen kann, um den Aufwand im Rahmen zu halten, und wann man lieber die Finger davonlassen sollte.
SQL ist die einzige erfolgreiche, etablierte und generell anwendbare Programmiersprache der vierten Generation (4GL) und sie ist der Wahnsinn! Mit moderner, kostenbasierter Optimierung können relationale Datenbanken endlich ihr Versprechen einhalten, ein ausdrucksstarkes, deklaratives Programmiermodell auf sich ständig verändernden produktiven Datenständen ohne Performanceeinbußen umzusetzen. Tausendzeilige, komplexe SQL-Befehle können in weit unter einer Millisekunde gegen Milliarden Reihen starke Tabellen laufen, wenn Datenbankentwickler sich mit der SQL-Sprache auskennen – und das Beste ist: Es ist gar nicht so schwierig! In diesem Vortrag zeige ich, wie SQL-Datenbanken jegliche von Hand geschriebenen Algorithmen mühelos übertreffen. Oder in anderen Worten: Wie SQL, eine logische Programmiersprache, die beste Sprache für Businesslogik ist.
Die 2016 gegründete und inzwischen in der Eclipse Foundation beheimatete Initiative MicroProfile ist angetreten, die Lücke zwischen dem Enterprise-Java-Standard (Java EE a.k.a. Jakarta EE) und den Praxisanforderungen Microservices-basierter Architekturen zu schließen. Das bestehende Momentum der Java-EE-Community als Hebel nutzen und organisch um den Bedarf der Microservices-Community ergänzen, so lautet der Plan. Und dieser scheint aufzugehen. In nur wenigen Monaten ist es gelungen, eine Reihe sinnvoller Microservices-relevanter APIs mit bestehenden Java EE 7/8 APIs zu kombinieren und diese in regelmäßigen MicroProfile-Releases zu veröffentlichen. Egal ob Health Check, Metrics, Fault Tolerance, JWT Propagation, Configuration, Tracing oder Open API, MicroProfile scheint die richtigen Antworten – sprich APIs – im Gepäck zu haben. Die Session zeigt den aktuellen Stand von MicroProfile und demonstriert dessen Mehrwert anhand praktischer Beispiele.
Verteile Anwendungen wie Microservices verlagern einen Teil der Komplexität in das Zusammenspiel der Services untereinander. Ein solches Service Mesh, das bis zu dreistellige (oder mehr) Laufzeitinstanzen haben kann, wird sehr schwierig zu beherrschen. Man muss sich mit Fragen auseinandersetzen wie zum Beispiel: Welcher Service wird von welchem Service in welcher Version bei welchem Request-Inhalt wie oft aufgerufen? Wie kann man das Zusammenspiel testen und wie werden einzelne Services durch neue ersetzt? Diese und andere Fragestellungen werden in der Session beleuchtet. Dabei werden auch Werkzeuge vorgestellt, die das Leben mit dem Service Mesh vereinfachen sollen.
Every organization has at least a phalanx or two in the Cloud and it is understandably changing the way we architect our systems. But your application portfolio is full of “heritage” systems that hail from the time before everything was as a service. Not all of those applications will make it to the valley beyond, how do you grapple with your legacy portfolio? This talk will explore the strategies, tools and techniques you can apply as you evolve towards a cloud native future.
Microservices sind ein architektureller und organisatorischer Ansatz für die Entwicklung von Software, bei dem Anwendungen durch kleine, voneinander unabhängige Services zusammengesetzt sind, die über wohldefinierte Schnittstellen miteinander kommunizieren. Diese Form der Architektur macht es einfacher zu skalieren und beschleunigt die Softwareentwicklung, um das Ausrollen neuer Features deutlich schneller zu ermöglichen. AWS-Kunden benötigen eine Sammlung an Entwurfsmustern, die bei der Identifikation der richtigen AWS Services für die Implementierung einer Microservices-Architektur helfen. Diese Session beschreibt wiederverwertbare Microservices-Entwurfsmuster und hilft dabei, Kandidaten für Microservices-Architekturen in der eigenen Organisation zu identifizieren und zu verstehen, wo potenzielle Bereiche für Kostenersparnis und erhöhte Agilität zu finden sind.
Das Leben von Entwicklern ist heute nicht mehr Neuentwicklung – es ist Wartung. Die typischen Programmierer entwickeln heute keine Software mehr auf der grünen Wiese, sondern sie reparieren, erweitern, verändern und bauen vorhandene Software aus. Das größte Problem ihrer täglichen Arbeit ist, dass sich Wartung mit der Zeit von strukturierter Programmierung hin zu defensiver Programmierung verändert. Der Code wird zu komplex, um ihn zu warten. Die Entwickler fangen an, Code zu schreiben, von dem sie wissen, dass er aus Architektursicht schlecht ist. Aber er ist die einzige Lösung, die, wenn man Glück hat, funktioniert. Wartung wird immer schwieriger und teurer.
In diesem Vortrag berichte ich von meinen Erfahrungen der letzten zehn Jahre: Die Zuhörer erfahren, welche Fehler sie in ihren Softwareprojekten bei der Umsetzung der Architektur nicht machen sollten, welche Prinzipien sie einhalten sollten, um langlebige Architekturen zu entwerfen, welche Tools helfen, technische Schulden abzubauen.
Many developers view type theory as abstruse and confusing. It's not! This talk will show you the four simple components of a type system: the types, their subtyping relationships, how to give a type to each expression in your program, and what operations are illegal. If you specify these four things, you have designed a type system!
Starting from nothing, in less than an hour we will create a full-fledged type-checker that detects real errors in real programs. We will implement our type-checker for Java, and it will handle all Java constructs, such as generics, subtyping, and lambdas. Our type system will detect errors in the use of the optional type that the Java compiler permits and that would go undetected until run time. You will also be ready to use the dozens of available pluggable type-systems that others have already implemented and that are in use at companies such as Amazon, Google, and Uber to improve code quality. The tool is freely available at checkerframework.org.
Kubernetes in general, and Istio in particular, have changed a lot the way we look at Ops-related constraints: monitoring, load-balancing, health checks, etc. Before those products became available, there already were available solutions to handle those constraints. Among them is Hystrix, a Java library provided by Netflix. From the site: "Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable." In particular, Hystrix provides an implementation of the Circuit Breaker pattern, which prevents a network or service failure from cascading to other services. But now Istio also provides the same capability. In this talk, we will have a look at how Istio and Hystrix implement the Circuit Breaker pattern, and what pros/cons each of them has. After this talk, you'll be able to decide which one is the best fit in your context.
Wenn Sie Redux verwenden, dürfen Sie den bestehenden Zustand im Redux Store nicht verändern: Jede State-Transition erzeugt ein neues Zustandsobjekt. Mit immutable.js wird dieses Erzeugen des neuen Zustands deutlich vereinfacht, es gibt aber auch Nachteile:
In diesem Talk werde ich anhand von Beispielen zeigen, wie Sie immutable.js mit React und Redux verwenden können, was das für Ihre flow-Datentypen bedeutet und wie Sie Ihre Anwendung debuggen können.
Die meisten Entwickler schreiben keine APIs — sie verwenden sie. Die einen APIs werden geliebt, andere werden gehasst. Aber warum ist das so? Es gibt subtile Unterschiede im Nutzererlebnis eines APIs, wenn wir z. B. mit jQuery arbeiten (was die meisten Entwickler gerne verwenden) oder mit java.util.Calendar arbeiten (kaum jemand arbeitet gerne damit). Woran liegt das? Was unterscheidet ein nutzerfreundliches API von einem "unangenehmen" API? In diesem kurzweiligen Vortrag zeige ich die Patterns und Anti-Patterns des API-Designs anhand von verschiedenen erfolgreichen und weniger erfolgreichen APIs auf dem Markt.
Null pointer exceptions are the bane of programmers, and have been called the "billion dollar mistake". They happen even if you think hard about your code and test it thoroughly. However, you don't have to be a victim any longer! Come learn about a simple, yet powerful type system that prevents null pointer exceptions at compile time.
This session will explain the causes of null pointer exceptions, including their relationship to issues such as object initialization, map keys, method contracts, Java 8's Optional class, and dynamic checks. It will show how programmers' informal reasoning can be automated into a formal proof, in a way that is easier to use than Java generics or the Optional class.
You will learn how to use pluggable type-checking, and in particular a freely-available tool called the Nullness Checker (CheckerFramework.org) that integrates with your development environment and toolchain. It has found hundreds of bugs in millions of lines of well-tested code, and it is easy enough for novices such as beginning CS students.
Bring your tricky nullness issues and see how they can be solved!
Mit Monorepos können große Anwendungen in kleine, übersichtliche Teile zerlegt werden. Dabei handelt es sich jedoch nur um eine Seite der Medaille: Zuvor gilt es nämlich festzulegen, anhand welcher Kriterien die Zerlegung erfolgen soll und wie die einzelnen Bibliotheken miteinander kommunizieren dürfen.
Um diese Fragen zu beantworten, beleuchtet diese Session die Ideen von Strategic Domain-driven Design vor dem Hintergrund großer Angular-Anwendungen. Wir beschäftigen uns anhand einer Angular-basierten Fallstudie mit dem Bounded Context, der Definition von Subdomänen und Context Mapping. Anschließend sehen Sie, wie sich diese Ideen mit Angular und einem Monorepo realisieren lassen.
Am Ende haben Sie nicht nur den nötigen technischen Überblick, sondern auch eine dazu passende bewährte Methodik für die Schaffung langfristig wartbarer Angular-Lösungen.
Spark ist das beliebte Data-Processing-Framework, um viele Daten schnell zu verarbeiten. Kubernetes ist die Plattform, die seit einigen Monaten die Welt im Sturm erobert. Seit einem halben Jahr wird Kubernetes von Spark als native Runtime voll unterstützt. Dieser Talk zeigt, wie die Konzepte von Spark und Kubernetes ineinander greifen. Wir beschäftigen uns mit der Frage, wie man Spark mit Daten versorgt und welche Fallstricke dort lauern. Schließlich gebe ich einen Überblick über die aktuellen Kubernetes-Aktivitäten in der Big-Data-Community.
Serverless und Functions as a Service ist in – insbesondere wo doch z. B. Amazon mit AWS Lambda, Google mit Cloud Functions und Microsoft mit Azure Functions aufwarten. Aber wie kann die eigene, bereits bestehende Infrastruktur genutzt werden? Mit OpenFaaS steht ein flexibles Framework zur Verfügung, um auf einer bestehenden Docker-Infrastruktur, sei es auf dem eigenen Laptop oder im Rechenzentrum, Functions as a Service zu betreiben und mit auf den Serverless-Zug aufzusteigen. In dieser Session betrachten wir die Grundlagen von OpenFaaS und wie man auch Java nutzen kann, um Serverless Functions zu implementieren.
Consumer-driven contracts (CDC) are like TDD applied to the API. It’s especially important in the world of microservices. Since it’s driven by consumers, it’s much more user-friendly. Of course, microservices are really cool, but most people do not take into consideration plenty of potential obstacles that should be tackled. Then instead of frequent, fully automated deploys via a delivery pipeline, you might end up in an asylum due to frequent mental breakdowns caused by production disasters. We will write a system using the CDC approach together with Spring Boot, Spring Cloud Contract verifier. I’ll show you how easy it is to write applications that have a consumer-driven API and that will allow a developer to speed up the time of writing his better quality software. The presentation will consist of some theory but there’ll also be live coding and demos.
GraphQL ist eine Sprache zur Abfrage von Daten, mit der Clients selbst bestimmen können, welche Daten sie je Use Case von einem Server lesen oder schreiben wollen. Dabei verspricht GraphQL nicht nur Effizienz zur Laufzeit, sondern auch eine einfache Entwicklung und Pflege der damit entwickelten APIs. Die Sprache wird firmenübergreifend von der GraphQL Foundation entwickelt und steht als Open-Source-Lösung für eine Vielzahl von Programmiersprachen zur Verfügung.
In dieser Session stelle ich Ihnen Grundlagen und Konzepte von GraphQL vor. Anhand einer Beispielanwendung zeige ich Ihnen, wie Sie mit Java GraphQL-Schnittstellen bauen und in Ihre bestehenden Java-Anwendungen integrieren können. Wir sehen uns an, wie Entwicklungsprozess und Tooling von einer getypten GraphQL-API-Definition profitieren können, prüfen aber auch kritisch, inwiefern gängige Aussagen über GraphQL („REST Alternative“, „SQL für APIs“) wirklich zutreffend sind.
Wie baut man nun eine “Enterprise”-Java-Anwendung in 2019? In dieser Session werden wir einen Cloud-ready Microservice implementieren und ihn lokal via Docker und in die Wolken deployen - inklusive API-Beschreibung, Distributed Tracing, Monitoring, Metriken, Konfiguration, Microservices-Patterns. Produktivität, Wartbarkeit (=Verständlichkeit, Einfachheit) und Portability stehen im Vordergrund. Kritische Fragen der Teilnehmer sind sehr willkommen.
Viele Unternehmen möchten Daten in ihren Legacy-Systemen erschließen, um neuartige Dienstleistungen oder Wettbewerbsvorteile aufzubauen. Sowohl klassische Data-Warehouses als auch moderne Big-Data-Ansätze enden oft als langwierige, millionen-schwere Transformationsprogramme mit exponentiell wachsender Komplexität. Wir zeigen auf, wie leichtgewichtige Open-Source-Technologie und digitale Entkopplung eingesetzt werden können, um Daten effektiv zu erschließen. Unsere Demo zeigt anhand von simplen Codebeispielen das Zusammenspiel von Kubernetes, Apache Airflow, Change Data Capture und polystrukturierten Datenspeichern.
Haskell ist eine Programmiersprache wie von den Aliens - sieht anders aus als Java, läuft anders, baut auf völlig andere Ideen. Ziemlich gute Ideen: Gute Haskell-Programme sprechen in Ideen anstatt in vielen kleinen Ausführungsschritten. Haskell erlaubt Modellierungstechniken, von denen Java und Co. nur träumen können, insbesondere durch funktionale Programmierung und das mächtige Typsystem (von Objekten weit und breit nichts zu sehen). Die Lazy Evalution, bei der ein Ausdruck nur dann ausgewertet wird, wenn sein Wert gebraucht wird, dreht die Ausdrucksstärke endgültig auf 11. Vor allem aber: Programmieren in Haskell macht glücklich! Der Vortrag gibt einen Überblick über Haskell mit praktischen Beispielen.
Value types are new, currently not existing, and yet features of the Java language and the JVM that are developed in the project Valhalla. The introduction of value types will greatly enhance the capabilities of the Java ecosystem, making it a tool for problems that are currently solved using other programming languages or applying special techniques that are more in the shady area of hacking than program design and development. It will also be made possible to use the JVM (or GraalVM by that time) for languages like Go or Swift, which cannot effectively be executed on the JVM. This talk is an introduction to the new features and it is also about the philosophy and practical considerations about value types. After this talk, you will understand what value types really are, what they are good for, and will be ready to experiment with it using the available pre-release code as well as be ready to use it professionally as soon as the feature is released.
Microservices versprechen bessere Skalierbarkeit, klare Aufgabenverteilung und eine einfachere Implementierung. Damit sollten sich doch die meisten Anwendung leicht umsetzen lassen, oder etwa nicht?
Spätestens beim Lesen und Speichern von Daten stellt man leider fest, dass die Implementierung von Microservices alles andere als einfach ist. Aufgaben, die in einem Monolithen sehr leicht zu lösen waren, werden plötzlich deutlich komplexer. So stellt sich die Frage, wie ein Microservice Daten referenzieren kann, die von einem anderen Service verwaltet werden. Andere Use Cases müssen Daten speichern oder suchen, die von mehreren, unabhängigen Microservices verwaltet werden.
Die in monolithischen Anwendungen verwendeten Ansätze würden zu starken Abhängigkeiten zwischen den Microservices führen und stehen uns daher nicht mehr zur Verfügung. Wir benötigen neue Lösungen, mit denen die Services die Kontrolle über die eigenen Daten behalten und zugleich unabhängig von anderen Services bleiben. In dieser Session werde ich zeigen, wie diese Probleme durch die Verwendung neuer Design Patterns sowie den Einsatz zusätzlicher Tools gelöst werden können, ohne dabei die Vorteile einer Microservices-Architektur zu verlieren.
Fast jedes Softwaresystem wird mit guten Vorsätzen aber unter schwierigen Bedingungen entwickelt: Knappe Zeitvorgaben zwingen uns, schnelle Lösungen – Hacks – zu programmieren. Unterschiedliche Qualifikationen im Entwicklungsteam führen zu Code in ebenso unterschiedlicher Güte. Alter Code, den keiner mehr kennt, muss angepasst werden und vieles mehr. All das führt zu schlechtem, verknäultem Code, dem sogenannten Monolithen, der die Entwicklungskosten in Zukunft in die Höhe treiben wird und den Entwicklungsteams schlaflose Nächte bereitet. Mit Domain-Driven Design (DDD) haben wir ein Werkzeug an der Hand, um solche Monolithen Schritt für Schritt zu zerlegen und wieder in den Bereich der beherrschbaren Wartungskosten zu bringen.
Welche Arten von Patterns werden für die Entwicklung von Systemen überhaupt benötigt? In dieser Session werden wir einen Microservice gemeinsam implementieren und die Struktur, mögliche GoF, Enterprise, Monitoring, Microservice und Robustness Patterns besprechen: von der Packagestruktur über RESTful Design bis Errorhandling und Metriken. Kritische Fragen und Interaktionen der Teilnehmer sind in dieser Session besonders wichtig.
Classloader sind ein großartiges Stück Technologie in Java. Aber wie funktionieren sie eigentlich genau? Wie erstellt Spring Boot ein "uber-jar" ohne Shading und ohne Konflikte? Wie kann ich meine Applikation mit Hilfe von Classloadern modularisieren? Wie kriege ich meine "dependency hell" mit Classloadertricks in den Griff - und welche Fallstricke und Einschränkungen gibt es dabei? Auf diese und viele weitere Fragen wird im Vortrag anhand von Fallbeispielen aus der Praxis ausführlich eingegangen. Es wird erklärt, wie Classloader im Detail funktionieren und wie man eigene implementiert. Dabei werden die Classloader-basierten Lösungen mit anderen Lösungsansätzen verglichen, um ein vollständiges Bild der Vor- und Nachteile verschiedener Herangehensweisen zu erhalten.
Mit dem Einzug der Clouds und Container in die Welt des Internets beziehungsweise der Rechenzentren konnte sich auch eine neue Programmiersprache etablieren. Ihr Markenzeichen ist ein kleiner blauer Gopher, entworfen von der amerikanischen Künstlerin Renée French. Die 2011 von Google veröffentlichte Sprache mit dem knackigen Namen Go hat speziell im Rahmen von Infrastrukturprojekten rund um skalierbare und verteilte Anwendungen ihre Freunde gefunden.
Doch auf den ersten Blick schaut Go nicht sehr speziell aus. Es ist eine imperative und C ähnliche Sprache, enthält nur ansatzweise Elemente der Objektorientierung und erfreut sich an ihren Funktionstypen, ohne jedoch funktional zu sein. Dafür bringt sie eine flexible Nebenläufigkeit mit. Hinzu kommen noch eine umfangreiche Standardbibliothek sowie praktische und leistungsfähige Tools. Insofern ein rundes Paket, doch wo ist das Besondere?
Diese Session führt in die Sprache Go ein und zeigt Gemeinsamkeiten und Unterschiede zu Java auf. Es geht von den Datentypen über kleine wie große Strukturen bis zu den Tools. Ein Blick auf gängige Idiome zeigt, wie die Sprache ohne zentrale Frameworks in Serversystemen zum Einsatz kommt. Dies wird durch praktische Beispiele aus bekannten Projekten wie Docker und Kubernetes ergänzt.
Die Microfrontend-Architektur war einer der bedeutendsten neuen Trends im Jahr 2018, weil sie Lösungen für viele Probleme bei der Entwicklung von größeren Enterprise-Anwendungen mit langer Lebensdauer bietet. Bisher wurde wenig über die Erfahrungen mit Microfrontend-Architektur in realen Projekten veröffentlicht. Mein Vortrag wird die wesentlichen Herausforderungen in der Umsetzung unserer Microfrontend-Lösung darstellen. Außerdem wird eine neue Open-Source-Infrastruktur vorgestellt, die die Realisierung von zukünftigen Microfrontends erleichtert.
Erfahren Sie anhand einer Fallstudie mit Live-Coding die wichtigsten Konzepte für Angular-basierte Geschäftsanwendungen.
Die Anforderungen an moderne Enterprise-Anwendungen sind in den letzten Jahren deutlich gestiegen. Die einfache Persistierung von Eingabedaten ist nicht mehr ausreichend. Eine Volltextsuche und die Auditierung der Datenbestände sind inzwischen selbstverständlich und Forderungen nach mehrmandantenfähigen Systemen keine Seltenheit. Für all diese Anforderungen bieten Hibernate und die dazugehörigen Erweiterungen Hibernate Search und Hibernate Envers bereits gute Lösungen. Diese werden im Rahmen des Power Workshops anhand praktischer Beispiele und Übungsaufgaben vorgestellt.
Hands-on-Workshop über Web Application Security mit Themen wie Single Sign-on via OpenID Connect (Code Flow und Implicit Flow), Autorisierung mit Role-based Access Control und ressourcenbasierten Berechtigungsprüfungen mit jeweils eigenen Übungsprojekten bestehend aus zwei self-contained Systems.
Sie wollen mit Experten Microservices diskutieren? Sie brauchen Einschätzungen und Ratschläge zu Fragestellungen und Problemen im Projekt? In diesem interaktiven Workshop haben Sie dazu die Möglichkeit – egal ob sie Microservices-Experte oder -Anfänger sind. Mit Hilfe einer professionellen Moderatorin und dem populären Open-Space-Format werden wir gemeinsam Antworten, Lösungen und Diskussionen zu Ihren Themen erarbeiten und so einen Austausch auf hohem technischem und konzeptionellem Niveau zu ermöglichen. Dabei steht Ihnen das geballte Wissen aller Teilnehmer des Workshops und einiger der erfahrensten Speaker im Microservices-Bereich zur Verfügung. In diesem Expertenworkshop sind Sie richtig, wenn Sie Architekturfragen diskutieren, technische Lösungen erörtern und praktische Fragen zum Thema Microservices klären wollen.
Ein Microservice kommt selten allein – und genau da liegt das Problem. Um an Ende nicht im Chaos zu versinken, benötigt auch eine Microservices-basierte Anwendung eine Architektur und die Verwendung von Patterns. Der Workshop stellt sich praxisnah den wesentlichen Herausforderungen auf dem Weg hin zu Microservices und zeigt passende Lösungsansätze und Best Practices. Am Ende steht eine flexible Architektur, die allen Herausforderungen gewachsen ist.