PRAXISBERICHT: DIGITALE TRANSFORMATION MIT JBOSS FUSE & 3SCALE DIETER WIJNGAARDS CTO | ADESSO SCHWEIZ AG DOMINIK WOTRUBA ASSOCIATE MANAGER SOLUTION ARCHITECTURE | RED HAT SEPTEMBER 13, 2016 | KONGRESSHAUS ZURICH DIE REFERENTEN… Dominik Wotruba Dieter Wijngaards Red Hat adesso Schweiz AG ASSOCIATE MANAGER SOLUTION ARCHITECTURE CTO “DIGITAL TRANSFORMATION” SOUNDS GREAT, BUT... TODAY'S I.T. REALITY: SILOS OF INFORMATION TWO MAJOR INTEGRATION TYPES TWO MAJOR INTEGRATION TYPES INTEGRATION ARCHITECTURE REQUIREMENTS ENTERPRISE APPLICATION INTEGRATION MIT JBOSS FUSE UND APACHE CAMEL ENTERPRISE INTEGRATION PATTERNS EINIGE ENTERPRISE INTEGRATION PATTERNS… Messaging Endpoints Message Construction Message Routing System Management Message Transformation Messaging Channels Ein Beispiel… WIE KANN ICH HOSTDATEIEN VERARBEITEN? GRAFISCH DARGESTELLT… EDI MIT ENTERPRISE INTEGRATION PATTERNS… MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Filesystem überwachen (Events) ▶FTP und/oder FILE Herausforderungen ▶Wann können Dateien verarbeitet werden? ▶Wie können Dateien gefiltert werden? ▶Reihenfolge? ▶Was passiert mit Dateien, die gelesen wurden? Mögliche Implementierungen ▶Java 7 NIO MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Splitten (Parsen) von „Fixed Length“-Dateien Herausforderungen ▶Wie wird das Format erkannt? ▶Wie werden die nächsten Schritte parallelisiert? ▶Streaming? ▶Encoding? Mögliche Implementierungen ▶Java Tokenizer ▶Java 8 Stream API MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Umwandeln von Fixed-Length-Daten nach Java Beans Herausforderungen ▶Wie wird das Format der Daten erkannt? ▶Was passiert mit Fehlern? ▶Abhängigkeiten? ▶Encoding? Mögliche Implementierungen ▶BeanIO ▶Smooks ▶Flatpack ▶... MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Herausfiltern von nicht benötigten Objekten Herausforderungen ▶Wie werden die Objekte erkannt? ▶Konfigurierbarkeit? Mögliche Implementierungen ▶Java 8 Stream API MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Routing von Objekten zur weiteren parallelen Verarbeitung Herausforderungen ▶Wie kann die Verarbeitung parallelisiert werden? ▶Wie wird das Routing konfiguriert? ▶Wie kann MOM integriert werden? Mögliche Implementierungen ▶Java 8 Stream API ▶Eigene Queues auf Java-Basis ▶JMS: ActiveMQ, RabbitMQ, HornetQ, QPid, OpenJMS MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Die Verarbeitung (das Schreiben von Daten in die Datenbank) auf „Workers“ verteilen (Multithreading) Herausforderungen ▶Wie werden die einzelnen Threads verwaltet? ▶Wie skalieren die Ressourcen? Mögliche Implementierungen ▶Java 8 Stream API: Parallel Streams -> Stabilität? ▶Java Concurrency (Threads und Executors) MIT ENTERPRISE INTEGRATION PATTERNS… Aufgabe ▶Das Schreiben von den Daten in die Datenbank Herausforderungen ▶Wie werden XA-Transaktionen implementiert? ▶Was passiert bei Fehlern? Rollbacks? Mögliche Implementierung ▶Spring mit JPA ▶JEE-Umgebung mit JPA MIT ENTERPRISE INTEGRATION PATTERNS… MIT ENTERPRISE INTEGRATION PATTERNS… MIT ENTERPRISE INTEGRATION PATTERNS… Weitere Herausforderungen ▶Wie können Fehler behandelt werden? ▶Wie kann das System überwacht werden? ▶Wie können wir Loggen? Throughput-Logging? ▶Können wir das Lifecycle-Management beeinflussen (geordnetes Shutdown)? ▶Ist das Debuggen auf Integrationsebene möglich? ▶Können wir einfach Unit- und Integrationstests definieren? Mögliche Implementierung ▶Eigenimplementierung auf der Basis von Standard JAVA-Funktionalität und Bibliotheken, z.B. JMX, JUnit WAS SCHÖN WÄRE… EIP ALS PSEUDOCODE from(file) .split(„/n“) .unmarshall(beanIO) .filter(recordType==BDN || recordType==NDA) .choice() .when(recordType==BDN).to(queue1) .otherwise().to(queue2) from(queue1) .transactional() .to(jpa:save) from(queue2) .transactional() .to(jpa:save) Ein mächtiges Integrations-Framework, basierend auf Enterprise Integration Patterns APACHE CAMEL – ARCHITEKTUR-ÜBERBLICK Camel Context ist die Runtime Registry und enthält alle Endpoints, Routen, Processors. Definiert einen Lifecycle. Processors implementieren die 50+ Enterprise Integration Patterns und die Datentransformationen. XML DSL (Spring, Blueprint) <route> <from uri="timer:test"> <to uri="log:test"> </route> Java DSL from("timer:test") .to("log:test"); Scala DSL "timer:test" -> "log:test" "timer:test" to "log:test" Groovy DSL Annotation DSL Endpoints werden über URI definiert und über URIParameter konfiguriert. log:example?level=DEBUG Quelle: Camel in Action APACHE CAMEL - ENDPOINTS ►Der Endpunkt eines Nachrichten-Kanals > Versenden (produce) oder Empfangen (consume) von Nachrichten ►Durch sogenannte Components bereitgestellt > Camel Core Components, z.B. direct:, seda:, vm:, timer:, log: > Optionale Components, z.B. camel-gae → ghttp:, gtask:, gmail: ►Definition über URIs, Konfiguration über URI-Parameter > Scheme identifiziert die Component > Context path definiert die komponenten-spezifische «Resource» > Options zur weiteren Konfiguration Quelle: Camel in Action APACHE CAMEL - COMPONENTS APACHE CAMEL - MESSAGE ROUTER ►Problem: > Wie können die verschiedenen Prozessschritte entkoppelt werden, so dass Messages abhängig von Konditionen an weitere Prozesschritte (Filters) weitergegeben werden können? – Pipes und Filters routen alle Messages an die gleichen Prozessschritte weiter. ►Lösung: > Filter werden mit Prädikaten versehen, um die richtige Ziele zu selektieren ►In Camel: > choice-Nodes outQueue 1 inQueue outQueue 2 CAMEL - MESSAGE ROUTER MIT EXPRESSIONS outQueue 1 inQueue outQueue 2 APACHE CAMEL - MESSAGE ROUTER MIT XPATH outQueue 1 inQueue outQueue 2 INTEGRATION MIT JBOSS FUSE – EIN BEISPIEL Integration Layer Service Layer Persistence Layer FILE Service Module bzw.Bundles crm-camel Import von xml & txt REST Service crm-rs crm-service SOAP Service crm-ws JBoss Fuse Runtime Environment crmpersistence jdbc crm JBOSS FUSE – FABRIC PROVISIONING MIT PROFILES Integration Layer profile Service Layer Persistence Layer adesso-crm-import FILE Service crm-camel Import von xml & txt profile profile adesso-crm-rest adesso-crm-service REST Service crm-rs profile crm-service crmpersistence Beschreibung aus weiteren Profiles, Features, Module, Konfigurationen und Ressourcen adesso-crm-soap SOAP Service crm-ws JBoss Fuse Runtime Environment jdbc crm JBOSS FUSE – FABRIC PROVISIONIERUNG rest soap Port 9000 Port 9000 Automatic service discovery & load balancing Fabric Managed Container gateway gateway-http file rest soap Port 8181 Port 8181 rest soap Port 8182 Port 8182 rest soap Port 8183 Port 8183 rest soap Port 8184 Port 8184 Fabric Managed Container Fabric Managed Container Fabric Managed Container Fabric Managed Container Fabric Managed Container crm-import-node crm-import-node1 crm-import-node2 crm-import-node3 crm-import-node4 adesso-crm-import adesso-crm-rest adesso-crm-rest adesso-crm-rest adesso-crm-rest adesso-crm-soap adesso-crm-soap adesso-crm-soap adesso-crm-soap API-MANAGEMENT MIT 3SCALE DIE HERAUSFORDERUNG… Wie kann ich meine Services extern und intern (vielleicht auch kostenpflichtig) zur Verfügung stellen? API Management mit 3Scale 3scale The Plug & Play SaaS API Management Platform and Infrastructure 3scale stellt eine komplette Out-of-the-Box SaaS API-Management-Lösung bereit und ermöglicht API Providers ihre APIs kontrolliert an Kunden zur Verfügung zu stellen Die 5 Key-Module der 3scale's API-Management-Lösung: Access Control & Security – Key-Generierung und Authentifizierung Analytics & Reporting – für den API-Provider und die API-Consumers Developer/Partner Portal – Mit dem frei konfigurierbaren 3scale CMS API Business Engine – Erstellen von Service-Kontrakten zur Einschränkung der Funktionalität auf Methodenebene inklusive Pricing und Limitierungen der Schnittstellenverwendung Billing & Payments – Erstellen von Rechnungen auf der Basis von Businessregeln DAS ENTWICKLERPORTAL DIE API DOKUMENTATION FÜR ENTWICKLER DAS ADMINISTRATIONSPORTAL – APPLICATIONS ARCHITEKTUR MIT 3SCALE – NGINX SELF-MANAGED REMOTE APPs rest ON PREMISE LOCAL APPs rest https über 3scale Konfiguration (manuell) rest Port 9000 3scale Gateway Integration APIcast (NGINX) NGINX self-managed Amazon API Gateway Heroku Amazon Machine Image Red Hat OpenShift Plugin Integration API Integration Fabric Managed Container gateway gateway-http JBoss Fuse Fabric Managed Application Cluster ARCHITEKTUR MIT 3SCALE – CLOUD GATEWAY REMOTE APPs rest https über 3scale Konfiguration rest 3scale Gateway Integration APIcast (NGINX) NGINX self-managed Amazon API Gateway Heroku Amazon Machine Image Red Hat OpenShift Plugin Integration API Integration Fabric Managed Container gateway gateway-http JBoss Fuse Fabric Managed Application Cluster ON PREMISE ARCHITEKTUR MIT 3SCALE – API INTEGRATION REMOTE APPs rest ON PREMISE Fabric Managed Container gateway LOCAL APPs rest threescale-gateway JBoss Fuse Fabric Managed Application Cluster 3scale Gateway Integration APIcast (NGINX) NGINX self-managed Amazon API Gateway Heroku Amazon Machine Image Red Hat OpenShift Plugin Integration API Integration Rest (https) über 3Scale API 3SCALE API DEMO