Ich habe mehrere Aufgaben erstellt, jede nimmt eine Eingabe, eine Ausführungsfunktion, die ihren Status aktualisiert, und eine Funktion, um die Ausgabe dieser Aufgabe zu erhalten. Sie werden seriell oder parallel ausgeführt. Einige Ausgaben sind List, also gibt es auch Loops.
%Vor%Ich möchte aus diesen Aufgaben einen Workflow machen und dann die Workflow-Strukturinformationen verwenden, um eine dynamische GUI zu erstellen und die Ausgaben jeder Aufgabe zu überwachen. Muss ich ein Workflow-Ausführungssystem von Grund auf schreiben oder gibt es eine einfache Alternative?
Gibt es eine Workflow-Engine, der ich (in XML) meine Java-Klassen, Eingabe- und Ausgabe- und Ausführungsfunktionen geben und ausführen lassen kann?
Besuche Aktivität . Dies ist nicht streng darauf ausgelegt, Ihren Anwendungsfall zu lösen, aber Sie können die Prozess-Engine verwenden und anpassen, um Ihnen zu helfen, da sie ausschließlich in Java geschrieben ist. Die Aktivität ist eher eine Prozessmodellierungs-Engine, so dass sie nicht zur parallelen Steuerung von Tasks zur Laufzeit ausgelegt ist, sondern Sie erhalten viele Dinge, die Sie "out of the box" wiederverwenden können.
Wenn du in diese Richtung gehst, wirst du viele Dinge kostenlos bekommen. Vom Programmierpunkt von View aus können Sie beispielsweise von Task
class von Activity api erben. Spät, wenn die Aufgabe abgeschlossen ist, rufen Sie
Sie können auch einen anderen Weg gehen. Wenn Sie also angeben, dass Ihre Klasse, die im Hintergrund berechnet wird, CalculationTask heißt, können Sie CalculatinTasks mit der neuen Instanz der Aktivitätsaufgabe verbinden. Dadurch erhalten Sie eine Brücke zur Activity Process Engine. Du kannst also etwas wie
machen %Vor%In der Java-Welt wird Ihr Anwendungsfall als BPM (Business Process Management) bezeichnet.
In der .Net-Welt wird dies als Windows Workflow Foundation (WWF) bezeichnet.
Es gibt viele Java-basierte Open-Source-BPM-Tools. Der, den ich mag, ist jBPM .
Dies ist leistungsfähiger und kann mit Regel-Engines wie Drools integriert werden.
Beispiel jBPM Screenshot:
Auch Activiti ist eine weitere gute Wahl.
Beispiel Activiti Screenshot:
Apache Camel ist ein Open-Source-Integrationsframework, das als leichtgewichtiges Workflow-System verwendet werden kann. Routen können mit Java, XML, Groovy oder Scala DSL definiert werden. Apache Camel enthält integrierte Überwachungskapazitäten. Außerdem können Sie externe Überwachungswerkzeuge wie Hawtio verwenden.
Sehen Sie sich auch Work Flow in Camel vs BPM an.
Vielleicht kann Ihnen State Chart XML (SCXML) helfen. Derzeit ist es ein Working Draft-Spezifikation von W3C veröffentlicht.
SCXML stellt eine generische, statusmaschinebasierte Ausführungsumgebung basierend auf Harel State Tables zur Verfügung.
Die Apache-Grundlagen bieten eine Java-Implementierung, die wir (meine Firma) derzeit verwenden, um Zustandsübergänge bei "Jobs" durchzuführen. Hier ist die Apache Commons SCXML Implementierung
Wenn Ihre Analyse zeitaufwendig ist und Sie kein sofortiges Feedback benötigen, benötigen Sie vielleicht gar keine Workflow-Engine, sondern einen Batch-Prozessor . Sehen Sie sich das Projekt Spring Batch an, das zusammen mit Camel Apache (siehe meine andere Antwort für weitere Informationen zu dieser Option).
Werfen Sie einen Blick auf Copper Engine Ссылка
Im Gegensatz zu Activiti und so ist es nicht erforderlich, eine Tonne XML zu schreiben, nur um einen einfachen Workflow zu ermöglichen
Ich würde definitiv das Apache Storm-Projekt in Erwägung ziehen. Storm ist eine leicht erweiterbare, parallele Berechnungs-Engine. Unter den vielen Funktionen, die es zu verwalten, Fehlertoleranz und allgemeine Einfachheit (im Vergleich zu anderen ähnlichen Technologien wie Hadoop, glaube ich), werden Sie wahrscheinlich für ein Prototyp-System attraktiv sein.
Workflows wären analog zu Storm-Topologien; die verschiedenen Aufgaben wären Streams; und die verschiedenen Methoden in den Aufgaben würden spouts
und bolts
entsprechen. Außerdem unterstützt Storm mehrere Programmiersprachen in seiner API, wie Hadoop.
Storm wurde ursprünglich von Twitter entwickelt und dann wie andere Projekte wie Cassandra (Facebook) und Hadoop selbst (Yahoo!) Open Source. Für Sie als Nutzer bedeutet das, dass es für den tatsächlichen Gebrauch gebaut wurde, anstatt als rein theoretisches Konzept. Es ist auch ziemlich kampferprobt.
Ich hoffe, dass Ihnen das nützlich war und wünsche Ihnen viel Erfolg bei Ihrem Projekt!