SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Ralf Sigmund / Christoph Ortmann
OPITZ CONSULTING GmbH

Integrationsprojekte auf dem Weg
zur Continuous Delivery
Agenda

                   Build


         Tests             Deployment




Rahmen            Erfolg        Konfiguration
Books on Demand
ERP System
Erfolgsrezept

                   &       KANBAN


PL / SQL


           Kurze Time to
           Market
Projekt




Scan Dienstleister anbinden!
B2B
   Books on Demand                                 Digitalisierungs-Anbieter

                                 Order

digitale
                                                     externe Dienste
Publikationsplattform


                        Order Ready Notification



                               Delivery
?
Forts.




         ORACLE   Internet
Zielarchitektur EIPs mit Camel




              http://www.enterpriseintegrationpatterns.com/
Big Picture
Start
Auftragversand
Die Antwort verarbeiten
            Statusinformationen über den Erhalt des
            Auftrags .

            Sowohl der Returncode als auch die
            vollständige Antwort werden mithilfe des
            O/R Mappers in der Datenbank
            gespeichert.
Fertig zum liefern




HTTP Service
Eine zweite Route bildet die
Auftragsbestätigung durch das System des
Dienstleisters ab. Er sendet diese an BoD,
sobald die Bearbeitung des Auftrages
abgeschlossen ist.
Camel und PL/SQL passen prima
         zusammen



PL/SQL               Camel
         Fachlogik           Integration
Monitoring und Verfügbarkeit
• Datenbank als zentraler Monitoringpunkt
Selbsttest
2   Test-Nachrichten
    Um die Verfügbarkeit des
    Integrationsservers zu kontrollieren,
    werden die Camel-Routen in äquidistanten
    Zeitabständen durch spezielle Testaufträge
    angestoßen.
Internet-Verbindung

Test-Nachricht an Google Chart API
Agenda

               Build

     Tests             Deployment




Rahmen        Erfolg        Konfiguration
Welche Tests benötigen wir?
                              Geschäftsanforderungen
Autom.                                                               manuell

                         Functional
                          Examples
                                                       Exploratory
                         Story Tests
Supporting the Team




                                                                           Critique Product
                         Simulations
                                         Q2     Q3

                                         Q1     Q4
                                                  Performance & Load
                          Unit Tests                      Testing
                       Component Tests               Security Testing
                                                   „ility“ Testing NFRs
                                                                     Tools/
Autom.                                                               Autom.
                                         Technologie
Unit Tests vermeiden Fehler


           •Testgetrieben
            vorgehen
Qualität   •Lean Prinzipien
           •Camel Test Support
Camel unterstützt Unit Tests durch
           Mock Endpunkte
      statusOK.expectedMessageCount(1);
      statusOK.expectedMessagesMatches(new
             ResultMessagePredicate("ok"));
      << PRODUCE >>


      assertMockEndpointsSatisfied();




↘Müssen explizit in Routendefinition angelegt
werden => Testcode in Produktionscode
Camel bietet Mocks als Stellvertreter
  partnerA.whenAnyExchangeReceived(new
         MockStatusProcessor("ok"));



• Verhalten eines Mocks kann durch Hinzufügen
  eines Processors gesteuert werden
• Rückgabe von Antwortnachrichten
• Exceptions für Test des Fehlerhandling
Interceptoren können im Test
       bestehende Routen ändern
A      B      C



       X      C



interceptSendToEndpoint("direct:partnerA")
       .skipSendToOriginalEndpoint().to("mock:partnerA")
       .to("direct:wsResponse");

context.getRouteDefinition("resultDecision").
       adviceWith(context,
       createRouteBuilderResultDecision());
Continuous Integration
• Ganz normal mit Jenkins / Hudson
Functional Tests


          •Für die
           Auftraggeber
Akzeptanz verständliche Tests
          •Build the right thing
Features beschreiben ausübbare
            Anforderungen
Feature: Place order
 As a Digital Publisher
 In order to be able to offer a book on my Publishing Plattform
 I want to order the scanning of the book by a Digitizing Provider

Scenario: place an order
 Given I am a valid API user
 And I use the payloadID "1079645778@yourdomain.com"
 And I send and accept XML
 And I give the order an orderID "XYZ-001"
 And I add an item with lineNumeber "1" and quantity "1" to the order
 And I set the Supplier EAN "1234567890123" for line item "1"
 When I send a POST request to "/orders" with the following:
 Then the response should be "200"
 And the XML response should be a cXML with payloadID
"1079645778@yourdomain.com" and status code "200"
Feature-Tests werden ausführbar
         durch Step Definitions
When I send a DELETE request to /incidents/task/5



steps.rb:
When /^I send a DELETE request to "([^"]*)"$/ do |path|
  delete path
end
Agenda

                 Provisionierung


         Tests                     Deployment




Rahmen             Erfolg               Konfiguration
Fehlerquellen gibt es auch nach den
               Tests
                         DB-URL
                         Queue-Name
               Konfig-   Service URL
               uration

      Code                 Umgebung

                                       Karaf-Version
                                       JDK-Version,.
              Fehler
Eine Deployment Pipeline
          Commit   Akzeptanz-
                                Lasttests   Release
           stage      tests




Commits
Umsetzung der Deployment Pipeline


                             Alles unter                            Alles
                          Versionskontrolle                     automatisieren



                 Provisionierung      Konfiguration   Provisionierung     Konfiguration


Infrastructure
as Code
Mit Chef einen Karaf Server
      provisionieren

        Kochbuch für Linux apt tool
        ..für Java



                                      Infrastructure as Code
                                      (in GIT oder SVN)
Ein Rezept für Karaf



            Dateien zur Basiskonfiguration

       Das Rezept
Mit Chef das Karaf Archiv
          herunterladen

remote_file "/tmp/k.tar.gz" do
 action :create_if_missing
 source "http:///www.apache.org/karaf/2.2.4/apache-karaf-2.2.4.tar.gz"
 mode "0644"
 checksum "a09f85142e9bb8290cdf332af8201b31ba6d993a"
end
.. und auspacken


bash "install_karaf" do
 user "vagrant"
 cwd "/home/vagrant"
 code <<-EOH
 tar -zxf /tmp/#{KARAF}.tar.gz
 EOH
end
Entwicklungssysteme einfach mit
    Vagrant provisionieren


  Virtualbox    Vagrant         laufender
                                   Karaf
  • Basis ISO   • Chef Rezept
                                  Server
genauer
Vagrant::Config.run do |config|
 config.vm.box = "base"

 config.vm.forward_port("karaf_remote_console", 8101, 48101)
 config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "cookbooks"
  chef.add_recipe "apt"
  chef.add_recipe "java"
  chef.add_recipe "karaf"
  chef.json.merge!({
               :java => {
                  :install_flavor => "sun"
               },
               :karaf => {
                  :db_host => host_ip(),
                  :db_user => "camel",
                  :db_password => "demo"                def host_ip()
               }                                        VirtualBox::Global.global.host.network_interfaces.each do |ifce|
                                                          if ifce.interface_type == :host_only
            })
                                                            return ifce.ip_address
 end                                                      end
end                                                      end
                                                              end
Start
vagrant up
Deployment
               feature.xml
                             Bundles
                             • URI-basiert mvn /
                               http




                             Konfiguration
                             • OSGi Config Manager
                             • Property Placeholder




<bundle>mvn:camel/backendService/${pom.version}</bundle>
   <config name="com.opitz_consulting.cameldemo">
     database.driverClassName = oracle.jdbc.OracleDriver
   </config>
Continuous Delivery braucht
Konfigurationsmöglichkeiten
                 • Karaf Shell
       Run       • Karaf Fabric




      Deploy             • Karaf Features Datei




     Provision                    • Chef Rezepte
Reproduzierbarkeit ist machbar

                                      Binaries nur
               Alles einchecken
                                     einmal bauen




                                                       Exakt gleicher
      Alles                                             Deployment
  automatisieren                                     Mechanismus in
                                                     jeder Umgebung
                             Reprodu
                            zierbarkeit
Nennen wir es Lean
Schnell liefern

Qualität gewährleisten

Optimierung (Deming Cycle)

Waste eliminieren

Decide Late

Empower the team

                  spezifizieren   umsetzen     testen    testen

                                        Stop the line!
Vielen Dank! Fragen?




                  https://github.com/sistar/camel-examples




      @sistar      ralf.sigmund
ralf.sigmund@opitz-consulting.com          christoph.ortmann@opitz-consulting.com

Weitere ähnliche Inhalte

Was ist angesagt?

Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Apigunnarmorling
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudAOE
 
Auszug Seminarmaterial "EJB 3.x"
Auszug Seminarmaterial "EJB 3.x"Auszug Seminarmaterial "EJB 3.x"
Auszug Seminarmaterial "EJB 3.x"schellsoft
 

Was ist angesagt? (8)

Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
Objektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation ApiObjektvalidierung mit dem Bean Validation Api
Objektvalidierung mit dem Bean Validation Api
 
Ard Gate - German
Ard Gate - GermanArd Gate - German
Ard Gate - German
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
JavaFX Real-World Apps
JavaFX Real-World AppsJavaFX Real-World Apps
JavaFX Real-World Apps
 
Auszug Seminarmaterial "EJB 3.x"
Auszug Seminarmaterial "EJB 3.x"Auszug Seminarmaterial "EJB 3.x"
Auszug Seminarmaterial "EJB 3.x"
 

Andere mochten auch

Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?
Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?
Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?Daniel Pokusa
 
Smx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakSmx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakMaciek Próchniak
 
IDE to za mało! Jak stworzyć efektywne środowisko pracy?
IDE to za mało! Jak stworzyć efektywne środowisko pracy?IDE to za mało! Jak stworzyć efektywne środowisko pracy?
IDE to za mało! Jak stworzyć efektywne środowisko pracy?Daniel Pokusa
 

Andere mochten auch (6)

Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?
Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?
Jak wdrożyć Continuous Delivery do Twojego (starego) projektu?
 
Smx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakSmx + Camel - Maciek Próchniak
Smx + Camel - Maciek Próchniak
 
apache camel
apache camelapache camel
apache camel
 
Jee conf 2015
Jee conf 2015Jee conf 2015
Jee conf 2015
 
Wzory
WzoryWzory
Wzory
 
IDE to za mało! Jak stworzyć efektywne środowisko pracy?
IDE to za mało! Jak stworzyć efektywne środowisko pracy?IDE to za mało! Jak stworzyć efektywne środowisko pracy?
IDE to za mało! Jak stworzyć efektywne środowisko pracy?
 

Ähnlich wie Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10

Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudMarc Müller
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsDWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsMarc Müller
 
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsBASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsMarc Müller
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemachtNico Orschel
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 

Ähnlich wie Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10 (20)

Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der Cloud
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsDWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
 
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsBASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Arquillian
ArquillianArquillian
Arquillian
 
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht
95 Prozent brauchen es, 5 Prozent machen es: Load Testing mit VS leicht gemacht
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10

  • 1. Ralf Sigmund / Christoph Ortmann OPITZ CONSULTING GmbH Integrationsprojekte auf dem Weg zur Continuous Delivery
  • 2. Agenda Build Tests Deployment Rahmen Erfolg Konfiguration
  • 5. Erfolgsrezept & KANBAN PL / SQL Kurze Time to Market
  • 7. B2B Books on Demand Digitalisierungs-Anbieter Order digitale externe Dienste Publikationsplattform Order Ready Notification Delivery
  • 8. ?
  • 9.
  • 10. Forts. ORACLE Internet
  • 11. Zielarchitektur EIPs mit Camel http://www.enterpriseintegrationpatterns.com/
  • 13. Start
  • 15. Die Antwort verarbeiten Statusinformationen über den Erhalt des Auftrags . Sowohl der Returncode als auch die vollständige Antwort werden mithilfe des O/R Mappers in der Datenbank gespeichert.
  • 16. Fertig zum liefern HTTP Service Eine zweite Route bildet die Auftragsbestätigung durch das System des Dienstleisters ab. Er sendet diese an BoD, sobald die Bearbeitung des Auftrages abgeschlossen ist.
  • 17. Camel und PL/SQL passen prima zusammen PL/SQL Camel Fachlogik Integration
  • 18. Monitoring und Verfügbarkeit • Datenbank als zentraler Monitoringpunkt
  • 19. Selbsttest 2 Test-Nachrichten Um die Verfügbarkeit des Integrationsservers zu kontrollieren, werden die Camel-Routen in äquidistanten Zeitabständen durch spezielle Testaufträge angestoßen.
  • 21. Agenda Build Tests Deployment Rahmen Erfolg Konfiguration
  • 22. Welche Tests benötigen wir? Geschäftsanforderungen Autom. manuell Functional Examples Exploratory Story Tests Supporting the Team Critique Product Simulations Q2 Q3 Q1 Q4 Performance & Load Unit Tests Testing Component Tests Security Testing „ility“ Testing NFRs Tools/ Autom. Autom. Technologie
  • 23. Unit Tests vermeiden Fehler •Testgetrieben vorgehen Qualität •Lean Prinzipien •Camel Test Support
  • 24. Camel unterstützt Unit Tests durch Mock Endpunkte statusOK.expectedMessageCount(1); statusOK.expectedMessagesMatches(new ResultMessagePredicate("ok")); << PRODUCE >> assertMockEndpointsSatisfied(); ↘Müssen explizit in Routendefinition angelegt werden => Testcode in Produktionscode
  • 25. Camel bietet Mocks als Stellvertreter partnerA.whenAnyExchangeReceived(new MockStatusProcessor("ok")); • Verhalten eines Mocks kann durch Hinzufügen eines Processors gesteuert werden • Rückgabe von Antwortnachrichten • Exceptions für Test des Fehlerhandling
  • 26. Interceptoren können im Test bestehende Routen ändern A B C X C interceptSendToEndpoint("direct:partnerA") .skipSendToOriginalEndpoint().to("mock:partnerA") .to("direct:wsResponse"); context.getRouteDefinition("resultDecision"). adviceWith(context, createRouteBuilderResultDecision());
  • 27. Continuous Integration • Ganz normal mit Jenkins / Hudson
  • 28. Functional Tests •Für die Auftraggeber Akzeptanz verständliche Tests •Build the right thing
  • 29. Features beschreiben ausübbare Anforderungen Feature: Place order As a Digital Publisher In order to be able to offer a book on my Publishing Plattform I want to order the scanning of the book by a Digitizing Provider Scenario: place an order Given I am a valid API user And I use the payloadID "1079645778@yourdomain.com" And I send and accept XML And I give the order an orderID "XYZ-001" And I add an item with lineNumeber "1" and quantity "1" to the order And I set the Supplier EAN "1234567890123" for line item "1" When I send a POST request to "/orders" with the following: Then the response should be "200" And the XML response should be a cXML with payloadID "1079645778@yourdomain.com" and status code "200"
  • 30. Feature-Tests werden ausführbar durch Step Definitions When I send a DELETE request to /incidents/task/5 steps.rb: When /^I send a DELETE request to "([^"]*)"$/ do |path| delete path end
  • 31. Agenda Provisionierung Tests Deployment Rahmen Erfolg Konfiguration
  • 32. Fehlerquellen gibt es auch nach den Tests DB-URL Queue-Name Konfig- Service URL uration Code Umgebung Karaf-Version JDK-Version,. Fehler
  • 33. Eine Deployment Pipeline Commit Akzeptanz- Lasttests Release stage tests Commits
  • 34. Umsetzung der Deployment Pipeline Alles unter Alles Versionskontrolle automatisieren Provisionierung Konfiguration Provisionierung Konfiguration Infrastructure as Code
  • 35. Mit Chef einen Karaf Server provisionieren Kochbuch für Linux apt tool ..für Java Infrastructure as Code (in GIT oder SVN)
  • 36. Ein Rezept für Karaf Dateien zur Basiskonfiguration Das Rezept
  • 37. Mit Chef das Karaf Archiv herunterladen remote_file "/tmp/k.tar.gz" do action :create_if_missing source "http:///www.apache.org/karaf/2.2.4/apache-karaf-2.2.4.tar.gz" mode "0644" checksum "a09f85142e9bb8290cdf332af8201b31ba6d993a" end
  • 38. .. und auspacken bash "install_karaf" do user "vagrant" cwd "/home/vagrant" code <<-EOH tar -zxf /tmp/#{KARAF}.tar.gz EOH end
  • 39. Entwicklungssysteme einfach mit Vagrant provisionieren Virtualbox Vagrant laufender Karaf • Basis ISO • Chef Rezept Server
  • 40. genauer Vagrant::Config.run do |config| config.vm.box = "base" config.vm.forward_port("karaf_remote_console", 8101, 48101) config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "apt" chef.add_recipe "java" chef.add_recipe "karaf" chef.json.merge!({ :java => { :install_flavor => "sun" }, :karaf => { :db_host => host_ip(), :db_user => "camel", :db_password => "demo" def host_ip() } VirtualBox::Global.global.host.network_interfaces.each do |ifce| if ifce.interface_type == :host_only }) return ifce.ip_address end end end end end
  • 42. Deployment feature.xml Bundles • URI-basiert mvn / http Konfiguration • OSGi Config Manager • Property Placeholder <bundle>mvn:camel/backendService/${pom.version}</bundle> <config name="com.opitz_consulting.cameldemo"> database.driverClassName = oracle.jdbc.OracleDriver </config>
  • 43. Continuous Delivery braucht Konfigurationsmöglichkeiten • Karaf Shell Run • Karaf Fabric Deploy • Karaf Features Datei Provision • Chef Rezepte
  • 44. Reproduzierbarkeit ist machbar Binaries nur Alles einchecken einmal bauen Exakt gleicher Alles Deployment automatisieren Mechanismus in jeder Umgebung Reprodu zierbarkeit
  • 45. Nennen wir es Lean Schnell liefern Qualität gewährleisten Optimierung (Deming Cycle) Waste eliminieren Decide Late Empower the team spezifizieren umsetzen testen testen Stop the line!
  • 46. Vielen Dank! Fragen? https://github.com/sistar/camel-examples @sistar ralf.sigmund ralf.sigmund@opitz-consulting.com christoph.ortmann@opitz-consulting.com