/ / Czy istnieje dojrzały mechanizm przepływu pracy Java dla BPM wspierany przez NoSQL? - java, nosql, workflow, bpm

Czy istnieje dojrzały mechanizm przepływu pracy Java dla BPM wspierany przez NoSQL? - java, nosql, workflow, bpm

Badam, jak zbudować generałaaplikacja lub mikroserwis, aby umożliwić budowanie aplikacji zorientowanych na przepływ pracy. Zrobiłem kilka badań na temat ram (patrz poniżej), a najbardziej obiecujący kandydaci dzielą poważne zaufanie na RDBMSes do przechowywania przepływu pracy i stanu procesu w połączeniu z obiektami z adnotacjami JPA. Moim zdaniem to niszczy możliwość zaprojektowania ogólnej, opartej na danych usługi mikroserwisu. Wydaje się, że prawdziwie ogólny system przepływu pracy może być zbudowany na rozwiązaniach NoSQL, takich jak MondoDB lub Cassandra, poprzez przechowywanie obiektów danych i reguł w JSON lub XML. Umożliwiłoby to wykonanie kodu w celu wymuszenia typów lub schematów podczas korzystania z jednego lub dwóch prostych obiektów Java do pobierania i zapisywania encji. Jak widzę, mogłoby to umożliwić wdrożenie pojedynczej aplikacji jako kontrolera dla różnych domen "par widoku modelu bez modyfikacji (co prawda przyznano mu bardzo sprytny interfejs).

Próbowałem znaleźć strukturę silnika przepływu pracy / BPM, która obsługuje backend NoSQL. Najbliższe, co znalazłem, to Activiti-Neo4J, który wydaje się być projektem porzuconym, umożliwiającym połączenie między Aktywnością a Neo4J.

Czy istnieje struktura Java Work Engine / BPM, która obsługuje backend NoSQL i generalizuje obiekty danych bez potrzeby konkretnych jednostek POJO?

Gdybym zrezygnował z mojego idealnego, magicznie ogólnego rozwiązania, prawdopodobnie wybrałbym takie ramy jBPM i Activi ponieważ mają świetne zestawy funkcji i są dojrzałe. Próbując znaleźć innych kandydatów, znalazłem prawdziwy cmentarz porzuconych projektów, takich jak ten na Java-Source.net.

Odpowiedzi:

1 dla odpowiedzi № 1

Myślę, że powodem, dlaczego silniki przepływu pracy są częstow oparciu o RDBMS nie jest schematem bazy danych, ale bardziej kombinacją do bezpiecznego magazynu danych transakcyjnych. Wydajność transakcyjna jest ważnym czynnikiem dla silników przepływu pracy, szczególnie dla długotrwałych lub zagnieżdżonych transakcji, które są typowe dla złożonych przepływów pracy. Być może jest to jeden z powodów, dla którego większość silników (takich jak activi) nie skupiała się na podejściu opartym na danych. (Nie mówię tu o replikacji danych, która w większości przypadków jest objęta bazami danych NoSQL)

Jeśli spojrzeć na Projekt Imixs-Workflow znajdziesz inne podejście oparte na JaviePrzedsiębiorstwo. Ten mechanizm używa ogólnego obiektu danych, który może wykorzystywać dowolne wartości danych do serializacji. Problem odzyskiwania danych rozwiązano za pomocą technologii Lucene Search. Każdy obiekt jest tłumaczony na wirtualny dokument z parami nazwa / wartość dla każdego przedmiotu. Dzięki temu można łatwo przeszukiwać przetworzone dane biznesowe, a także wyszukiwać uporządkowane dane przepływu pracy, takie jak informacje o statusie lub właściciele procesów. Jest to jedno z możliwych rozwiązań.

Poza tym zawsze masz możliwośćprzechowuj dane biznesowe w bazie danych NoSQL. Jest to niezależne od danych przepływu pracy uruchomionej instancji procesu, o ile łączysz oba obiekty razem. Wracając do aspektu solidności transakcyjnej, dobrym pomysłem jest przechowywanie odniesienia do przechowywania danych NoSQL w instancji procesu, która jest świadoma transakcji. tutaj.

Jedynym problemem, który możesz napotkać, jest faktże bardzo trudno jest zsynchronizować kontekst transakcji z EJB / JPA do "zewnętrznej" bazy danych NoSQL, na przykład: co zrobisz, gdy twoje dane powiodą się zapisane w pamięci danych NoSQL (np. Casnadra), ale transakcja silnika przepływu pracy nie powiedzie się i zostanie uruchomiona rola zwrotna?


0 dla odpowiedzi nr 2

Projektanci projektu Activiti równieżzdawałem sobie sprawę z podanego przez ciebie problemu, ale wiedziałem, że byłoby to dość od nowa, aby wprowadzić taką elastyczność, która prawdopodobnie powinna była zostać od początku zaprojektowana w projekcie. Jak widać w linku podanym poniżej, problem polegał na braku interfejsów, w stosunku do których można kodować różne implementacje inne niż relacyjnej bazy danych. W wersji 6 poszły do ​​przodu i oderwały bandaida i refaktoryzowały framework za pomocą zestaw interfejsów, dla których różne implementacje (pomyśl o Neo4J, MongoDB lub jakiejkolwiek innej technologii trwałości, jaką lubisz) można zapisać i podłączyć.

W załączonym artykule poniżej, zapewniają niektóreprzykłady kodu dla prostej implementacji wspomnianych interfejsów w pamięci. Wygląda całkiem nieźle i brzmi być może dokładnie to, czego szukasz.

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