/ / Gibt es eine ausgereifte Java Workflow Engine für BPM, die von NoSQL unterstützt wird? - Java, Nosql, Workflow, BPM

Gibt es eine ausgereifte Java Workflow Engine für BPM, die von NoSQL unterstützt wird? - Java, Nosql, Workflow, BPM

Ich erforsche, wie man einen General bautAnwendung oder Microservice, um den Aufbau von Workflow-zentrierten Anwendungen zu ermöglichen. Ich habe etwas über Frameworks geforscht (siehe unten), und die vielversprechendsten Kandidaten teilen sich eine starke Abhängigkeit von RDBMS, um Workflow und Prozessstatus in Kombination mit JPA-annotierten Entitäten zu speichern. Dies schadet meines Erachtens der Möglichkeit, einen allgemeinen, datengesteuerten Workflow-Microservice zu entwickeln. Es scheint, dass ein wirklich allgemeines Workflow-System auf NoSQL-Lösungen wie MondoDB oder Cassandra aufgebaut werden kann, indem Datenobjekte und Regeln in JSON oder XML gespeichert werden. Dies würde es ermöglichen, Code auszuführen, um Typen oder Schemata zu erzwingen, während ein oder zwei einfache Java-Objekte zum Abrufen und Speichern von Entitäten verwendet werden. Aus meiner Sicht könnte dadurch eine einzelne Anwendung als Controller für verschiedene Domänen "Model-View-Paare ohne Modifikation (zugegeben mit einer sehr cleveren Oberfläche) bereitgestellt werden.

Ich habe versucht, ein Workflow-Modul / BPM-Framework zu finden, das NoSQL-Backends unterstützt. Der nächste, den ich gefunden habe, ist Activiti-Neo4JDies scheint ein verlassenes Projekt zu sein, das eine Verbindung zwischen Activity und Neo4J ermöglicht.

Gibt es ein Java Work Engine / BPM-Framework, das NoSQL-Backends unterstützt und Datenobjekte verallgemeinert, ohne dass bestimmte POJO-Entities erforderlich sind?

Wenn ich meine ideale, magisch allgemeine Lösung aufgeben würde, würde ich wahrscheinlich ein Framework wie wählen jBPM und Activi da sie großartige Feature-Sets haben und ausgereift sind. Bei dem Versuch, andere Kandidaten zu finden, habe ich einen wahren Friedhof verlassener Projekte wie dieses auf Java-Source.net.

Antworten:

1 für die Antwort № 1

Ich denke, der Grund, warum Workflow-Engines oft sindbasierend auf RDBMS ist nicht das Datenbankschema sondern mehr die Kombination zu einem transaktionssicheren Datenspeicher. Transactional Robustheit ist ein wichtiger Faktor für Workflow-Engines, insbesondere für lang laufende oder verschachtelte Transaktionen, die typisch für komplexe Workflows sind. Vielleicht ist dies ein Grund, warum die meisten Engines (wie activi) sich nicht auf einen datengesteuerten Ansatz konzentrierten. (Ich spreche hier nicht von Datenreplikation, die in den meisten Fällen von NoSQL-Datenbanken abgedeckt wird)

Wenn Sie sich die Imixs-Workflow-Projekt Sie werden einen anderen Ansatz finden, der auf Java basiertUnternehmen. Diese Engine verwendet ein generisches Datenobjekt, das beliebige serialisierbare Datenwerte konsumieren kann. Das Problem des Datenabrufs wird mit der Lucene Suchtechnologie gelöst. Jedes Objekt wird in ein virtuelles Dokument mit Namen / Wert-Paaren für jedes Element übersetzt. Dies erleichtert das Durchsuchen der verarbeiteten Geschäftsdaten sowie das Abfragen von strukturierten Workflow-Daten wie den Statusinformationen oder Prozessverantwortlichen. Das ist also eine mögliche Lösung.

Abgesehen davon haben Sie immer die Möglichkeit zuSpeichern Sie Ihre Geschäftsdaten in einer NoSQL-Datenbank. Dies ist unabhängig von den Workflow-Daten einer laufenden Prozessinstanz, sofern Sie beide Objekte miteinander verknüpfen. Um auf den Aspekt der transaktionalen Robustheit zurückzukommen, ist es eine gute Idee, den Verweis auf Ihren NoSQL-Datenspeicher in der Prozessinstanz zu speichern, die transaktionsbewusst ist. Werfen Sie auch einen Blick darauf Hier.

Das einzige Problem, auf das Sie stoßen können, ist die Tatsachedass es sehr schwierig ist, einen Transaktionskontext von einer EJB / JPA zu einer "externen" NoSQL-Datenbank zu synchronisieren, zum Beispiel: Was tun Sie, wenn Ihre Daten erfolgreich in Ihrem NoSQL-Datenspeicher (zB Casnadra) gespeichert wurden, sondern die Transaktion der Workflow-Engine fehlschlägt und ein Rollen-Back ausgelöst wird?


0 für die Antwort № 2

Die Designer des Activiti-Projekts haben auchIch war mir des von Ihnen genannten Problems bewusst, wusste aber, dass es eine Umschreibung wäre, eine solche Flexibilität umzusetzen, die von Anfang an in das Projekt hätte einfließen sollen. Wie Sie in dem unten angegebenen Link sehen werden, bestand das Problem darin, dass es an Schnittstellen mangelte, um andere Implementierungen als die einer relationalen Datenbank zu programmieren. Mit Version 6 gingen sie fort und rissen den Bandaid ab und überarbeiteten das Framework mit einem eine Reihe von Schnittstellen, für die verschiedene Implementierungen (denken Sie an Neo4J, MongoDB oder was auch immer andere Persistenz-Technologie Sie wollen) geschrieben und eingesteckt werden könnte.

Im unten verlinkten Artikel stellen sie einige zur VerfügungCodebeispiele für eine einfache In-Memory-Implementierung der oben genannten Schnittstellen. Sieht ziemlich cool aus und klingt vielleicht genau nach dem, wonach du suchst.

https://www.javacodegeeks.com/2015/09/pluggable-persistence-in-activiti-6.html