/ / Има ли зрял Java Workflow Engine за BPM, поддържан от NoSQL? - java, nosql, workflow, bpm

Има ли зрели Java Workflow Engine за BPM, поддържан от NoSQL? - java, nosql, workflow, bpm

Аз съм изследване как да се изгради генералприложение или микро услуги, за да се даде възможност за създаване на работни приложения, ориентирани към работния поток. Направих някои проучвания за рамки (вижте по-долу), а най-обещаващите кандидати споделят твърдо разчитане на RDBMSes, за да съхраняват работния поток и процеса на работа в съчетание със структури, обозначени със СПА. По мое мнение, това накърнява възможността за разработване на обща услуга за обслужване на потоци, базирана на данни. Изглежда, че една наистина обща система за работен поток може да бъде изградена върху NoSQL решения като MondoDB или Cassandra чрез съхранение на обекти и правила в JSON или XML. Те биха позволили на изпълняващия код да налага типове или схеми, докато използват един или два прости Java обекти, за да изтеглят и записват обекти. Както виждам, това би могло да позволи отделно приложение да бъде внедрено като контролер за различни домейни "Model-View чифтове без промяна (разбира се, има много умен интерфейс).

Опитах се да намеря работен поток двигател / BPM рамка, която поддържа NoSQL backends. Най-близкото, което открих, е Activiti-Neo4J, което изглежда е изоставен проект, позволяващ свързване между Activity и Neo4J.

Има ли Java Work Engine / BPM рамка, която поддържа NoSQL backends и обобщава обекти с данни, без да се налагат конкретни обекти на POJO?

Ако исках да се откажа от идеалното ми, магическо общо решение, най-вероятно ще избера рамка като тази jBPM и Activi тъй като те имат страхотни набор от функции и са зрели. Когато се опитвам да намеря други кандидати, намерих истинско гробище на изоставени проекти като този на Java-Source.net.

Отговори:

1 за отговор № 1

Мисля, че причината, поради която работните потоци са честовъз основа на RDBMS не е схемата на базата данни, а по-скоро комбинацията към хранилище за данни, безопасно за транзакциите. Транзакционната стабилност е важен фактор за работните потоци, особено при продължителни или вложени транзакции, характерни за сложните работни потоци. Така че може би това е една от причините, поради която повечето двигатели (като активи) не се съсредоточават върху подход, основан на данни. (Аз не говоря за репликация на данни тук, която е покрита от NoSQL бази данни в повечето случаи)

Ако погледнете Проект Imixs-Workflow ще откриете различен подход, базиран на JavaEnterprise. Този двигател използва общ предмет от данни, който може да консумира всякакъв вид сериализируеми данни. Проблемът с извличането на данни се решава с технологията Lucene Search. Всеки обект се превежда във виртуален документ с двойки име / стойност за всеки елемент. Това улеснява търсенето на обработените данни за бизнеса, както и на структурирани данни за работните потоци, като информация за състоянието или собствениците на процеса. Така че това е едно възможно решение.

Освен това, винаги имате възможност дасъхранявайте фирмените си данни в база данни на NoSQL. Това е независимо от данните за работния поток на стартиращ процес, доколкото свързвате двата обекта заедно. Връщайки се към аспекта на стабилността на транзакциите, е добра идея да съхранявате препратката към вашето NoSQL съхранение на данни в процеса, който е информиран за сделката. тук.

Така че единственият проблем, с който може да се сблъскате, е фактътче е много трудно да се синхронизира контекстът на транзакция от EJB / JPA към "външна" NoSQL база данни.Например: какво ще направите, когато вашите данни бяха успешно записани в хранилището на NoSQL данни (например Casnadra), но транзакцията от двигателя на работния поток не успее и се задейства връщане на ролите?


0 за отговор № 2

Дизайнерите на проекта Activiti също са имализнаех за проблема, който заявихте, но знаеше, че ще бъде пренаписване, за да се приложи такава гъвкавост, която, може би, би трябвало да бъде проектирана в проекта от самото начало. Както ще видите в линка, предоставен по-долу, проблемът е липсата на интерфейси, към които да се кодират различни реализации, различни от тази на релационна база данни. С версия 6 те продължават напред, откъснати от bandaid и refactored рамката с набор от интерфейси, за които могат да се пишат и да се включат различни реализации (мисля, че Neo4J, MongoDB или каквито и да било други технологии за устойчивост)

В свързаната по-долу статия те предоставят някоикодови примери за просто вграждане в памет на гореспоменатите интерфейси. Изглежда доста готино и звучи, може би точно това, което търсите.

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