/ / NoSQLがサポートするBPM用のJava Workflow Engineは成熟していますか? - java、nosql、workflow、bpm

NoSQLに裏打ちされたBPM向けのJava Workflow Engineは成熟していますか? - java、nosql、workflow、bpm

私は一般的な方法を研究していますアプリケーションまたはマイクロサービスを使用して、ワークフロー中心のアプリケーションを構築できます。私はフレームワーク(以下を参照)についていくつかの調査を行いました。最も有望な候補者は、JPAに注釈を付けたエンティティと組み合わせて、ワークフローとプロセス状態を保存するRDBMSに強く依存しています。私の意見では、これは一般的なデータ駆動のワークフローマイクロサービスを設計する可能性を損なうものです。 MondoDBやCassandraのようなNoSQLソリューションでは、JSONやXMLでデータオブジェクトやルールを格納することで、本当に一般的なワークフローシステムを構築できるようです。これらは、コードを実行することでタイプまたはスキーマを強制し、1つまたは2つの単純なJavaオブジェクトを使用してエンティティを取得および保存します。私が見ているように、これにより、単一のアプリケーションを異なるドメインのコントローラとして展開することができます。

私は、NoSQLバックエンドをサポートするワークフローエンジン/ BPMフレームワークを見つけることを試みました。私が見つけた最も近いものは Activiti-Neo4Jこれは、ActivityとNeo4Jの間のコネクターを可能にする放棄されたプロジェクトのようです。

NoSQLバックエンドをサポートし、特定のPOJOエンティティを必要とせずにデータオブジェクトを一般化するJava Work Engine / BPMフレームワークはありますか?

私が理想的な、魔法のような一般的な解決策をあきらめるならば、私はおそらく jBPM そして アクティビティー 優れた機能セットを持ち成熟しているためです。他の候補者を探す際に、私は捨てられたプロジェクトの真の墓地を見つけました。 これはJava-Source.netで.

回答:

回答№1は1

ワークフローエンジンが頻繁に使用される理由はRDBMSはデータベーススキーマではなく、トランザクションセーフなデータストアとの組み合わせです。 トランザクションの堅牢性は、特に複雑なワークフローにとって典型的な長期実行型トランザクションまたはネスト型トランザクションの場合、ワークフローエンジンにとって重要な要素です。 だから多分これは、ほとんどのエンジン(アクティのような)がデータ駆動型のアプローチに焦点を合わせなかった理由の1つです。 (私は、ほとんどの場合、NoSQLデータベースの対象となるデータ複製については言及していません)

あなたが Imixs-ワークフロープロジェクト あなたはJavaに基づいて別のアプローチを見つけるでしょう企業。このエンジンは、あらゆる種類のシリアライズ可能なデータ値を使用できる汎用データオブジェクトを使用します。データ検索の問題はLucene Search技術で解決されています。各オブジェクトは、各アイテムの名前と値のペアを持つ仮想ドキュメントに変換されます。これにより、処理されたビジネスデータを検索したり、ステータス情報やプロセス所有者などの構造化ワークフローデータを検索したりすることも容易になります。したがって、これは1つの可能な解決策です。

それとは別に、あなたには常にオプションがありますビジネスデータをNoSQLデータベースに格納します。これは、実行中のプロセス・インスタンスのワークフロー・データとは独立しています。 トランザクションの堅牢性の側面に戻って、NoSQLデータストレージへの参照をトランザクションを意識したプロセスインスタンスに格納することをお勧めします。 ここに.

したがって、あなたが遭遇する唯一の問題は事実ですEJB / JPAから "外部" NoSQLデータベースにトランザクションコンテキストを同期させるのは非常に難しいと言われています。たとえば、データがNoSQLデータストレージ(Casnadraなど)に保存されたときに何をしますか?ワークフローエンジンのロールバックが失敗し、ロールバックがトリガーされますか?


回答№2の場合は0

Activitiプロジェクトの設計者にもあなたが述べた問題を認識していましたが、間違いなく最初からこのプロジェクトに設計されていたはずの柔軟性を実現するためには、かなりの書き直しがあることが分かっていました。以下に示すリンクで見られるように、問題は、リレーショナルデータベース以外のさまざまな実装をコーディングするためのインタフェースが欠如していることです。バージョン6では、彼らはバンダイを引き裂き、フレームワークを異なる実装(Neo4J、MongoDB、またはあなたが気に入っている他のパーシスタンス技術を考える)が書かれプラグインされる可能性のあるインターフェースのセット。

下記リンク先の記事では、前述のインターフェイスの単純なインメモリ実装のコード例かなりクールに見え、おそらくあなたが探しているものと正確に聞こえます。

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