質問
JBPM セッションを設定する場合、2 つのオプションがあります。
JBPM マッピングを同じ Hibernate セッションに置くことができ、その結果、アプリケーション テーブルとともにデータベース内にそのテーブルが存在します。
JBPM マッピングを別の Hibernate セッションに配置し、別のデータベースに保存できます。
方法 1 を推奨する記事を 1 つ見たことがあります。その理由はわかります。この方法では、JBPM データ オブジェクトへの外部キー参照を直接取得できるからです。私が確認した唯一の問題は、JBPM プロセスの実行中に jbpm オブジェクトを保存しようとすると、データベースでデッドロックが発生することです。
それ以外に、どの方法がより良いでしょうか?また、その理由は何ですか?
解決
これは、あなたが構築したいアーキテクチャに依存します。
あなたは、いくつかの異なるアプリケーションが通信1つの集中管理されたワークフローコンポーネントを、必要な場合、は、単一のデータベースを移動するための方法である。
ワークフローは唯一のいくつかのアプリケーションに固有のものであれば、大藤、分離のデータベースを維持することをお勧めします。それは他の人にあるように、その方法は、あなたがそれを後でいくつかのアプリケーションでのjBPMをアップグレードしておくことができます。
しかし、あなたもたくさんあっても、すべてのアプリケーションのために別々のDBを持っていることを決定することができます。 )を管理するための何の巨大なテーブルが存在しないため、この方法では、実行時のパフォーマンスは素晴らしいまま
あなたが見ることができるように、jBPMはあなたのアーキテクチャにそれを埋め込む方法では非常に柔軟です。だから、あなた自身のための分析を行い、アカウントの現在とあなたのアーキテクチャの今後の進化に入れ最善のアプローチ、何を決定する必要があります。
他のヒント
1つのデータベースにアプリケーションとjBPMテーブルの両方を置くあなたは、単一のトランザクションでのjBPMテーブルとアプリケーションデータの両方を更新することができます。たとえば、あなたはタスクがjBPMの中で行われた場合、アプリケーションデータにいくつかの属性を更新したい場合などに便利です。これは壊れるからあなたのデータを保持するのに役立ちます。そうしないと、あなたのjBPMトランザクションをコミットしてから、アプリケーションのデータ・トランザクションをコミットする問題に実行する場合、あなたは非常に大きな問題を持っている...
私たちは、バージョンをアップグレードするか、多分それは別のクライアントのために必要となるとき、別のベンダーを使用することができるようにするために別のjBPMデータベースを維持することを決めたケースがありました。前述したように、我々は、アプリケーションレベルでの単一の操作用に別のHibernateセッションに対処しなければならなかった状況に走りました。これらの条件の一貫性を保つために、我々は Atomikosする
と呼ばれるツールを使用することにしました