Was ist Kogito
Kogito ist ein cloud-natives Toolkit zur Geschäftsautomatisierung, das Ihnen das Leben erleichtern soll. Stellen Sie es sich als das Kind von Geschäftsprozessmanagement (BPM) und Entscheidungsmanagement vor, das in der Cloud von seinem liebevollen Elternteil Quarkus aufgezogen wurde.
Aber warum sollten Sie, ein erfahrener Entwickler, Kogito eine Chance geben? Hier ist die Kurzfassung:
- Es ist von Haus aus cloud-nativ und Kubernetes-fähig
- Es harmoniert perfekt mit Quarkus und verleiht Ihnen supersonische, subatomare Java-Kräfte
- Es macht Ihre Geschäftsprozesse und Entscheidungen zu erstklassigen Bürgern in Ihrem Code
- Es ist Open Source und wird von der Apache Software Foundation unterstützt (derzeit in der Inkubation)
Einblick in das Kogito Examples Repository
Jetzt, da wir Ihr Interesse geweckt haben, lassen Sie uns einen Blick auf das apache/incubator-kie-kogito-examples Repository werfen. Diese Schatzkammer von Beispielen ist Ihr Ticket zur Kogito-Meisterschaft.
Einrichtung Ihres Kogito-Spielplatzes
Bevor wir loslegen, stellen Sie sicher, dass Sie alles haben, was Sie benötigen, um diese Beispiele auszuführen:
- Java 11+ (weil wir keine Barbaren sind)
- Maven 3.8.1+
- Docker (für den Containerisierungsdrang)
- Quarkus CLI (optional, aber sehr empfehlenswert für einen Produktivitätsschub)
Alles da? Großartig! Dann lassen Sie uns loslegen.
Quarkus: Kogitos Partner in Crime
Sie fragen sich vielleicht: "Was hat Quarkus damit zu tun?" Nun, alles. Quarkus ist das supersonische, subatomare Java-Framework, das Kogito seine cloud-nativen Superkräfte verleiht. Es ist wie Red Bull für Ihre Java-Anwendungen, aber ohne das Koffein.
Kogito nutzt Quarkus, um:
- Blitzschnelle Startzeiten zu erreichen
- Den Speicherbedarf zu reduzieren (Ihr Geldbeutel wird es Ihnen danken)
- Hot-Reload-Funktionen bereitzustellen (denn wer hat schon Zeit für Neustarts?)
- Nahtlose Integration mit cloud-nativen Technologien zu bieten
Erkundung der Kogito-Beispiele: Eine rasante Tour
Werfen wir einen Blick auf einige der spannendsten Beispiele im Repository:
1. Prozess + Regeln: Das dynamische Duo
Navigieren Sie zum Verzeichnis kogito-quarkus-examples/process-business-rules-quarkus
. Dieses Beispiel zeigt, wie Kogito Prozesse und Regeln kombiniert, um eine leistungsstarke Entscheidungsmaschine zu schaffen.
Wichtige Erkenntnisse:
- Integration von BPMN2-Prozessen mit DMN-Entscheidungstabellen
- Automatische REST-Endpunktgenerierung für Ihre Prozesse
- Nahtlose Ausführung von Regeln innerhalb von Prozesskontexten
2. Serverless Workflow: Weil Server so letztes Jahrzehnt sind
Schauen Sie sich das Beispiel serverless-workflow-examples/serverless-workflow-greeting-quarkus
an. Dieses ist für alle Serverless-Enthusiasten da draußen.
Highlights:
- YAML-definierte Workflows (denn wer liebt YAML nicht?)
- Ereignisgesteuerte Architekturen leicht gemacht
- Integrationen mit AWS Lambda und Knative
3. DMN: Entscheidungen wieder großartig machen
Gehen Sie zum Verzeichnis kogito-quarkus-examples/dmn-quarkus-example
für einen tiefen Einblick in Decision Model and Notation (DMN) mit Kogito.
Was Sie lernen werden:
- Visuelles Modellieren komplexer Entscheidungslogik
- Automatische REST-API-Generierung für Ihre Entscheidungsdienste
- Testen und Debuggen von DMN-Modellen wie ein Profi
Ihr erstes Kogito-Beispiel ausführen: Eine Schritt-für-Schritt-Anleitung
Genug Theorie, lassen Sie uns loslegen! Wir verwenden das Beispiel process-business-rules-quarkus, um Ihnen den Einstieg zu erleichtern.
Sobald es läuft, testen Sie die API:
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"person": {"name":"John Doe", "age": 25}}' http://localhost:8080/persons
Bauen und führen Sie das Beispiel aus:
./mvnw clean compile quarkus:dev
Klonen Sie das Repository:
git clone https://github.com/apache/incubator-kie-kogito-examples.git
cd incubator-kie-kogito-examples/kogito-quarkus-examples/process-business-rules-quarkus
Voilà! Sie haben gerade einen Geschäftsprozess mit eingebetteten Regeln mit Kogito ausgeführt. Spüren Sie die Kraft, die durch Ihre Adern fließt?
Implementierung von Geschäftsprozessen: BPMN und DMN, oh mein Gott!
Kogito bringt BPMN (Business Process Model and Notation) und DMN (Decision Model and Notation) ins 21. Jahrhundert. Die Zeiten klobiger, schwergewichtiger BPM-Engines sind vorbei. Mit Kogito sind Ihre Prozesse und Entscheidungen erstklassige Bürger in Ihrem Code.
BPMN: Flussdiagramme auf Steroiden
Werfen wir einen Blick auf einen einfachen BPMN-Prozess:
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" id="_6063f3a1-5ba3-4f0e-b1f2-ad49e8e6f2a7" targetNamespace="http://www.omg.org/bpmn20">
<bpmn2:process id="greeting" name="Greeting Process" isExecutable="true">
<bpmn2:startEvent id="_1" name="StartProcess">
<bpmn2:outgoing>_1-_2</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:scriptTask id="_2" name="Hello" scriptFormat="http://www.java.com/java">
<bpmn2:incoming>_1-_2</bpmn2:incoming>
<bpmn2:outgoing>_2-_3</bpmn2:outgoing>
<bpmn2:script>System.out.println("Hello World");</bpmn2:script>
</bpmn2:scriptTask>
<bpmn2:endEvent id="_3" name="EndProcess">
<bpmn2:incoming>_2-_3</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2"/>
<bpmn2:sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3"/>
</bpmn2:process>
</bpmn2:definitions>
Dieser einfache Prozess druckt nur "Hello World", aber stellen Sie sich die Möglichkeiten vor, wenn Sie mit Ihrer Geschäftslogik und externen Systemen integrieren!
DMN: Entscheidungen, Entscheidungen
Werfen wir einen Blick auf ein DMN-Modell:
<?xml version="1.0" encoding="UTF-8"?>
<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/" xmlns="https://kiegroup.org/dmn/_52CEF9FD-9943-4A89-96D5-6F66810CA4C1" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:kie="http://www.drools.org/kie/dmn/1.2" xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" id="_4F7C97F9-EA35-4CB5-8E4C-C40C91B5F729" name="Greeting" typeLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/" namespace="https://kiegroup.org/dmn/_52CEF9FD-9943-4A89-96D5-6F66810CA4C1">
<dmn:decision id="_23B84E59-33C6-4D3A-9314-CF0724714606" name="Greeting Message">
<dmn:extensionElements/>
<dmn:variable id="_078A6F79-1861-47A1-8921-C9E7F2B728D1" name="Greeting Message" typeRef="string"/>
<dmn:informationRequirement id="_2066A270-2A88-4B77-9F90-1F683FDF852C">
<dmn:requiredInput href="#_C7ED7EFC-9F7F-4FBE-81DB-57A32A56502C"/>
</dmn:informationRequirement>
<dmn:decisionTable id="_5A25D948-34E0-4527-9EE2-7A9C0DC663A5" hitPolicy="UNIQUE" preferredOrientation="Rule-as-Row">
<dmn:input id="_79ECD1F2-E11E-4F6D-9038-C47AE6EC1C9C">
<dmn:inputExpression id="_E17A0C1D-A0F0-4C5F-8A0E-8B5F9A1BAB08" typeRef="number">
<dmn:text>Age</dmn:text>
</dmn:inputExpression>
</dmn:input>
<dmn:output id="_EC6A4902-BD03-4D48-AA45-9AD2AEB83E8B"/>
<dmn:annotation name="annotation-1"/>
<dmn:rule id="_C3F28427-2608-4ACE-98EE-C5C2F0AEF7A7">
<dmn:inputEntry id="_0FBE3F3C-5F3A-4A21-A4A5-D207B2BA7808">
<dmn:text>< 18</dmn:text>
</dmn:inputEntry>
<dmn:outputEntry id="_C05BE7BB-BDA0-4C45-9ED1-4F5B17B2A3E6">
<dmn:text>"Hello young person!"</dmn:text>
</dmn:outputEntry>
<dmn:annotationEntry>
<dmn:text/>
</dmn:annotationEntry>
</dmn:rule>
<dmn:rule id="_C3B07D74-0354-4C44-9587-9B44C67F5AE0">
<dmn:inputEntry id="_8A9B0EEC-5CB9-4D31-BB56-0A723CEABFBC">
<dmn:text>>= 18</dmn:text>
</dmn:inputEntry>
<dmn:outputEntry id="_42C4EB7F-3F00-4A19-9F43-D2E246F378F9">
<dmn:text>"Hello adult!"</dmn:text>
</dmn:outputEntry>
<dmn:annotationEntry>
<dmn:text/>
</dmn:annotationEntry>
</dmn:rule>
</dmn:decisionTable>
</dmn:decision>
<dmn:inputData id="_C7ED7EFC-9F7F-4FBE-81DB-57A32A56502C" name="Age">
<dmn:extensionElements/>
<dmn:variable id="_F0B70F13-94CB-4FB9-BD89-4AB84F8BDB07" name="Age" typeRef="number"/>
</dmn:inputData>
<dmndi:DMNDI>
<dmndi:DMNDiagram>
<di:extension>
<kie:ComponentsWidthsExtension>
<kie:ComponentWidths dmnElementRef="_5A25D948-34E0-4527-9EE2-7A9C0DC663A5">
<kie:width>50</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
</kie:ComponentWidths>
</kie:ComponentsWidthsExtension>
</di:extension>
<dmndi:DMNShape id="dmnshape-_23B84E59-33C6-4D3A-9314-CF0724714606" dmnElementRef="_23B84E59-33C6-4D3A-9314-CF0724714606" isCollapsed="false">
<dmndi:DMNStyle>
<dmndi:FillColor red="255" green="255" blue="255"/>
<dmndi:StrokeColor red="0" green="0" blue="0"/>
<dmndi:FontColor red="0" green="0" blue="0"/>
</dmndi:DMNStyle>
<dc:Bounds x="364" y="227" width="100" height="50"/>
<dmndi:DMNLabel/>
</dmndi:DMNShape>
<dmndi:DMNShape id="dmnshape-_C7ED7EFC-9F7F-4FBE-81DB-57A32A56502C" dmnElementRef="_C7ED7EFC-9F7F-4FBE-81DB-57A32A56502C" isCollapsed="false">
<dmndi:DMNStyle>
<dmndi:FillColor red="255" green="255" blue="255"/>
<dmndi:StrokeColor red="0" green="0" blue="0"/>
<dmndi:FontColor red="0" green="0" blue="0"/>
</dmndi:DMNStyle>
<dc:Bounds x="365" y="94" width="100" height="50"/>
<dmndi:DMNLabel/>
</dmndi:DMNShape>
<dmndi:DMNEdge id="dmnedge-_2066A270-2A88-4B77-9F90-1F683FDF852C" dmnElementRef="_2066A270-2A88-4B77-9F90-1F683FDF852C">
<di:waypoint x="415" y="119"/>
<di:waypoint x="414" y="252"/>
</dmndi:DMNEdge>
</dmndi:DMNDiagram>
</dmndi:DMNDI>
</dmn:definitions>
Dieses DMN-Modell entscheidet über eine Begrüßung basierend auf dem Alter einer Person. Es ist ein einfaches Beispiel, aber stellen Sie sich vor, dies auf komplexe Geschäftsregeln und Entscheidungsprozesse zu skalieren!
Anpassung von Regeln und Entscheidungen: Ihr Weg oder die Autobahn
Kogito bietet nicht nur vorgefertigte Regeln und Entscheidungen. Es ermöglicht Ihnen, sie an Ihre einzigartigen Geschäftsanforderungen anzupassen. Hier sind einige Möglichkeiten, diese Anpassungsmuskeln zu flexen:
1. Drools Regel-Sprache (DRL)
Für die Zeiten, in denen visuelle Modelle einfach nicht ausreichen, können Sie die gute alte DRL verwenden:
package org.acme.rules
import org.acme.model.Person
rule "Greet adults"
when
$person: Person(age >= 18)
then
System.out.println("Hello, responsible adult!");
end
rule "Greet children"
when
$person: Person(age < 18)
then
System.out.println("Hi, youngster! Where are your parents?");
end
2. Entscheidungstabellen
Für Geschäftsanwender, die bei der Sicht auf Code Ausschlag bekommen, sind Entscheidungstabellen ein Segen:
RuleSet,org.acme.rules
RuleSetName,Greeting Rules
RuleTable Greeting
CONDITION,ACTION
Person.age,System.out.println
>=18,"Hello, responsible adult!"
<18,"Hi, youngster! Where are your parents?"
3. Erweiterung von DMN mit benutzerdefinierten Funktionen
Benötigen Sie etwas mehr Power in Ihren DMN-Modellen? Erweitern Sie sie mit benutzerdefinierten Java-Funktionen:
@DMNFunction(name = "toUpperCase")
public static String toUpperCase(String input) {
return input.toUpperCase();
}
Jetzt können Sie toUpperCase()
in Ihren DMN-Ausdrücken verwenden. Cool, oder?
Integration von Kogito mit der Außenwelt
Kogito versteht sich gut mit anderen. Schauen wir uns an, wie es mit einigen beliebten externen Systemen integriert werden kann:
REST-APIs: Weil SOAP zum Waschen da ist
Kogito generiert automatisch REST-Endpunkte für Ihre Prozesse und Entscheidungen. Aber was, wenn Sie eine externe REST-API aufrufen müssen? Ganz einfach:
@Inject
RestClient myExternalService;
@POST
@Path("/process")
public Response startProcess(ProcessPayload payload) {
// Starten Sie Ihren Kogito-Prozess
ProcessInstance<?> processInstance = processService.createProcessInstance(...);
// Rufen Sie die externe REST-API auf
ExternalData data = myExternalService.getData(payload.getId());
// Aktualisieren Sie die Prozessvariablen
processInstance.updateVariables(Collections.singletonMap("externalData", data));
return Response.ok(processInstance).build();
}
Kafka: Für diese ereignisgesteuerten Momente
Kogito und Kafka passen zusammen wie Erdnussbutter und Marmelade. Hier ein Vorgeschmack:
@Inject
Emitter<PersonEvent> personEventEmitter;
@POST
@Path("/persons")
public Response createPerson(Person person) {
// Ihre Kogito-Prozesslogik hier
// Senden Sie ein Ereignis an Kafka
personEventEmitter.send(new PersonEvent(person));
return Response.ok(person).build();
}
Vergessen Sie nicht, Ihre Kafka-Verbindung in application.properties
zu konfigurieren:
mp.messaging.outgoing.person-events.connector=smallrye-kafka
mp.messaging.outgoing.person-events.topic=person-events
mp.messaging.outgoing.person-events.value.serializer=io.quarkus.kafka.client.serialization.JsonbSerializer
Debugging von Kogito: Wenn die Dinge schiefgehen
Selbst die besten Entwickler finden sich manchmal in einer Debugging-Klemme wieder. Hier sind einige Tipps, um Sie bei Verstand zu halten:
1. Debug-Logging aktivieren
Erstens, drehen Sie das Logging auf:
quarkus.log.category."org.kie".level=DEBUG
quarkus.log.category."org.drools".level=DEBUG
quarkus.log.category."org.jbpm".level=DEBUG
2. Verwenden Sie die Kogito Dev UI
Kogito kommt mit einer schicken Dev UI. Fügen Sie einfach diese Abhängigkeit hinzu:
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-addons-quarkus-process-management</artifactId>
</dependency>
Jetzt können Sie http://localhost:8080/q/dev
aufrufen, um Ihre Prozesse und Entscheidungen in Aktion zu sehen.
3. Testen, Testen, Testen
Unit-Tests sind Ihre Freunde. Hier ein kurzes Beispiel:
@QuarkusTest
public class GreetingProcessTest {
@Inject
ProcessService processService;
@Test
public void testGreetingProcess() {
ProcessInstance<?> processInstance = processService.createProcessInstance(
"greeting",
Collections.singletonMap("name", "John")
);
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(processInstance.variables()).containsEntry("greeting", "Hello, John!");
}
}
Performance-Tuning: Machen Sie es schnell
Kogito ist schnell, aber mit diesen Tipps können Sie es noch schneller machen:
1. Native Kompilierung
Quarkus bietet native Kompilierung, die die Startzeit und den Speicherverbrauch erheblich reduzieren kann:
./mvnw package -Pnative
2. Reaktive Programmierung
Nutzen Sie das reaktive Paradigma für bessere Skalierbarkeit:
@Inject
ReactiveProcessService processService;
@POST
@Path("/process")
public Uni<ProcessInstance<?>> startProcess(ProcessPayload payload) {
return processService.createProcessInstance("myProcess", payload.toMap());
}
3. Caching
Verwenden Sie die integrierten Caching-Funktionen von Quarkus, um häufige Operationen zu beschleunigen:
@CacheResult(cacheName = "greeting-cache")
public String getGreeting(String name) {
// Aufwendige Operation hier
return "Hello, " + name + "!";
}
Best Practices: Do's und Don'ts
Lassen Sie uns mit einigen goldenen Regeln für die Kogito-Entwicklung abschließen:
Do:
- Halten Sie Ihre Prozesse und Entscheidungen einfach und modular
- Verwenden Sie aussagekräftige Namen für Ihre BPMN- und DMN-Elemente
- Nutzen Sie das Hot-Reload von Quarkus für schnelle Entwicklung
- Dokumentieren Sie Ihre Prozesse und Entscheidungen (Ihr zukünftiges Ich wird es Ihnen danken)
- Verwenden Sie Versionskontrolle für Ihre BPMN- und DMN-Dateien
Don't:
- Platzieren Sie keine Geschäftslogik in Ihren Prozessdiagrammen (verwenden Sie stattdessen Servicetasks)
- Vernachlässigen Sie die Fehlerbehandlung in Ihren Prozessen
- Vergessen Sie nicht das Monitoring und die Beobachtbarkeit
- Ignorieren Sie Sicherheitsbest Practices (Kogito ist kein magischer Sicherheitsschutz)
Kogito in der realen Welt: Nicht nur ein hübsches Gesicht
Kogito ist nicht nur für Spielzeugbeispiele. Es wird in der Praxis für ernsthafte Geschäftsautomatisierung eingesetzt. Hier sind einige reale Anwendungen:
- Finanzdienstleistungen: Automatisierung von Kreditgenehmigungsprozessen und Betrugserkennung
- Gesundheitswesen: Verwaltung von Patientenworkflows und Versicherungsanspruchsverarbeitung
- E-Commerce: Orchestrierung von Bestellabwicklungs- und Rückgabeprozessen
- Fertigung: Optimierung von Lieferkettenentscheidungen und Qualitätskontrollprozessen
Beitrag zu Kogito: Treten Sie dem Club der coolen Kids bei
Fühlen Sie sich inspiriert? Möchten Sie der Community etwas zurückgeben? So können Sie zu Kogito beitragen:
- Forken Sie das Kogito Examples Repository
- Wählen Sie ein Problem aus dem Issue Tracker
- Nehmen Sie Ihre Änderungen vor und reichen Sie eine Pull-Anfrage ein
- Engagieren Sie sich in der Community auf der Mailingliste
Denken Sie daran, kein Beitrag ist zu klein. Selbst das Korrigieren eines Tippfehlers in der Dokumentation wird geschätzt!
Der letzte Countdown: Zusammenfassung
Und da haben Sie es, Leute! Eine rasante Tour durch Kogito und seine Superkräfte. Wir haben alles abgedeckt, von der Einrichtung Ihres ersten Kogito-Projekts bis hin zum Beitrag zur Open-Source-Community.
Kogito, angetrieben von Quarkus, verändert das Spiel in der Geschäftsautomatisierung. Es bringt die Kraft cloud-nativer Technologien in die Welt der Geschäftsprozesse und Entscheidungen. Egal, ob Sie einen einfachen Workflow oder ein komplexes Entscheidungssystem erstellen, Kogito steht Ihnen zur Seite.
Also, worauf warten Sie noch? Tauchen Sie ein, experimentieren Sie und schließen Sie sich der Kogito-Revolution an. Ihr zukünftiges Ich (und Ihr Ops-Team) wird es Ihnen danken.
Denken Sie daran: Mit großer Macht kommt große Verantwortung. Nutzen Sie Kogito weise, und mögen Ihre Geschäftsprozesse immer zu Ihren Gunsten sein!