We try to develop our features agile in branches and to merge them when they are ready for use.
Test Driven Development is on everyone's lips in Java and other languages.
Whether we develop ADF or JET or Spring, we try to apply these techniques in many places.
But what is the real foundation of most of our applications?
That is the Oracle database with its data model and its programming language PL/SQL!
Again and again you hear that merging data model scripts and PL/SQL programs are not practical.
But how are we supposed to develop our frontend according to these techniques if we don't start with it in the backend?
In the presentation I will show you how you can develop your data model and your programs in the database in an agile and test-driven way from the request to the refactoring.
You will see how tools like Git, Liquibase and utPLSQL work together.
Regulatorics: Offside is when the referee whistles - DOAG 2018Torsten Kleiber
The regulatory system has more and more influence on our software development.
Regulatory authorities, external and internal Auditors are increasingly examining our IT and not longer only our business processes and balance sheets. Some of them have better trained IT experts as we can find on the free market.
General standards such as ISO/IEC 2700X but also banking-specific standards such as BAIT and MaRisk now pose challenges that generally only large software manufacturers know. Approximately 40 % of our projects are now regulatory-driven.
Therefore, we are currently redefining our development process in order to implement the following requirements, among others * Unchangeability of the tested artefacts after the test * Functional segregation * Detection of accidental changes or intentional manipulations of the application
The lecture shows the vision of such a safe process. It shows the current status of implementation in SOA and ADF development, for example:
Migration of version management to GIT in Atlassian BitBucket
Application and selection criteria for a branching model
Mandatory code reviews in Atlassian BitBucket
Build and Deployment Pipelines in Jenkins
Automatic documentation in JIRA Issue via Bitbucket and Jenkins.
Maybe you too can minimize the additional work and continue to work agile to meet such requirements.
Already 4 years we plan the upgrade from 11c to a new supported version.
Somehow, on the one hand business projects were more important, on the other hand the exact technical procedure was not clear.
All databases have to be migrated, but some software vendors did not offer support at all.
The requirements diverged: consolidation to save costs versus dedicated environments to manage security and operations more easily.
When we finally knew how we wanted to proceed, technical details quickly threw the planning off course.
The target platform became 12c, 18 and now 19c
At some point, however, the threat of the final loss of support for 11g and the accumulating other requirements put the necessary pressure on the implementation.
This presentation will show you how and why we proceeded in this way and how we finally reached the finish line.
Maybe our experiences will help some of you to finally take the step!
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
Oft fällt die Frage, ob man PL/SQL überhaupt automatisiert testen kann. Deshalb behandelt dieser Vortrag u.a. die folgenden Themen:
- Welche Fehler will ich mit Testautomatisierung überhaupt vermeiden?
- Änderung des Datenmodells
- Änderung bestehender Programme
- Datenbank-Patching/-Upgrade
- Wie sieht eigentlich mein Entwicklungsprozess aus?
- Wie viele Entwickler habe ich?
- Welches Wissen haben meine Entwickler?
- Muss ich branchen?
- Muss ich häufig meinen Code umstrukturieren?
- Welche Frameworks gibt es für die Testautomatisierung?
- SQL Developer
- Quest Code Tester
- utPLSQL
- ruby-plsql-spec
- Welche Voraussetzungen muss ich erfüllen?
- Datenbankversionen
- Infrastruktur
- Für welchen Zweck eignet sich welches Framework?
- Unterstützung von CI-Servern
- Unterstützung von Build Systemen wie z.B. Maven
- Test Driven Development
Neben der Theorie sehen Sie natürlich auch in Demo's, wie sich der Testcode "anfühlt".
Der Vortrag soll Ihnen eine Entscheidungsgrundlage liefern, ob Sie demnächst auch automatisch testen wollen und können!
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
Das Team Kreditplattform der IKB entwickelt seit etwa 4 Jahren mit ADF. Wir deployen gegen den WebLogic Server. Mittlerweile arbeiten mittlerweile 15 Entwickler parallel an Projekten und Migrationen. Um dies zu gewährleisten wurden auch eine Menge Architekturentscheidungen neu gefällt und durch entsprechendes Refactoring umgesetzt.
Bereits mit dem ersten Lern-Projekt vor 4 Jahren kam das komplexe Thema Build- und Deployment auf. Da bisher kein Know-How vorhanden war stellte sich schnell die Frage, ob man das automatisieren kann. Aber wer sollte das machen – wir brauchten also „Bob“. Bob kümmert sich seitdem um alle Themen rund um Build und Deployment.
Im Vortrag werden seine bisherigen Entscheidungen und Vorgehensweisen besprochen, aber auch offene Ideen und Punkte angerissen:
- Build-Tools
- Deployment-Tools
- Build-Automatisierungs-Tools
- Branching
- Continuous Integration Server
- Konventionen über Konfigurationen
- Code-Checks
- Build/Deploy Geschwindigkeit
- Eleminieren von Abhängigkeiten
- Minimieren Build/Deployment-Zeiten
- Verfügbarkeiten maximieren
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
Das Team Kreditplattform der IKB entwickelt seit etwa 2 Jahren mit ADF. Wegen der aktuellen Bindung an die SOA Suite verharrten wir seitdem auf der Version 11.1.1.5 mit diversen Bugs. Seit dem Erscheinen der Version 12c wurde die Migration der Anwendung vorbereitet und zum Zeitpunkt des Vortrags gerade abgeschlossen.
Dieser Praxisbericht beleuchtet das Vorgehen und Fallstricke der Migration
- Vorbereitung der Server
- Vorbereitung Entwicklungsumgebung
- Migrationspfad
- Aufgetretene Probleme und deren Lösung
- Bugs & Patches
- Migration MDS
- Automatische und manuelle Tests
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
Bei der Nutzung von ADF im Unternehmensumfeld wird man schnell erschlagen von der Fülle der Entscheidungen z. B. zu Architektur, zur Anwendung von Best Practices und Regeln.
Generell gilt das geflügelte Wort one size does not fit all: Jede der getroffenen Vorgaben ist für das Unternehmen, die Applikation oder sogar das einzelne Codefragment zu prüfen und zu hinterfragen. Die Nichtanwendung im Einzelfall sollte dokumentiert werden.
Wenn man sich denn einmal für einzuhaltende Regeln entschieden hat, wie prüft man diese an verschiedenen Stellen im Entwicklungsprozess? Wie sorgt man dafür, dass der Entwickler diese Regeln anwendet, ohne sich ständig weiterentwickelnde Entwicklerhandbücher durchlesen zu müssen?
Der Vortrag geht exemplarisch auf die in der ADF Entwicklung der IKB eingeführten Tools, Prozesse und Regeln ein, um eine qualitative Verbesserung der Code Basis zu erreichen und stellt genutzte Möglichkeiten zur Durchsetzung kritischer Regeln vor.
Bestandteile der aktuellen Lösung sind die Prüfung der Regeln im:
- JDeveloper mit
- Skripten für PMD, Findbugs und Checkstyle zur statischen Codeanalyse
- der integrierten Task View
- der JUnit Extension
- Skripten für JaCoCo zur Testabdeckung
- Continous Integration Server Jenkins mit den Plugins
- PMD, Findbugs und Checkstyle zur statischen Codeanalyse
- Task Scanner zur Prüfung offener Punkte
- Junit zur Testausführung
- JaCoCo zur Testabdeckung
Regulatorics: Offside is when the referee whistles - DOAG 2018Torsten Kleiber
The regulatory system has more and more influence on our software development.
Regulatory authorities, external and internal Auditors are increasingly examining our IT and not longer only our business processes and balance sheets. Some of them have better trained IT experts as we can find on the free market.
General standards such as ISO/IEC 2700X but also banking-specific standards such as BAIT and MaRisk now pose challenges that generally only large software manufacturers know. Approximately 40 % of our projects are now regulatory-driven.
Therefore, we are currently redefining our development process in order to implement the following requirements, among others * Unchangeability of the tested artefacts after the test * Functional segregation * Detection of accidental changes or intentional manipulations of the application
The lecture shows the vision of such a safe process. It shows the current status of implementation in SOA and ADF development, for example:
Migration of version management to GIT in Atlassian BitBucket
Application and selection criteria for a branching model
Mandatory code reviews in Atlassian BitBucket
Build and Deployment Pipelines in Jenkins
Automatic documentation in JIRA Issue via Bitbucket and Jenkins.
Maybe you too can minimize the additional work and continue to work agile to meet such requirements.
Already 4 years we plan the upgrade from 11c to a new supported version.
Somehow, on the one hand business projects were more important, on the other hand the exact technical procedure was not clear.
All databases have to be migrated, but some software vendors did not offer support at all.
The requirements diverged: consolidation to save costs versus dedicated environments to manage security and operations more easily.
When we finally knew how we wanted to proceed, technical details quickly threw the planning off course.
The target platform became 12c, 18 and now 19c
At some point, however, the threat of the final loss of support for 11g and the accumulating other requirements put the necessary pressure on the implementation.
This presentation will show you how and why we proceeded in this way and how we finally reached the finish line.
Maybe our experiences will help some of you to finally take the step!
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
Oft fällt die Frage, ob man PL/SQL überhaupt automatisiert testen kann. Deshalb behandelt dieser Vortrag u.a. die folgenden Themen:
- Welche Fehler will ich mit Testautomatisierung überhaupt vermeiden?
- Änderung des Datenmodells
- Änderung bestehender Programme
- Datenbank-Patching/-Upgrade
- Wie sieht eigentlich mein Entwicklungsprozess aus?
- Wie viele Entwickler habe ich?
- Welches Wissen haben meine Entwickler?
- Muss ich branchen?
- Muss ich häufig meinen Code umstrukturieren?
- Welche Frameworks gibt es für die Testautomatisierung?
- SQL Developer
- Quest Code Tester
- utPLSQL
- ruby-plsql-spec
- Welche Voraussetzungen muss ich erfüllen?
- Datenbankversionen
- Infrastruktur
- Für welchen Zweck eignet sich welches Framework?
- Unterstützung von CI-Servern
- Unterstützung von Build Systemen wie z.B. Maven
- Test Driven Development
Neben der Theorie sehen Sie natürlich auch in Demo's, wie sich der Testcode "anfühlt".
Der Vortrag soll Ihnen eine Entscheidungsgrundlage liefern, ob Sie demnächst auch automatisch testen wollen und können!
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
Das Team Kreditplattform der IKB entwickelt seit etwa 4 Jahren mit ADF. Wir deployen gegen den WebLogic Server. Mittlerweile arbeiten mittlerweile 15 Entwickler parallel an Projekten und Migrationen. Um dies zu gewährleisten wurden auch eine Menge Architekturentscheidungen neu gefällt und durch entsprechendes Refactoring umgesetzt.
Bereits mit dem ersten Lern-Projekt vor 4 Jahren kam das komplexe Thema Build- und Deployment auf. Da bisher kein Know-How vorhanden war stellte sich schnell die Frage, ob man das automatisieren kann. Aber wer sollte das machen – wir brauchten also „Bob“. Bob kümmert sich seitdem um alle Themen rund um Build und Deployment.
Im Vortrag werden seine bisherigen Entscheidungen und Vorgehensweisen besprochen, aber auch offene Ideen und Punkte angerissen:
- Build-Tools
- Deployment-Tools
- Build-Automatisierungs-Tools
- Branching
- Continuous Integration Server
- Konventionen über Konfigurationen
- Code-Checks
- Build/Deploy Geschwindigkeit
- Eleminieren von Abhängigkeiten
- Minimieren Build/Deployment-Zeiten
- Verfügbarkeiten maximieren
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
Das Team Kreditplattform der IKB entwickelt seit etwa 2 Jahren mit ADF. Wegen der aktuellen Bindung an die SOA Suite verharrten wir seitdem auf der Version 11.1.1.5 mit diversen Bugs. Seit dem Erscheinen der Version 12c wurde die Migration der Anwendung vorbereitet und zum Zeitpunkt des Vortrags gerade abgeschlossen.
Dieser Praxisbericht beleuchtet das Vorgehen und Fallstricke der Migration
- Vorbereitung der Server
- Vorbereitung Entwicklungsumgebung
- Migrationspfad
- Aufgetretene Probleme und deren Lösung
- Bugs & Patches
- Migration MDS
- Automatische und manuelle Tests
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
Bei der Nutzung von ADF im Unternehmensumfeld wird man schnell erschlagen von der Fülle der Entscheidungen z. B. zu Architektur, zur Anwendung von Best Practices und Regeln.
Generell gilt das geflügelte Wort one size does not fit all: Jede der getroffenen Vorgaben ist für das Unternehmen, die Applikation oder sogar das einzelne Codefragment zu prüfen und zu hinterfragen. Die Nichtanwendung im Einzelfall sollte dokumentiert werden.
Wenn man sich denn einmal für einzuhaltende Regeln entschieden hat, wie prüft man diese an verschiedenen Stellen im Entwicklungsprozess? Wie sorgt man dafür, dass der Entwickler diese Regeln anwendet, ohne sich ständig weiterentwickelnde Entwicklerhandbücher durchlesen zu müssen?
Der Vortrag geht exemplarisch auf die in der ADF Entwicklung der IKB eingeführten Tools, Prozesse und Regeln ein, um eine qualitative Verbesserung der Code Basis zu erreichen und stellt genutzte Möglichkeiten zur Durchsetzung kritischer Regeln vor.
Bestandteile der aktuellen Lösung sind die Prüfung der Regeln im:
- JDeveloper mit
- Skripten für PMD, Findbugs und Checkstyle zur statischen Codeanalyse
- der integrierten Task View
- der JUnit Extension
- Skripten für JaCoCo zur Testabdeckung
- Continous Integration Server Jenkins mit den Plugins
- PMD, Findbugs und Checkstyle zur statischen Codeanalyse
- Task Scanner zur Prüfung offener Punkte
- Junit zur Testausführung
- JaCoCo zur Testabdeckung
The article "WebLogic Server verwendet die Basis 12 - Das Dutzend ist voll" was published in the German Java Magazin 9.2012 and introduces WebLogic Server 12c with the complete Java EE 6 certification. Now WebLogic Server 12.1.3 supports Java SE 8 since JavaOne 2014 and WebLogic Server 12.1.3 supports some of the Java EE 7
specifications until it's fully Java EE 7 certified with WLS 12.2.1.
Vortragsreihe Dortmund: Unified Development EnvironmentsThorsten Kamann
Große Entwicklungsabteilungen stehen oft vor dem Problem einheitlicher Entwicklungsprozesse und Werkzeuge. Nach einiger Zeit hat jedes Projekt eigene Prozesse und Werkzeuge etabliert. Dies ist nicht im Sinne der Entwicklungsabteilung. Softwaresysteme müssen i. d. R. über Jahre hinweg gewartet und erweitert werden - oft von einem Team, das sich neu in die Anwendung einarbeiten muss.
Nicht selten stellt die Rekonstruktion der Entwicklungsumgebung einen erheblichen Aufwand dar.
Dieser Vortrag beschreibt - anhand eines Erfahrungsberichts - den Aufbau einer strukturierten Entwicklungsumgebung, die auch für grosse Entwicklungsabteilungen skaliert.
- Zentrale Projekt- und Codeverwaltung (ähnlich wie Sourceforge)
- Buildmanagement mit Maven
- Entwicklungswerkzeuge basierend auf Maven und Eclipse
- Installierbare Teamserver mit Virtualisierungstechnologie für Continuous Integration
Speaker: Sven Kölpin
Komponentenbibliotheken wie Primefaces und Richfaces stellen für die Entwicklung von JSF-Anwendungen eine Vielzahl komplexer Komponenten bereit. Aber der ersten Euphorie folgt die Ernüchterung. Und statt der erhofften Vorteile muss man sich mit neuen Problemen befassen. Dabei kann man sich mit HTML5, JavaScript, Composite Components und der Behavior API maßgeschneiderte Erweiterungen für die eigene Anwendung schaffen.
Der Vortrag zeigt wie man für eine JSF-Anwendung dynamische und wiederverwendbare Bausteine für die eigene Anwendung realisieren kann.
JCON 2017, Düsseldorf: Vortrag von Sonja Wittke (Senior Softwareingenieurin bei QAware).
Abstract: In vielen Projekten ist Maven als Buildtool gesetzt. Entwicklungsteam und Kunde sind daran gewöhnt, die Buildinfrastruktur ist aufgesetzt, alles läuft stabil. Es gibt keinen offensichtlichen Grund, etwas daran zu ändern. Trotzdem haben wir den Build für eines unserer Kunden-Projekte auf Gradle umgestellt, planen die Umstellung weiterer Builds, und setzen für neue Projekte ausschließlich Gradle ein. In diesem Vortrag beschreiben wir, warum wir uns für den Einsatz von Gradle stark gemacht haben, und zeigen dabei die wesentlichen Vorteile und Features. Aus unserer täglichen Arbeit liefern wir faire Vergleichszahlen zwischen Maven und Gradle. Wir zeigen außerdem, was wir bei der Migration richtig, aber auch was wir falsch gemacht haben, und wie wir die Migration unserer weiteren Projekte angehen wollen.
JBoss One Day Talk Vortrag
Kennen Sie das? Sie sind gerade dabei, die Projektkonfiguration für Ihre gefühlt tausendste Java-Web-Anwendung zu erstellen.
Sie nehmen sich Ihr letztes erfolgreiches Projekt-Setup als Vorlage. Und dann versuchen Sie durch beherztes Copy
und Paste das neue Projekt zu erstellen? Wenn Sie sich damit auch nicht abfinden wollen sind Sie in diesem Vortrag genau richtig.
Wir werfen einen Blick auf das noch sehr junge RAD-Tool JBoss-Forge und sehen, wie uns JBoss Forge den Entwickler Tag
bereichern kann.
This is my talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk introduces the basic concepts of the Zend Framework. Additionally some components are shown in more detail and some advanced concepts are covered.
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Informatik Aktuell
Wenn es das Ziel ist, Software regelmäßig auszuliefern, gegebenenfalls mehrmals am Tag, darf bei all den derzeitigen Überlegungen zu Automatisierung von Tests, Deployments und Infrastruktur die Datenbank nicht vergessen werden. Die Automatisierung von Änderungen (Migrationen) ist auch hier unverzichtbar. Inzwischen existieren Tools für diese Aufgabe, die sich sehr gut in den Entwicklungsprozess integrieren lassen. Die zwei bekanntesten Tools werden in diesem Vortrag vorgestellt und miteinander verglichen.
GameDuells Software-Architekt Dirk Ehms schildert praxisnahe Lösungsansätze für die Umstellung der modularen Spieleplattform mit über 100 Glassfish-Servern von JEE 6 nach JEE 7.
This is a talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk covers archtiectural aspects of client-development. The main focus is the comparison of data-, event- and state-binding concepts in PHP-only and PRADO based applications.
■Basics, die nichts mit Java/JVM zu tun haben aber wichtig sind ■Java und der Speicher ■Java und die CPU ■Java und Images
Vortrag auf dem Berlin Experte Day 2019
The article "JDK 8 im Fokus der Entwickler" in German language should help to embrace Java SE 8 features by developers and adopting these capabilities to test new applications in an early phase for a proven runtime environment or running JDK 8 in enterprises.
The article "WebLogic Server verwendet die Basis 12 - Das Dutzend ist voll" was published in the German Java Magazin 9.2012 and introduces WebLogic Server 12c with the complete Java EE 6 certification. Now WebLogic Server 12.1.3 supports Java SE 8 since JavaOne 2014 and WebLogic Server 12.1.3 supports some of the Java EE 7
specifications until it's fully Java EE 7 certified with WLS 12.2.1.
Vortragsreihe Dortmund: Unified Development EnvironmentsThorsten Kamann
Große Entwicklungsabteilungen stehen oft vor dem Problem einheitlicher Entwicklungsprozesse und Werkzeuge. Nach einiger Zeit hat jedes Projekt eigene Prozesse und Werkzeuge etabliert. Dies ist nicht im Sinne der Entwicklungsabteilung. Softwaresysteme müssen i. d. R. über Jahre hinweg gewartet und erweitert werden - oft von einem Team, das sich neu in die Anwendung einarbeiten muss.
Nicht selten stellt die Rekonstruktion der Entwicklungsumgebung einen erheblichen Aufwand dar.
Dieser Vortrag beschreibt - anhand eines Erfahrungsberichts - den Aufbau einer strukturierten Entwicklungsumgebung, die auch für grosse Entwicklungsabteilungen skaliert.
- Zentrale Projekt- und Codeverwaltung (ähnlich wie Sourceforge)
- Buildmanagement mit Maven
- Entwicklungswerkzeuge basierend auf Maven und Eclipse
- Installierbare Teamserver mit Virtualisierungstechnologie für Continuous Integration
Speaker: Sven Kölpin
Komponentenbibliotheken wie Primefaces und Richfaces stellen für die Entwicklung von JSF-Anwendungen eine Vielzahl komplexer Komponenten bereit. Aber der ersten Euphorie folgt die Ernüchterung. Und statt der erhofften Vorteile muss man sich mit neuen Problemen befassen. Dabei kann man sich mit HTML5, JavaScript, Composite Components und der Behavior API maßgeschneiderte Erweiterungen für die eigene Anwendung schaffen.
Der Vortrag zeigt wie man für eine JSF-Anwendung dynamische und wiederverwendbare Bausteine für die eigene Anwendung realisieren kann.
JCON 2017, Düsseldorf: Vortrag von Sonja Wittke (Senior Softwareingenieurin bei QAware).
Abstract: In vielen Projekten ist Maven als Buildtool gesetzt. Entwicklungsteam und Kunde sind daran gewöhnt, die Buildinfrastruktur ist aufgesetzt, alles läuft stabil. Es gibt keinen offensichtlichen Grund, etwas daran zu ändern. Trotzdem haben wir den Build für eines unserer Kunden-Projekte auf Gradle umgestellt, planen die Umstellung weiterer Builds, und setzen für neue Projekte ausschließlich Gradle ein. In diesem Vortrag beschreiben wir, warum wir uns für den Einsatz von Gradle stark gemacht haben, und zeigen dabei die wesentlichen Vorteile und Features. Aus unserer täglichen Arbeit liefern wir faire Vergleichszahlen zwischen Maven und Gradle. Wir zeigen außerdem, was wir bei der Migration richtig, aber auch was wir falsch gemacht haben, und wie wir die Migration unserer weiteren Projekte angehen wollen.
JBoss One Day Talk Vortrag
Kennen Sie das? Sie sind gerade dabei, die Projektkonfiguration für Ihre gefühlt tausendste Java-Web-Anwendung zu erstellen.
Sie nehmen sich Ihr letztes erfolgreiches Projekt-Setup als Vorlage. Und dann versuchen Sie durch beherztes Copy
und Paste das neue Projekt zu erstellen? Wenn Sie sich damit auch nicht abfinden wollen sind Sie in diesem Vortrag genau richtig.
Wir werfen einen Blick auf das noch sehr junge RAD-Tool JBoss-Forge und sehen, wie uns JBoss Forge den Entwickler Tag
bereichern kann.
This is my talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk introduces the basic concepts of the Zend Framework. Additionally some components are shown in more detail and some advanced concepts are covered.
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Informatik Aktuell
Wenn es das Ziel ist, Software regelmäßig auszuliefern, gegebenenfalls mehrmals am Tag, darf bei all den derzeitigen Überlegungen zu Automatisierung von Tests, Deployments und Infrastruktur die Datenbank nicht vergessen werden. Die Automatisierung von Änderungen (Migrationen) ist auch hier unverzichtbar. Inzwischen existieren Tools für diese Aufgabe, die sich sehr gut in den Entwicklungsprozess integrieren lassen. Die zwei bekanntesten Tools werden in diesem Vortrag vorgestellt und miteinander verglichen.
GameDuells Software-Architekt Dirk Ehms schildert praxisnahe Lösungsansätze für die Umstellung der modularen Spieleplattform mit über 100 Glassfish-Servern von JEE 6 nach JEE 7.
This is a talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk covers archtiectural aspects of client-development. The main focus is the comparison of data-, event- and state-binding concepts in PHP-only and PRADO based applications.
■Basics, die nichts mit Java/JVM zu tun haben aber wichtig sind ■Java und der Speicher ■Java und die CPU ■Java und Images
Vortrag auf dem Berlin Experte Day 2019
The article "JDK 8 im Fokus der Entwickler" in German language should help to embrace Java SE 8 features by developers and adopting these capabilities to test new applications in an early phase for a proven runtime environment or running JDK 8 in enterprises.
Anwendungsmodernisierung mit Oracle Application Express (APEX)Niels de Bruijn
Lernen Sie warum man für legacy Anwendungen basierend auf Oracle Forms oder MS Access überlegen sollte, warum eine Migration auf eine neue Technologie sinnvoll ist.
Enabling AgileBI by managing the data warehouse software lifecycle with DataVault 2.0, generators, data virtualization and cotinuous integration using open source tools
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
In Java gibt es kein Standard-API, das die Ausdrucksstärke und Mächtigkeit von SQL direkt unterstützt. Alle Aufmerksamkeit ist auf objekt-relationales Mapping und andere höhere Abstraktionslevel gerichtet, beispielsweise OQL, HQL, JPQL, CriteriaQuery. jOOQ ist ein dual-lizenziertes Open-Source-Produkt, das diese Lücke füllt. Es implementiert SQL als typsichere domänen-spezifische Sprache direkt in Java und ist eine gute Wahl für Java-Applikationen, in denen SQL und herstellerspezifische Datenbankfunktionalität wichtig sind. Es zeigt, wie eine moderne domänenspezifische Sprache die Entwicklerproduktivität stark erhöhen kann, indem SQL direkt in Java eingebettet ist.
Oracle does support Docker for a couple of products since a while. In theory, a simple "docker run" instantiates a container from a docker image. But why isn't the DB container ready in a few seconds? Where does my Oracle DB image come from and what happens if the container is stopped again? The functional scope as well as the size of Oracle database container presuppose that one or the other thoughts about the use and the operation are made in advance. This includes topics such as data persistence, licensing and other operational aspects. This presentation explains how Oracle databases can be installed, configured and operated as containers in a Docker Image.
Wenn Sie Solr vs. Elasticsearch in Google eingeben, bekommen Sie eine ganze Reihe von Blogs, Artikeln, Vergleichen, Meinungen und Gedanken, die sich diesem Thema widmen. Warum sollten Sie sich dieses Webinar also anhören und ansehen? Weil keiner der Links, die Sie über Google finden, tatsächlich die aktuellen Versionen der beiden Technologien aus dem Bereich Open Source Suchmaschinen abdeckt, sondern auf teilweise sehr betagte Artikel führen. Gerade im Open Source Bereich ist Aktualität jedoch entscheidend, denn hier werden Entwicklungen in teilweise rasantem Tempo vorangetrieben.
Aber nicht nur die Tatsache, dass es sich hierbei um ein tagesaktuelles Webinar handelt, sondern auch die Tatsache, dass es zwei führende Open Source Suchserver gibt, macht die Notwendigkeit, diese beiden Projekte zu vergleichen, offensichtlich. Ist Elasticsearch ein momentaner Trend, dem man folgen sollte? In welchen Gebieten ist Apache Solr die wegweisende Technologie? Gibt es Branchen, in denen sich der Einsatz einer Technologie verbietet oder besonders anbietet? Ist Elasticsearch im Gegensatz zu Solr wirklich schemafrei und warum bringt mir das einen Vorteil? Diesen und noch mehr Fragen werden wir auf den Grund gehen, um Sie letztendlich bei der Beantwortung der Frage zu unterstützen, auf welches Pferd Sie in Ihrem Unternehmen setzen sollten.
Als neutraler Technologieberater, der Partnerschaften zu LucidWorks und Elasticsearch pflegt, sind wir in der Lage, diesen Vergleich technisch, strategisch und konzeptionell zu ziehen. Verpassen Sie diese einmalige Gelegenheit also nicht!
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Peter Ramm
Zur Beeinflussung der Laufzeit von SQL-Statements gibt es diverse Verfahren, Optimierung der SQL-Syntax, Nutzung von Optimizer-Hints etc. .
Diese erfordern aber oftmals ein Ausrollen der geänderten Software mit dem entsprechenden Zeit- und Prozessaufwand bis zur produktiven Aktivierung.
In kritischen Produktions-Szenarien ist oft eine schnellere Lösung von Problemen mit SQL-Ausführung nötig.
Dieser Vortrag demonstriert, mit welchen Verfahren der Oracle-DB sich SQL-Ausführungen auch ohne Ausrollen von Software-Änderungen ad hoc beeinflussen lassen.
Das Tool Panorama erlaubt dabei über GUI die Identifikation der kritischen SQL und Generierung der für ihre schnelle Optimierung nötigen komplexen DB-Kommandos.
Qualitätsstandards in der Datenbankentwicklung.pdfOliver Lemm
Die Qualität von Anwendungen, welche im Daten in der Datenbank speichern beruht zu großen Teilen auf der Qualität des Datenbankmodells, der Codequalität und den Daten selber.
In diesem Vortrag werden für alle 3 Kategorien Qualitätsstandards vorgestellt, die maßgeblich sind für eine hohe Qualität. Gerade im Bereich des Datenmodells, lassen sich viele logische Fehler innerhalb der Daten durch ein möglichst restriktives Datenmodell inklusive passender Metadaten verhindern. Auch in Bezug auf Definition von Berechtigungen oder Auswertungen sind sauber definierte Datenmodelle der Schlüssel zum Erfolg. Im Code gilt es dann angefangen von Code Guidelines, bis hin zu Best Practices im Bereich Logging, Exception Handling und allgemeiner Logik passend einfließen zu lassen.
Zuletzt sind Anforderung im Bereich der Stammdaten oder erwartete Mengen von Daten in bestimmten Tabellen ein Ansatz um böse Überraschungen zu vermeiden. Insgesamt hilft dieser Vortrag jedem der einem der den hohen Qualitätsstandards heutiger Anwendungen im Bereich der Datenbankentwicklung gerecht werden will.
Ähnlich wie Agile Oracle database modeling and development - APEX Connect 2020 (20)
Qualitätsstandards in der Datenbankentwicklung.pdf
Agile Oracle database modeling and development - APEX Connect 2020
1. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Agile Oracle Datenbank-
Modellierung und -Entwicklung
6.5.2020 - Torsten Kleiber
1
2. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Agenda
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Agenda
Einführung
Über meinen Arbeitgeber
Über mich
Was ist Test Driven Development (TDD)?
Wie sieht meine Datenbank-Entwicklungsumgebung aus?
utPLSQL - Tes ramework für Oracle Datenbank
TDD in der Datenbank-Entwicklung
Datenbank Design mit Liquibase
So ware Development Lifecycle (SDLC)
TDD in der Datenbank-Modellierung
TDD in der Qualitätssicherung
Umgang mit Merge Konflikten
Fazit
Q&A
2
3. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Einführung
Was meinen wir eigentlich, wenn wir sagen wir wollen agil sein?
Anforderungen sind nicht fest und können sich während der Realisierung ändern!
Parallelisierbarkeit der Umsetzung
Dann machen wir doch Features in Branches!
Wie merged man die, wenn diese einsatzbereit sind?
Wie erkenne ich, was von was abhängig ist?
Automa sche Tests zeigen, ob nach dem Merge noch alles funk oniert!
Und wie bekomme ich genügend automa sche Tests?
Test Driven Development wird das schon richten!
Ja - in der Frontend-/Java-/XXX-Entwicklung geht das vielleicht!
Was ist aber die wirkliche Grundlage der meisten unserer Anwendungen?
Die Oracle Datenbank mit Datenmodell und Programmiersprache PL/SQL!
Da geht das alles aber doch gar nicht!
Warum eigentlich nicht?
Wie geht das: agil und testgestrieben von der Anforderung bis zum Refactoring?
Begeben wir uns auf unsere Reise!
3
4. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Über meinen Arbeitgeber
4
5. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Über mich
Torsten Kleiber
So ware-Architekt, Entwickler, DevOps,
Administrator
Kreditpla orm
Seit 20 Jahren bei der IKB
23 Jahre Erfahrung
PL/SQL
Forms & Reports
ADF
SOA Mediator
Architektur & Infrastruktur
Fusion Middleware
Development Tools
Development Lifecycle
5
6. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
““
Was ist Test Driven Development (TDD)?
Test-driven development (TDD) is a so ware development
process that relies on the repe on of a very short development
cycle:
Requirements are turned into very specific test cases, then the
so ware is improved so that the tests pass.
This is opposed to so ware development that allows so ware to
be added that is not proven to meet requirements.
— Wikipedia
6.1
7. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD: einfacher Zyklus
6.2
8. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD: globaler Zyklus
6.3
9. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD: Voraussetzungen
vollständige Entwicklungsumgebung pro Entwickler inclusive Datenbank
am besten lokal
generische Build-, Deployment- und Test-Prozesse für Entwicklung und CI
Open Mind: Entwickler muss die Methode akzep eren und leben!
6.4
10. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Wie sieht meine Datenbank-
Entwicklungsumgebung aus?
Neben IDE’s ist in unserem Fall die Datenbank bereitzustellen.
Folgende Op onen bieten sich an:
seperate Schemas für jeden User in einer Datenbank
nur bei 1 Applika onsschema
aufwändige Applika ons-Konfigura on
Grant-/Synonym-Hölle zwischen Daten- und Applika onsschemas
Virtuelle Maschinen oder Docker Container
rela v hohe Laufzeiten bei wiederholter Erstellung
Snapshot Copies
EE mit Mul tenant Op on erforderlich (> 2 Snapshot Copies)
schnelle Erstellung
…
7.1
11. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Datenbank: Vorbereitung
1. Download (Pre-Built Developer VMs for Oracle
VM VirtualBox)
2. VM impor eren und starten per GUI oder CLI:
VBoxManage import %download_path%DeveloperDaysVM2019-05-31_20.ova ^
--vsys 0 --cpus 4 --memory 16384 --eula accept
VBoxManage startvm "Oracle DB Developer VM"
3. Gasterweiterungen manuell einlegen und ausführen, danach Savepoint erstellen
VBoxManage snapshot "Oracle DB Developer VM" take base --live
4. utPLSQL in PDB installieren
curl -Lk gitreleases.dev/gh/utPLSQL/utPLSQL/latest/utPLSQL.zip -o utPLSQL.zip
tar -xf utPLSQL.zip
pushd utPLSQLsource
sqlplus sys/oracle@//localhost/orcl as sysdba @install_headless.sql
5. Snap Shot Copy konfigurieren
connect sys/oracle@//localhost/orclcdb as sysdba
-- Ändern des Parameters clonedb der CDB
alter system set clonedb=true scope=spfile;
shutdown immediate
startup
-- PDB orcl nur für Lesen öffnen, da hier nur als Template genutzt
alter pluggable database orcl open read only force;
Database App Development VM
7.2
12. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Datenbank: Snapshot Copy erzeugen / löschen
1. Pro User oder Branch wird eine neue Snapshot Copy erzeugt und je nach
Anforderung der zu nutzende Servicename übergeben.
2. Das Löschen erfolgt ebenfalls über den Servicenamen.
-- Anmelden an die CDB
connect sys/oracle@//localhost/orclcdb as sysdba
alter pluggable database &1 close;
drop pluggable database &1 including datafiles;
-- Anmelden an die CDB
connect sys/oracle@//localhost/orclcdb as sysdba
-- PDB orcl nur für Lesen öffnen, da hier nur als Template genutzt
alter pluggable database orcl open read only force;
create pluggable database &1 from orcl create_file_dest = '/u01/app/oracle/oradata/ORCLCDB' snapshot copy
alter pluggable database &1 open;
7.3
13. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
utPLSQL - Testframework für Oracle Datenbank
ursprünglich von Steven Feuerstein entwickelt
2016 komple neu geschrieben und jetzt wirklich reif für den
professionellen Test
100% Opensource und kostenlos
unterstützt den TDD Zyklus
einfach
utPLSQL Name unglücklich gewählt, da nicht nur für Unit-Tests nutzbar
selbst in PL/SQL geschrieben
Tests sind selbst Packages
alles testbar, was ich in der Datenbank machen kann
orien ert sich an anderen Frameworks wie jUnit etc.
zum Vergleich erwarteter und aktueller Ergebnisse
arbeitet mit (Vorsicht mit Forma ern!)
über PL/SQL (ut.run), CLI, SQL Developer / TOAD Plugin
verschiedene für Screen, XUnit, Teamcity, Sonar und
bringt mit
installierbar
Expecta ons und Matcher
Annota onen
Ausführung
Reporter Code Coverage
Best Prac ces
8
14. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD in der Datenbank-Entwicklung
Wir wollen eine einfache Annuität berechnen:
Demo me →
9.1
15. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neues Test Package
1. Erzeuge einen neuen Branch und pushe ihn
2. Schreibe einen neuen Test!
CREATE OR REPLACE PACKAGE test_annuitaeten AS
--%suite(Annuitaetenberechnung)
--%test(Normale Nutzung)
--%tags(unit)
PROCEDURE normale_nutzung;
END;
/
3. Prüfe, dass der Test scheitert!
9.2
16. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neuer Test Package Body
1. Schreibe die Tes mplemen erung!
2. Prüfe, dass der Test scheitert!
CREATE OR REPLACE PACKAGE BODY test_annuitaeten AS
PROCEDURE normale_nutzung IS
BEGIN
ut.expect(annuitaeten.get_annuitaet(250000, 0.05, 10)).to_equal(32376.143741364173874951668563451
END;
END;
/
9.3
17. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Code
1. Schreibe genau so viel Code, das der Test erfolgreich ist!
2. Prüfe, dass der Test erfolgreich ist!
CREATE OR REPLACE PACKAGE annuitaeten AS
FUNCTION get_annuitaet (
kreditsumme IN NUMBER,
zinssatz IN NUMBER,
laufzeit IN NUMBER
) RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY annuitaeten AS
FUNCTION get_annuitaet (
kreditsumme IN NUMBER,
zinssatz IN NUMBER,
laufzeit IN NUMBER
) RETURN NUMBER IS
BEGIN
RETURN kreditsumme * (((1 + zinssatz) ** laufzeit) * zinssatz) / (((1 + zinssatz) ** laufzeit) -
END;
END;
/
9.4
18. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
““
Datenbank Design mit Liquibase
One of the biggest ques ons is how to make evolu onary design
work for databases.
— Pramod Sadalage (Thoughtworks)
10.1
19. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Liquibase: Einführung
migra ons-basiertes Datenbank-Change-Management
, u.a. Oracle, MySQL, SQL Server,
Sybase, DB2, SQLite …
: CLI, ANT, Maven, Spring …
Textbasiertes Change Log File steuert die Ausführungs-Reihenfolge
atomare Change Sets inline oder als Include
: Eine Änderung pro Change Set
Change Set Formate:
deklara v: XML, YAML, JSON (generiert aus den Changes SQL für Ziel-
Datenbank, teilweise inclusive Rollback)
(Datenbank-spezifische Dialekte möglich)
/ der Datenbank mit incl. Hash
Steuerung von Changesets durch vordefinierte (Datenbank, SQL
Abfrageergebnis, …)
Steuerung durch dem Runner mitgegebene (Testdaten nur auf Test, …)
dem Runner mitgegebene können im Changeset als Variable genutzt
werden (Tabelle, Spalte, …)
datenbankunabhängig
Runner
Best Prac ce
SQL
Update Rollback Tracking in Datenbanktabellen
Pre-Condi ons
Contexts
Parameter
10.2
20. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Liquibase CE: Community Edition
kostenlose Variante von Liquibase
Viele Oracle Objekte werden durch die nicht unterstützt, z.B.
PL/SQL
Change Log Format SQL unterstützt komple en Sprachumfang von Datenbanken
Rollback muss dann, wenn erforderlich, auch selbst in SQL geschrieben werden
Reihenfolge der Ausführung wird selbst festgelegt
Change Tags
10.3
21. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Liquibase CE mit Community Oracle Extensions
unterstützen weitere Objekte, u.a.
Check-Constraints
Trigger
Materialized Views
Disable/Enable Check-Constraints/Trigger
Merge
Truncate
kein PL/SQL
seit mehreren Jahren nicht mehr gepflegt
Oracle Change Tags werden als Pro Tag erkannt und ohne Lizenz verweigert:
<changeSet author="torst (generated)" id="1573059733408-39">
<ora:createTrigger
...
Change Type 'pro:createTrigger' is not allowed without a valid Liquibase Pro License.
Einsatz m.E. deshalb nicht zu empfehlen
Oracle Extensions
10.4
22. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Liquibase Professional Edition
kostenpflich ge Liquibase Version von Da cal
der Liquibase PRO-Version unterstützen weitere Objekte, u.a.
Check-Constraints
PL/SQL (Func on/Procedure, Package, Package Body)
Synonyme
Trigger
Unused Columns
keine Materialized Views
kein Rollback
Preis abhängig von
14 tägige verfügbar
Einsatz nicht getestet
Change Tags
Anzahl Datenbankverbindungen
Trial
10.5
23. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
>_
Liquibase CE mit Oracle’s Oracle Extensions
Capture von Objekten nur per SQLcl ab Version 19.2
dafür zusätzliche Tabelle DATABASECHANGELOG_EXPORT
als XML Changeset
über DBMS_METADATA
incl. Rollback
derzeit nur für angemeldeten Benutzer
Reihenfolge wird automa sch erzeugt
DDL Preview Modus
Deployment von Objekten
per SQLcl ab Version 19.2.1
per Liquibase-API’s mit oracle-liquibase.jar in in liquibase/lib/ext
unterstützt Oracle Datenbank 11.2+
supportete Objek ypen
Dokumenta on
10.6
24. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Welche Variante nimmt man nun?
Analyse über ein Legacy-System, hier
das Demo-Schema HR
10.7
25. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
““
““
““
““
““
““
““
Liquibase ORA: Fazit
Oracle’s Liquibase Extensions zeichnet Oracle-Datenmodelle und
-Programme auf und kann diese auch wieder einspielen.
Daten werden nicht aufgezeichnet und eingespielt.
Diff nach Änderung wird nicht erzeugt.
Eigenes Change Set Format, Schema nicht dokumen ert.
Nutzung nur mit gebündelter Liquibase Version möglich.
Die Extension hat prinzipiell Potenzial.
→ erste Version, später wieder anschauen!
10.8
26. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
““
““
““
Liquibase CE: Generieren des Legacy Change
Logs
Generierung leidet unter mangelnden Support von Oracle
Objekten.
Nacharbeiten wiegen Generierung der Objekte nicht auf.
Wenn ich sowieso SQL Changesets nutzen will, weil ich nur dort
alle Oracle Objekte nutzen kann, gibt es vielleicht einen anderen
Weg der Generierung außerhalb von Liquibase?
10.9
28. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
SQL Developer: Legacy Database Change Log (2)
2. Master SQL File wird mitgeneriert
3. Mit Tastaturmakros ist daraus leicht das Database Change Log zu erzeugen
Bei Triggern und PL/SQL muss der endDelimiter korrekt auf
"n/s*n>|n/s*/$" gesetzt werden! (n = Zeilenumbruch, s* =
beliebig viele Whitespace-Zeichen, $ = Dateiende, | = oder)
--------------------------------------------------------
-- File created - Thursday-November-07-2019
--------------------------------------------------------
@X:gitde.kleiber.demos.oracle.database.tddsrcmainresourcesliquibaselb_sqldSEQUENCESDEPARTMENTS_S
...
@X:gitde.kleiber.demos.oracle.database.tddsrcmainresourcesliquibaselb_sqldPROCEDURESADD_JOB_HIST
...
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:appdba="http://www.datical.n
<changeSet id="0000000000000-1" author="legacy">
<sqlFile path="SEQUENCES/DEPARTMENTS_SEQ.sql" relativeToChangelogFile="true"/>
</changeSet>
...
<changeSet id="0000000000000-41" author="legacy">
<sqlFile path="PROCEDURES/ADD_JOB_HISTORY.sql" relativeToChangelogFile="true" endDelimiter="n/s
</changeSet>
...
10.11
29. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Liquibase: Sync Legacy System mit Changelog
Anforderungen:
Datenmodell und Daten sollen nicht geändert werden
Liquibase Tabellen sollen angelegt werden
Change Sets sollen als ausgeführt eingetragen werden
→ Alles in einem Befehl:
liquibase --driver=oracle.jdbc.OracleDriver ^
--classpath="%oracle_home%ojdbc8.jar" ^
--changeLogFile=%~dp0lb_sqldcontroller.xml ^
--url="jdbc:oracle:thin:@localhost/%1" ^
--username=hr ^
--password=oracle ^
changelogSync
10.12
30. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
““
““
““
““
Liquibase CE: Fazit
Liquibase CE ist für Oracle nutzbar,
wenn spezifische Oracle Objekte wie z.B. Check Constraints
oder PL/SQL nicht genutzt werden müssen
oder für diese SQL Change Sets inklusive SQL Rollback
Statements erzeugt werden.
Forma ed SQL Changelogs sollten nicht genutzt werden, diese
sind stark bugbeha et.
Sta dessen sollte der genutzt werden.
Sowohl Legacy als auch Updates generell lassen sich per SQL
Developer Database Export erzeugen.
Change sqlFile
10.13
31. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Software Development Lifecycle (SDLC)
Empfehlung:
Toolchain, die Branches und Pull Requests (incl. Merge) automa sch baut
hier: Jenkins Mul branch Pipeline mit Github- oder Bitbucket-Repository
11.1
32. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Ablauf
1. Anforderung sollte möglichst klein
aber unabhängig sein
2. Branch wird nach jedem Push in
Branch gebaut
3. Pull Request wird nach jedem Push
in Branch oder Master gebaut
4. Beim Bauen wird der Master auf
den Pull Request testweise
gemerged
11.2
33. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD in der Datenbank-Modellierung
Die Daten weisen auf den ISO 3166-1 ALPHA-2 Code hin, aber da fehlen doch
Validierungen?
Demo me →
12.1
34. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neuer Branch
1. Erzeuge einen neuen Branch und pushe ihn
12.2
35. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neues Test Package
1. Schreibe einen neuen Test!
CREATE OR REPLACE PACKAGE test_iso3166 AS
--%suite(ISO 3166 Laendercodes)
--%test(ALPHA-2 Code muss uppercase sein)
--%throws(-02290)
--%tags(model)
PROCEDURE alpha2_uppercase;
END;
/
2. Prüfe, dass der Test scheitert!
12.3
36. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neuer Test Package Body
1. Schreibe die Tes mplemen erung!
CREATE OR REPLACE PACKAGE BODY test_iso3166 AS
PROCEDURE alpha2_uppercase IS
BEGIN
INSERT INTO countries (country_id, country_name, region_id)
VALUES ('xx', 'name', 1);
END;
END;
/
2. Prüfe, dass der Test scheitert!
12.4
37. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Code
1. Schreibe genau so viel Code, das der Test erfolgreich ist!
ALTER TABLE "HR"."COUNTRIES"
ADD CONSTRAINT "COUNTRY_ID_UPPERCASE" CHECK ( country_id = upper(country_id) ) ENABLE;
2. Prüfe, dass der Test erfolgreich ist!
12.5
38. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Weiterer Test
1. Schreibe einen weiteren Test und die Implemen erung!
...
--%test(ALPHA-2 Code muss zweistellig sein)
--%throws(-02290)
--%tags(model)
PROCEDURE alpha2_zweistellig;
...
PROCEDURE alpha2_zweistellig IS
BEGIN
INSERT INTO countries (country_id, country_name, region_id)
VALUES ('X', 'name', 1);
END;
...
2. Prüfe, dass der Test scheitert!
12.6
39. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Code
1. Schreibe genau so viel Code, das der Test erfolgreich ist!
2. Prüfe, dass der Test erfolgreich ist!
ALTER TABLE "HR"."COUNTRIES"
ADD CONSTRAINT "COUNTRY_ID_ISO_3166_ALPHA2" CHECK (REGEXP_LIKE(COUNTRY_ID, '^[[:alpha:]]{2}$')) ENABL
12.7
40. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Refactor
1. Verbessere den Code, ohne sein Verhalten zu ändern!
2. Prüfe, dass der Test erfolgreich ist!
ALTER TABLE "HR"."COUNTRIES" DROP CONSTRAINT "COUNTRY_ID_ISO_3166_ALPHA2";
ALTER TABLE "HR"."COUNTRIES"
ADD CONSTRAINT "COUNTRY_ID_ISO_3166_ALPHA2" CHECK (REGEXP_LIKE(COUNTRY_ID, '^[[:alpha:]]{2}$') AND CO
ALTER TABLE "HR"."COUNTRIES" DROP CONSTRAINT "COUNTRY_ID_UPPERCASE";
12.8
41. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Skripte erstellen, testen und versionieren (1)
1. Skripte wie gehabt aus SQL Developer erstellen
2. Testen
a. Apply Changelog auf lokalen Entwicklungs-Snapshot
b. Test mit SQL Developer
c. Prüfen, ob alle neuen Tests erfolgreich sind
12.9
42. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Skripte erstellen, testen und versionieren (2)
3. Commit
12.10
43. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Branch pushen
12.11
44. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
CI: Branch wird gebaut und getestet
12.12
45. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Pull Request nach 1. Branch Commit erstellen
12.13
46. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
CI: Pull Request wird nach jedem Push gebaut
12.14
47. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
TDD in der Qualitätssicherung
Braucht jede Tabelle einen Primary Key?
13.1
48. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Neues Test Package
1. Erzeuge einen neuen Branch und pushe ihn
2. Schreibe einen neuen Test!
CREATE OR REPLACE PACKAGE test_qa AS
--%suite(Qualitaetsanalyse)
--%test(Jede Tabelle muss einen Primary Key haben)
--%tags(qa)
PROCEDURE table_pk;
END;
/
3. Prüfe, dass der Test scheitert!
13.2
49. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Code
1. Schreibe genau so viel Code, das der Test erfolgreich ist!
2. Prüfe, dass der Test erfolgreich ist!
CREATE OR REPLACE PACKAGE BODY test_qa AS
PROCEDURE table_pk IS
l_expected SYS_REFCURSOR;
l_actual SYS_REFCURSOR;
BEGIN
OPEN l_expected FOR SELECT * FROM user_tables t WHERE 0=1;
OPEN l_actual FOR SELECT * FROM user_tables t WHERE NOT EXISTS (
SELECT * FROM user_constraints c WHERE c.table_name = t.table_name AND c.constraint_type = 'P'
);
ut.expect(l_actual).to_equal(l_expected);
END;
END;
/
13.3
50. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Code
1. Schreibe genau so viel Code, das der Test erfolgreich ist!
2. Prüfe, dass der Test erfolgreich ist!
CREATE OR REPLACE PACKAGE BODY test_qa AS
PROCEDURE table_pk IS
l_expected SYS_REFCURSOR;
l_actual SYS_REFCURSOR;
BEGIN
OPEN l_expected FOR SELECT * FROM user_tables t WHERE 0=1;
OPEN l_actual FOR SELECT * FROM user_tables t WHERE NOT EXISTS (
SELECT * FROM user_constraints c WHERE c.table_name = t.table_name AND c.constraint_type = 'P'
) AND t.table_name != 'DATABASECHANGELOG';
ut.expect(l_actual).to_equal(l_expected);
END;
END;
/
13.4
51. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Refactor
1. Verbessere den Code, ohne sein Verhalten zu ändern!
2. Prüfe, dass der Test erfolgreich ist!
CREATE OR REPLACE PACKAGE BODY test_qa AS
PROCEDURE table_pk IS
l_expected SYS_REFCURSOR;
l_actual SYS_REFCURSOR;
BEGIN
OPEN l_expected FOR SELECT t.table_name FROM user_tables t WHERE 0=1;
OPEN l_actual FOR SELECT t.table_name FROM user_tables t WHERE NOT EXISTS (
SELECT 1 FROM user_constraints c WHERE c.table_name = t.table_name AND c.constraint_type = 'P'
) AND t.table_name != 'DATABASECHANGELOG';
ut.expect(l_actual).to_equal(l_expected);
END;
END;
/
13.5
52. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
weitere SDLC Schritte
1. Skripte erstellen, testen und versionieren
2. Branch pushen
3. CI: Branch wird gebaut und getestet
4. Pull Request nach 1. Branch Commit erstellen
5. CI: Pull Request wird nach jedem Push gebaut
13.6
53. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Merge Pull Request
13.7
54. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Branch löschen
13.8
55. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Umgang mit Merge Konflikten
14.1
56. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Merge Konflikt im Pull Request für Branch
model
14.2
57. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Merge Konflikt lösen
14.3
58. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Commit Merge
14.4
59. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
CI: Branch wird gebaut und getestet
14.5
60. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
CI: Pull Request wird nach jedem Push gebaut
14.6
61. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
weitere SDLC Schritte
1. Merge Pull Request
2. Branch löschen
14.7
62. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Master Build erfolgreich incl. aller Tests/
Änderungen
14.8
63. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Fazit
Yes - we can agile Datenbank-Entwicklung und Modellierung!
Branchen und Mergen sind möglich!
Paralleles Entwickeln/Testen unter Berücksich gung von Abhängkeiten möglich!
Toolchain mit Liquibase, utPLSQL, GitHub/Bitbucket, Jenkins unterstützt uns
15
64. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Q&A
16
65. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Referenzen
, Xaver Pigeon
, Johannes Ahrends, CarajanDB
, Wikipedia
, Pramod Sadalage, Thoughtworks
, Jeff Smith, Oracle
, Dokumenta on, Oracle
, AskTom, Oracle
Test-Driven Development: global cycle
Mul tenant Snapshot Copy
Annuitätendarlehen
Evolu onary Database Design
Liquibase and SQLcl
Using Liquibase with SQLcl
Primary Key
17
66. Agile Oracle Datenbank-Modellierung und -EntwicklungAgile Oracle Datenbank-Modellierung und -Entwicklung
@develishdevelop #APEXCONN20 #AgileOracleDatabase
Referenzen
, Xaver Pigeon
, Johannes Ahrends, CarajanDB
, Wikipedia
, Pramod Sadalage, Thoughtworks
, Jeff Smith, Oracle
, Dokumenta on, Oracle
, AskTom, Oracle
Test-Driven Development: global cycle
Mul tenant Snapshot Copy
Annuitätendarlehen
Evolu onary Database Design
Liquibase and SQLcl
Using Liquibase with SQLcl
Primary Key
17