2017-10-10 17 views
1

워크 플로 중심 응용 프로그램을 구축 할 수 있도록 일반 응용 프로그램 또는 마이크로 서비스를 작성하는 방법을 연구 중입니다. 필자는 프레임 워크 (아래 참조)에 대해 조사한 바 있으며 가장 유망한 후보자는 JPA 주석 처리 된 엔티티와 결합 된 워크 플로우 및 프로세스 상태를 저장하기 위해 RDBMS에 대한 의존도가 높습니다. 필자가 생각하기에 이것은 일반적인 데이터 기반 워크 플로 마이크로 서비스를 설계 할 수있는 가능성을 손상시킵니다. 정말 일반적인 워크 플로 시스템은 MondoDB 나 Cassandra와 같은 NoSQL 솔루션에 JSON이나 XML로 데이터 개체와 규칙을 저장하여 구축 할 수 있습니다. 이것들은 하나 또는 두 개의 간단한 Java 객체를 사용하여 엔티티를 검색하고 저장하는 동안 실행 코드가 유형 또는 스키마를 시행 할 수있게합니다. 필자가 보았 듯이 이것은 하나의 응용 프로그램을 다른 도메인의 Model-View 쌍에 대한 컨트롤러로 수정없이 배포 할 수있게합니다 (아주 영리한 인터페이스가 있음).NoSQL에 의해 뒷받침되는 BPM을위한 성숙한 Java 워크 플로우 엔진이 있습니까?

NoSQL 백엔드를 지원하는 워크 플로우 엔진/BPM 프레임 워크를 찾으려고했습니다. 가장 가까운 것은 Activiti-Neo4J이며 Activity와 Neo4J간에 커넥터를 사용할 수있는 버려진 프로젝트 인 것으로 보입니다.

NoSQL 백엔드를 지원하고 특정 POJO 엔티티를 요구하지 않고 데이터 오브젝트를 일반화하는 Java Work Engine/BPM 프레임 워크가 있습니까?

이상한 마법의 일반적인 해결책을 포기한다면 큰 특징 집합을 가지고 성숙한 프레임 워크 인 jBPMActivi을 선택할 수 있습니다. 다른 후보자를 찾으려 할 때, 나는 버려진 프로젝트의 진실 묘지가 this one on Java-Source.net과 같은 것을 발견했습니다.

+0

downvote를 선택하는 경우 의견을 게시하십시오. 내 질문을 개선 할 수있는 방법이 있다면, 알고 싶습니다. 나는 https://stackoverflow.com/help/on-topic에서 도서관 권고 사항에 대해 질문하지 말 것을 권고하고 있지만 사실은 (1) StackOverflow의 이러한 질문은 내가이 질문에 대한 연구를 처음부터 도왔으며 (2) 이 질문에 대한 답변은 막 다른 골목을 뚫고 검색을 재개하는 데 도움이 될 수 있습니다. – sadakatsu

답변

0

Activiti 프로젝트의 설계자는 명시된 문제도 알고 있었지만 틀림없이 처음부터 프로젝트에 설계되어 있어야했던 유연성을 구현하기 위해 다시 작성해야한다는 것을 알고있었습니다. 아래 제공된 링크에서 볼 수 있듯이 문제는 관계형 데이터베이스 이외의 다른 구현을 코딩 할 인터페이스가 부족한 것입니다. 버전 6을 통해 그들은 진행하여 bandaid를 찢어 내고 다른 구현 (Neo4J, MongoDB 또는 다른 멋진 퍼시스턴스 기술이 생각 나게하는)을 작성하고 연결할 수있는 일련의 인터페이스로 프레임 워크를 리팩터링했습니다.

아래의 링크 된 아티클을 사용하여 앞서 언급 한 인터페이스의 간단한 메모리 내 구현을위한 코드 예제를 제공합니다. 꽤 멋지게 보이고 정확하게 당신이 찾고있는 것일 수도 있습니다.

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

0

나는 워크 플로우 엔진은 종종 RDBMS를 기반으로하는 이유는 안전한 트랜잭션 데이터 저장소에 대한 데이터베이스 스키마하지만 더 조합하지라고 생각합니다. 트랜잭션 견고성은 워크 플로 엔진, 특히 복잡한 워크 플로에서 일반적인 장기 실행 트랜잭션 또는 중첩 트랜잭션의 경우 중요한 요소입니다. 아마도 이것이 액티브와 같은 대부분의 엔진이 데이터 중심 접근법에 초점을 두지 않은 한 가지 이유 일 수 있습니다. (대부분의 경우 NoSQL 데이터베이스에서 다루는 데이터 복제에 대해서는 언급하지 않습니다.)

Imixs-Workflow Project을 살펴보면 Java Enterprise를 기반으로 한 다른 접근 방법을 찾을 수 있습니다. 이 엔진은 모든 종류의 직렬화 가능 데이터 값을 사용할 수있는 일반 데이터 객체를 사용합니다. 데이터 검색의 문제점은 Lucene Search 기술로 해결됩니다. 각 개체는 각 항목에 대한 이름/값 쌍으로 가상 문서로 변환됩니다. 따라서 처리 된 비즈니스 데이터를 검색하여 상태 정보 나 프로세스 소유자와 같은 구조화 된 워크 플로 데이터를 쉽게 쿼리 할 수 ​​있습니다. 그래서 이것이 가능한 해결책 중 하나입니다.

그 외에도 비즈니스 데이터를 NoSQL 데이터베이스에 저장할 수있는 옵션이 항상 있습니다. 이는 두 오브젝트를 서로 링크하는 한 실행중인 프로세스 인스턴스의 워크 플로우 데이터와는 별개입니다. 트랜잭션 견고성으로 돌아가서 NoSQL 데이터 저장소에 대한 참조를 트랜잭션 인식 프로세스 인스턴스에 저장하는 것이 좋습니다. 또한보십시오 here.

그래서 문제는 EJB/JPA에서 '외부'NoSQL 데이터베이스로 트랜잭션 컨텍스트를 동기화하는 것이 매우 어렵다는 것입니다. 예를 들어 데이터가 NoSQL 데이터 저장소 (예 : Casnadra)에 성공적으로 저장되었지만 워크 플로 엔진의 트랜잭션이 실패하고 롤백이 트리거 된 경우 수행 할 작업은 무엇입니까?