Hysterisch gewachsen, trotzdem orchestriert - connected by Camunda - DOAG
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Hysterisch gewachsen, trotzdem orchestriert – connected by Camunda Benjamin Klatt und Mathias Schulte, viadee Geschäftsprozesse sind die Algorithmen von Unternehmen. Ihre Automatisierung bedeutet in der Regel jedoch eine gute Portion Integrationsherausforderungen. Besonders anspruchsvoll sind hier Anwendungs- landschaften mit Legacy-Systemen, die keine idealtypischen, externen Schnittstellen wie beispielsweise REST-Microservices bereitstellen. Camunda als leichtgewichtige Open Source Workflow Engine verspricht hier hohe Flexibilität. In diesem Artikel stellen die Autoren die verschiedenen technischen Möglichkeiten vor. Zudem teilen sie ihre Erfahrungen, bei welchen Architekturanforderungen sich welcher Integrationsansatz besonders empfiehlt. 44 iii iii iii www.ijug.eu iii
Abbildung 1: Prozessautomatisierung mit Integrationspunkten (© Benjamin Klatt) V iele Unternehmen arbeiten daran, ihre bestehenden Geschäfts- prozesse zu automatisieren, um den Anteil sogenannter „Dun- kelverarbeitung“ zu erhöhen. Ist der gewünschte Geschäftsprozess direkt von der Prozessanwendung ansprechen kann und möchte, so spricht man von einer nativen Integration. Ein Wrapper bedeutet hingegen, dass man ein Stück Software zwischen Prozessanwen- entworfen, so warten oft unterschätzte Herausforderungen bei der dung und System platziert, um sie miteinander zu integrieren. Integration bestehender Legacy-Systeme, wie in Abbildung 1 ge- kennzeichnet. Nur selten stehen hier wohldefinierte Schnittstellen remote - embedded wie moderne REST-Services bereit, sondern es gilt, diverse Remote- Bei einer Remote-Integration wird ein eigenständig laufendes Sys- Schnittstellen von gewachsenen SOAP-Webservices bis HOST-Stre- tem angebunden, während bei einer embedded Variante das Sys- cken anzubinden und teilweise sogar Programmbibliotheken zu inte- tem, beispielsweise in Form einer Programmbibliothek, direkt mit grieren. Camunda bietet hierfür eine Bandbreite von Techniken, die die der Prozessanwendung verpackt wird. Autoren nachfolgend vorstellen und Tipps bei der Auswahl geben. Die vorgestellten Dimensionen können unabhängig voneinander Architektur-Dimensionen betrachtet werden. Die identifizierten Ausprägungen helfen, die Bevor die Autoren genauer auf die Camunda-Integrationstechniken Liste der potenziellen Camunda-Integrationsmöglichkeiten ein- schauen, werfen sie einen Blick auf Architektur-Dimensionen, die zuschränken, da nicht jede Ausprägung von allen Alternativen hilfreich bei der Wahl der richtigen Alternative sind. Als Vorbereitung unterstützt wird. Zunächst stellen die Autoren aber die Möglich- der Integration empfiehlt es sich, sich für jedes zu integrierende keiten vor. System bewusst zu machen, welche Ausprägungen der folgenden Dimensionen gefordert sind: Integrationsmöglichkeiten Camunda bietet vier grundlegende technische Möglichkeiten, die synchron – asynchron man für eine Systemintegration nutzen kann. Es können auch meh- Während bei synchroner Integration die Prozessanwendung auf rere Möglichkeiten gleichzeitig für verschiedene Integrationen in ei- eine Rückantwort des integrierten Systems wartet, kann bei einer ner Prozessanwendung genutzt werden. Die Autoren haben mit der asynchronen Integration die Arbeit der Prozessanwendung prinzipi- Robot-Process-Automation(RPA)-Möglichkeit eine fünfte Variante ell fortgeführt werden. Letzteres ist auch der Fall, wenn die Prozess- hinzugefügt, die zwar auf die ersten vier Alternativen aufbaut, die anwendung erst mal nur bis zu einem vorgesehenen Wartezustand sie aber aufgrund ihrer Aktualität mit einordnen möchten: weiterläuft. • Camunda Connector push – pull • Plain Old Java Delegate Während bei einem Push die Prozessanwendung die führende Kom- • Send and Receive Pattern ponente ist und das integrierte System aufruft, so ist es bei einer • External Tasks Pull-Ausprägung das integrierte System, das einen Aufruf an die • BPM-RPA-Kombination Prozessanwendung schickt. Im Folgenden skizzieren wird kurz die verschiedenen Varianten. nativ – wrapper Detaillierte Implementierungsanleitungen sind auf den Camunda- Stellt das zu integrierende System eine Schnittstelle bereit, die man Seiten zu finden. Java aktuell 02/20 45
lichkeit besteht, eigene Connectoren zu entwickeln, bieten sich org.camunda.bpm hier meist eigene Java Delegates an, die im nächsten Abschnitt camunda-engine-plugin-connect näher beschrieben werden. org.camunda.connect camunda-connect-connectors-all Plain Old Java Delegate Die rudimentärste und gleichzeitig flexibelste Möglichkeit, externe Systeme in einer Camunda-Prozessanwendung zu integrieren, ist die Listing 1: Maven Dependency für Camunda Standard-Connectoren Implementierung eines klassischen Delegates mit “Plain Old Java”. Dazu erstellt man einen Service Task im Modell und konfiguriert ihn als Delegate-Implementierung samt gewünschter Delegate ID (siehe Camunda Connector Abbildung 3). Anschließend annotiert man die eigene JavaDelegate- Camunda Connectoren bieten eine Infrastruktur, über die Inte- Implementierung mit der gleichen, eindeutigen ID als Komponente grationen direkt mit dem Camunda Modeler im Prozessmodell wie in Listing 2 gezeigt. Die eigentliche Integration kann dann in der konfiguriert und mit ihm zusammen auch versioniert werden execute-Methode nach dem IPO-Pattern (Input-Process-Output) können [2]. Hierfür können Standard Connectoren, wie für REST mit der vollen Java-Mächtigkeit gestaltet werden. Auch wenn die volle oder SOAP einfach als Maven-Abhängigkeit eingebunden werden Java-Mächtigkeit bereitsteht, gibt es gleichzeitig aber keine Camun- (siehe Listing 1). Anschließend wird ein Service Task angelegt, in da-seitige Unterstützung, die einem Integrationsherausforderungen dessen Konfiguration der gewünschte Connector samt Aufruf wie eingeschränkte Verfügbarkeit oder Failovers abnimmt. und Script-basierter Datenverarbeitung hinterlegt wird (siehe Ab- bildung 2). Die Projekterfahrung zeigt, dass die Connectoren nur für sehr einfache Use Cases und Integrationstests geeignet sind. Insbesondere die Handhabung von Daten ist in Programmcode mit entsprechender Programmierumgebung deutlich besser zu handhaben. In den Camunda Best Practices selbst wird zur In- tegration mit einem Java-Client im Vergleich zu den Camunda REST- und SOAP-Connectoren geraten [3]. Auch wenn die Mög- Abbildung 2: Konfigurationsbeispiel Camunda http-Connector (© Abbildung 3: Delegate Konfiguration im Model, id=my-delegate (© Benjamin Klatt) Benjamin Klatt) 46 iii iii iii www.ijug.eu iii
@Component("my-delegate") public class CalculatorDelegate implements JavaDelegate { public void execute(DelegateExecution execution) throws Exception{ // Read from context LongValue num1 = execution.getVariableTyped("num1"); // Write to context execution.setVariable("result", 1+2); } } Listing 2: Beispiel-Implementierung eines Delegate Send & Receive die Jobs, bis sie wieder abgeholt werden. Ein weiterer großer Vorteil Der Send-and-Receive-Ansatz erlaubt, eine fachliche Asynchroni- ist, dass Jobs, die nicht erfolgreich abgearbeitet werden konnten, tät im Modell explizit zu modellieren. Zunächst wird im Send Task, wahlweise einen Incident auslösen oder einfach für einen erneuten zum Beispiel mit einem JavaDelegate, ein externes System aufge- Bearbeitungsversuch zurückgegeben werden können. Viele weitere rufen und eine eindeutige Correlation ID übergeben. Danach wartet Features wie Topics und Priorisierung helfen, den Umgang mit Ex- der Prozess im folgenden Catch-Event auf eine Eingangsnachricht ternal Tasks zu vereinfachen [4]. Abbildung 5 zeigt die Konfiguration vom passenden Message-Typ und mit der zuvor übergebenen Cor- eines External Tasks im Modell sowie Beispielaufrufe über die REST relation-ID zur aktuellen Prozessausführung. Die Eingangsnachricht API. Die Implementierung der Worker kann frei mit jeder beliebigen kann von dem integrierten System direkt an die Camunda REST API Technologie gestaltet werden. Wir nutzen oft auch eine Kombinati- geschickt werden. Wichtig hierbei ist nur, dass die übergebenen Da- on mit Apache Camel als Integration Layer und/oder Spring wahl- ten für Message Name und Correlation-ID passen (siehe Abbildung weise über die Camunda REST- oder Java-API. 4). Camunda übernimmt dann automatisch die Zuordnung von ein- gehender Nachricht und wartender Prozessinstanz. BPM-RPA-Kombination Als Letztes möchten die Autoren auf eine Möglichkeit eingehen, die External Tasks es erlaubt, Systeme zu integrieren, die nur über eine grafische Be- External Tasks sind eine explizite, asynchrone Integrationsmöglich- nutzeroberfläche verfügen. Robotic Process Automation (RPA) ist keit von Camunda. Besonderheit der Technik ist, dass die Implemen- eine Technik, bei der eine Software die Benutzeroberfläche wie ein tierung eines Service Tasks nicht in der Prozessanwendung selbst menschlicher Benutzer verwendet, indem Felder gefüllt oder But- liegt, sondern von einem externen Programm, einem sogenann- tons geklickt werden. Schon vor vielen Jahren waren Automatisie- ten Worker, übernommen wird. Erreicht eine Prozessausführung rungen, beispielsweise mit Windows-Makros, möglich. Heutzutage einen solchen Service Task, dann steht seine Bearbeitung als Job gibt es jedoch deutlich reifere Werkzeuge, die die entwickelten Ro- über die Camunda API bereit und kann von einem Worker abgeholt boter-Automatisierungen direkt über eine Programmierschnittstel- werden. Das Ergebnis sendet ein Worker ebenfalls über die API an le zugänglich machen. Hat man eine gewünschte Interaktion mit ei- die Prozessanwendung zurück. Vorteil dieser Technik ist, dass sie nem zu integrierenden System mittels RPA erstellt, dann kann diese eine asynchrone Verarbeitung mit einer sehr guten Skalierbarkeit über die Programmierschnittstelle von der Prozessanwendung ermöglicht, denn dank eines Fetch-and-Lock-Mechanismus kön- aus angesprochen werden. Letzteres kann wiederum über eine nen beliebig viele Worker parallel Jobs abarbeiten. Sind die Worker der zuvor vorgestellten Möglichkeiten realisiert werden. Die Auto- selbst einmal nicht verfügbar, dann puffert Camunda automatisch ren selbst greifen für RPA-Anforderungen unter anderem auch auf Abbildung 4: Send & Receive Zusammenspiel von Modell und Rückantwort (© Benjamin Klatt) Java aktuell 02/20 47
Abbildung 5: External Tasks Konfiguration und REST API Basisaufrufe (© Benjamin Klatt) ein viadee RPA-Werkzeug zurück [5]. Darüber hinaus gibt es aber Eignung für die Legacy Integration auch noch viele andere Werkzeuge am Markt. Generell sollte man Wie gezeigt ist eine Integration von Legacy-Systemen mit allen sich jedoch bewusst sein, dass eine RPA-Lösung zwar kurzfristig die Camunda-Techniken prinzipiell möglich. Es kommt jedoch auf die Erstellung einer technischen Schnittstelle zu dem entsprechenden jeweiligen konkreten, architekturellen Anforderungen an. In der Legacy-System ersparen kann, mittel- und langfristig warten aber Übersicht in Abbildung 7 haben die Autoren noch mal einige Vor- und potenziell sehr hohe Wartungsaufwände. Nachteile der verschiedenen Techniken gegenübergestellt. Auswahl und Architektur-Dimensionen So bietet ein Camunda Connector zwar ein schnelles Setup und Gilt es nun, die passende Integrationstechnik zu wählen, können die eine Versionierung mit dem Modell, seine eingeschränkte Test- anfänglich vorgestellten Architektur-Dimensionen weiterhelfen. Ab- barkeit, beispielsweise in Unit-Tests, und seine limitierte Unter- bildung 6 zeigt eine Übersicht, in der die Autoren die verschiedenen stütztung komplexerer Integrationen erschweren jedoch einen Techniken den jeweiligen Architekturanforderungen gegenüberstel- produktiven Einsatz. JavaDelegates dagegen erlauben maximale len und ihre Unterstützung mit einem grünen Haken kennzeichnen. Flexibilität durch die volle Java-Mächtigkeit, man bekommt je- So fallen Camunda Connector und Plain Old JavaDelegate (POJD) doch keinerlei Integrationsunterstützung geboten. Der Send- raus, wenn eine asynchrone Verarbeitung von der Integration gefor- and-Receive-Ansatz bietet eine explizite fachliche Darstellung dert ist. Auf der anderen Seite ist ein Push bei External Tasks vom der Asynchronität im Modell, kommt aber mit einer starken Ab- Mechanismus selbst erst mal nicht vorgesehen. Hierfür gibt es zwar hängigkeit von der Stabilität des Transportmediums und mit einer Optimierungsstrategien, sie würden aber den Umfang dieses Artikel eingeschränkten Fehlerdarstellung bei Verarbeitungsproblemen. überschreiten. Letztendlich bieten die External Tasks sehr gute Möglichkeiten für Abbildung 6: Gegenüberstellung der Techniken zu Architektur-Anforderungen (© Benjamin Klatt) 48 iii iii iii www.ijug.eu iii
Abbildung 7: Vor- und Nachteile der Integrationstechniken (© Benjamin Klatt) robuste und gut skalierende Anwendungen und sind empfehlens- wert für technische Ansynchronität. Größte Herausforderung der External Tasks ist sicherlich die Implementierung der Worker zur Job-Verarbeitung. RPA als Sonderfall hat das Alleinstellungsmerkmal, auch Systeme integrieren zu können, wenn außer einer Benutzeroberfläche keine weitere Schnittstelle existiert. Nicht zu vergessen sind hier aber die aufwendige Wartung und die technischen Schulden, die man sich Dr. Benjamin Klatt hier einkauft. viadee Unternehmensberatung AG benjamin.klatt@viadee.de Fazit und Good Practices Als generelles Fazit lässt sich festhalten, dass die Camunda Work- Dr. Benjamin Klatt ist Integrationsarchitekt und Agiler Coach flow Engine ihr Flexibilitätsversprechen in Bezug auf Systeminte- bei der viadee AG. Als Integrationsarchitekt beschäftigt er sich vorrangig mit der Digitalisierung von Geschäftsprozessen und grationen einhält. Die vorhandenen technischen Möglichkeiten er- Produkten. lauben es, geeignete Lösungen für jedes anzubindende System zu entwickeln. Nicht zu vergessen ist jedoch, dass bei der Integration von Legacy-Systemen viele Herausforderungen unabhängig von Camunda sind. Als Beispiel seien hier instabile oder fachlich ungüns- tig geschnittene Schnittstellen genannt. Zum Abschluss noch drei Good Practices für das eigene Projekt: • Nachhaltigkeit bei der Architekturentscheidung beachten • Zu hohe Heterogenität bei der Implementierung vermeiden • Leichtgewichtige Integration Layer, beispielsweise mit Apache Camel, in Betracht ziehen Außerdem haben die Autoren Code-Beispiele für die verschiedenen Integrationsmöglichkeiten im GitHub Repository bereitgestellt [6]. Quellen Matthias Schulte [1] https://camunda.com/de/solutions/ viadee Unternehmensberatung AG [2] https://docs.camunda.org/manual/latest/reference/connect/ Matthias.Schulte@viadee.de [3] https://camunda.com/best-practices/invoking-services-from-the- process Matthias Schulte ist Senior Berater für BPM- und Integra- tionsprojekte. Sein Schwerpunkt liegt in der Einführung von [4] https://docs.camunda.org/manual/latest/user-guide/process- Prozesssteuerungsplattformen in großen Unternehmen sowie engine/external-tasks/ dem (agilen) Projektmanagement von Digitalisierungsprojekten. [5] https://www.viadee.de/loesungen/rpa-robotic-process-automation [6] https://github.com/viadee/camunda-integration Java aktuell 02/20 49
Sie können auch lesen