2014-09-24 22 views
8

Stworzyłem kilka zadań, każdy pobiera dane wejściowe, funkcję wykonawczą, która aktualizuje jej status, oraz funkcję uzyskiwania danych wyjściowych tego zadania. Będą wykonywane szeregowo lub równolegle. Niektóre wyjścia są List, więc będą również pętle.Jak wykonać prosty przepływ pracy z istniejącego kodu?

public class Task1 { //each task looks like this 
    void addInput(String key, String value){ 
     .... 
    } 
    void run(){ 
     .... 
     updateStatus(); 
     .... 
    } 
    HashMap getOutput(){ 
     .... 
    } 
    Status getStatus(){ 
     .... 
    } 
} 

Chcę, aby przepływ pracy z tych zadań, a następnie będę wykorzystywać informacje struktury workflow zbudować dynamiczny GUI i monitorować wyjścia każdego zadania. Czy muszę napisać od początku system realizacji przepływu pracy, czy jest dostępna jakaś prosta alternatywa?

Czy istnieje jakiś silnik przepływu pracy, do którego mogę podać (w języku XML może być) moje klasy Java, funkcje wejściowe i wyjściowe oraz funkcje wykonawcze i pozwolić na jego wykonanie?

+2

Poszukujesz [silnika BPEL] (http://en.wikipedia.org/wiki/Business_Process_Execution_Language). – CodeNewbie

+0

Nie jestem pewien co do wykorzystania twojego projektu. Do komercyjnego, szkolnego projektu lub po prostu do osobistego studiowania? – Jiang

+0

@Jiang Robię to jako prototyp/dowód koncepcji dla mojego projektu badawczego. Chodzi o automatyzację przepływów pracy. Wykonuję przepływ pracy testowej. Jest to praca naukowa, wyszukiwanie DNA, konwersja na białko, znajdowanie homologii, modelowanie białek i weryfikacja modelu końcowego. Każdy krok korzysta z różnych usług. – SMUsamaShah

Odpowiedz

2

Zapoznaj się z Activity. Nie jest to ściśle zaprojektowane, aby rozwiązać twój przypadek użycia, ale możesz użyć i zautomatyzować silnik procesu, aby ci pomóc, ponieważ jest napisany wyłącznie w języku Java. Aktywność jest raczej procesem modelowania silnika, więc nie jest zaprojektowana do kontrolowania zadań uruchomionych równolegle w czasie wykonywania, o ile otrzymasz wiele rzeczy, które możesz ponownie wykorzystać "po wyjęciu z pudełka".

  • Dostaniesz zadania łącząc w oparciu o pliku xml
  • Dostaniesz swoje GUI do łączenia zadań za darmo (na podstawie Eclipse)
  • Dostaniesz GUI w przeglądarce, by przeglądać uruchomione procesy, początek nowy, i zobacz aktualny stan zadań: http://activiti.org/userguide/index.html#N12E60
  • Otrzymasz silnik raportowania za darmo, gdzie możesz zobaczyć raporty i wykresy ("ile czasu zajęło wykonanie zadań", "jak długo był uruchomiony proces"
  • Dostaniesz REST API za darmo. Inną aplikacją będzie abl e, aby uzyskać bieżący stan aplikacji za pomocą prostych połączeń REST

Idąc w tym kierunku, otrzymasz wiele rzeczy za darmo. Z punktu widzenia programisty można na przykład dziedziczyć po klasie Task z Activity api. Późno po zakończeniu zadania zadzwoń:

taskService.complete(task.getId(), taskVariables); 

Możesz również przejść w inny sposób. Tak więc supossing, że twoja klasa, która oblicza się w tle nazywa się CalculationTask, możesz połączyć CalculatinTasks z nowym wystąpieniem Activity Task. W ten sposób otrzymasz pomost do silnika procesu aktywności. Możesz więc zrobić coś takiego, jak:

4

W świecie Java, twój przypadek użycia nazywa się BPM (zarządzanie procesami biznesowymi).

W świecie .Net nazywane jest to Windows Workflow Foundation (WWF).

Istnieje wiele otwartych narzędzi BPM opartych na języku Java. Ten, który lubię, to jBPM.

Jest to mocniejszy i można go zintegrować z silnikami reguł, takimi jak Drools.

Próbka jBPM Zrzut ekranu: jBPM Diagram

także Activiti to kolejny dobry wybór.

Próbka Activiti Zrzut ekranu: Activiti Diagram

+0

jBPM ma rozmiar 400 MB i nie jest łatwy w użyciu z istniejącymi klasami. Activiti wygląda jednak prosto. – SMUsamaShah

2

Apache Camel jest open source ramy integracji, który może być stosowany jako lekki system workflow. Trasy można definiować za pomocą języka Java, XML, Groovy lub Scala DSL. Apache Camel zawiera zintegrowane możliwości monitorowania. Oprócz tego możesz korzystać z zewnętrznych narzędzi do monitorowania, takich jak Hawtio.

Zobacz także Work Flow in Camel vs BPM.

2

Być może State Chart XML (SCXML) może ci pomóc. Obecnie jest to specyfikacja Working Draft opublikowana przez W3C

SCXML udostępnia ogólne środowisko wykonawcze oparte na maszynie stanów oparte na tabelach stanu Harel.

Podstawy apache udostępnia implementację Java, którą my (moja firma) obecnie używamy do wykonywania przejść stanu na "zadaniach". Oto Apache Commons SCXML realizacja

1

Spójrz na miedzi silnika http://copper-engine.org/

przeciwieństwie Activiti i takich, że nie wymaga, aby napisać mnóstwo XML tak aby uzyskać prosty obieg dzieje

+0

Nie jest to udokumentowane. Gdzie mogę znaleźć pomoc, api itp.? – SMUsamaShah

+0

Javadoc jest dostępny jako słoik od maven central i nie jest na ich githubie z ... jakiegoś powodu. W każdym razie, mój zespół stwierdził, że miedzi nie brakuje. Nie ma pewnych podstawowych rzeczy, których można się spodziewać po systemie przepływu pracy - na przykład możliwości zdefiniowania skończonej maszyny stanów. Przepływ pracy to prawie FSM, a miedź nie ma tego pojęcia. Po prostu definiujesz klasę Java i musisz kontynuować odpytywanie, gdy czekasz na zakończenie zdarzeń zewnętrznych, używając niestandardowej wersji wait(). Gorąco zachęcam ludzi do szukania gdzie indziej. – chairbender

2

Jeśli analiza jest czasochłonny i nie potrzebujesz natychmiastowej informacji zwrotnej, może nie potrzebujesz w ogóle silnika workflow, ale procesor wsadowy . Spójrz na projekt Spring Batch, który może być używany razem z Camel Apache (zobacz moją drugą odpowiedź, aby uzyskać więcej informacji na temat tej opcji).

1

Zdecydowanie bym rozważył the Apache Storm project. Storm został zaprojektowany jako łatwy do rozszerzenia, równoległy silnik obliczeniowy. Wśród wielu jego cech, łatwości zarządzania, odporności na awarie i ogólnej prostoty konfiguracji (w porównaniu do innych podobnych technologii, takich jak Hadoop, jak sądzę) prawdopodobnie będą atrakcyjne dla systemu prototypowego.

Przepływy pracy będą analogiczne do topologii Storm; różne zadania będą strumieniami; a różne metody w zadaniach odpowiadałyby spouts i bolts. Ponadto, Storm obsługuje kilka języków programowania w swoim API, takich jak Hadoop.

Storm został początkowo zaprojektowany przez Twittera, a następnie otwarty, podobnie jak inne projekty, takie jak Cassandra (Facebook) i sam Hadoop (Yahoo!). Dla użytkownika oznacza to, że został on zbudowany do faktycznego wykorzystania, a nie jako czysto teoretyczna koncepcja. Jest również bardzo dobrze przetestowany w walce.

Mam nadzieję, że przydała się Tobie i życzę powodzenia w Twoim projekcie!

Powiązane problemy