1

ペット プロジェクト用の UI 構成ツールを作成中です。このツールの 1 つの側面により、エンド ユーザーは自分のオーケストレーションを定義できます。次に、このオーケストレーション定義をデータベースに保存する必要があります。実行中のシステムには、この定義の実行可能なバージョンがあります。実行可能なバージョンは、オンデマンドで動的に作成されます。

アイデアは、DEFINITIONEXECUTABLEバージョンから分離して、BPMN、JPDL、または POJO ベースのワークフロー ソリューション (BeanFlow) の中からランタイム バージョンを柔軟に選択できるようにすることです。

制限: 自分のドメインに固有の独自の UI を使用したくないため、jBPM、Activiti などのフレームワークに付属する BPMN エディターを使用できません。

定義を永続化する方法について提案が必要です。

  1. rdbms テーブルを使用する必要がありますか? もしそうなら、オーケストレーションの概念に近い、借用できるデータベーススキーマはありますか?

  2. 定義を BPMN/JPDL XML インスタンス ドキュメントにシリアライズする必要がありますか?

  3. 他に使用できる簡単な形式はありますか?

4

4 に答える 4

2

「オーケストレーション」とは、有限状態マシンを意味すると仮定しています。現在の状態によって、どの遷移をたどれば他の状態に移行できるかが決まります。エッジと頂点としての状態と遷移の表現は、多くの場合有向非巡回グラフを生成しますが、グラフが循環する場合があります (たとえば、ドラフト -- 承認のために提出 --> 承認待ち --> 却下 --> ドラフト)。

実際には、定義を実行から分離すると、カスタマイズに容易に対応できる永続化形式が求められます。システムが進化するにつれて、永続化スキーマを変更する必要はなく、コードのみを変更する必要がある解決策である、予期しないエッジ ケースが多数見つかります。これは、XML または NoSQL ソリューション (スキーマが簡単に変更されるか存在しないもの) を意味します。

さて、この目的のために独自の XML 定義を作成したので (興味深い理由で除外します)、JPDL (または BPMN) を使用することをお勧めします。その理由は、それらの定義には、現在検討していること、将来考えていることをすべて組み込み、カスタマイズを可能にする可能性が高いからです。たとえば、任意のデータをぶら下げたり、特定の時点で動作をオフにしたりできます。また、UI だけでなく、既に構築されているツールの利点も得られます。たとえば、サイクル検出を処理したり、完了へのパスがあることを確認したりできます。

私が知っている JPDL の興味深い機能のいくつかは、フォークされたプロセス、時間指定されたタスク (定期的に繰り返されるタスクを含む)、および通知を送信するための機能をマージする機能です。この最後の項目 - 通知 - には、さらに詳しい説明があります。私が自分のシステムで発見したことの 1 つは、流れるデータに基づいた内容の構成可能な電子メールを送信する必要があることです。これらの既存のエンジンは、たとえば変数をテキストにプラグインする方法を提供することで、これを比較的簡単にします。テキストは、実行時に送信前に動的に評価されます。また、ユーザー グループに通知を送信し、タスクを実行し、セキュリティ ポリシーを実施する目的で、エンジンと任意のユーザー ストア間のブリッジを提供します。

最後に、システムの範囲によっては、データベースも使用している可能性があります。私が提案するのは、シリアル化された形式でデータベースに編成されている XML とデータを保存することです。次に、データが実行中に変更されている場合は、データのシリアライゼーション (変更されている場合はおそらくワークフロー) も履歴/監査ログ テーブルに書き込みます。

于 2011-01-27T17:00:46.643 に答える
1

とても良い質問です!ここに私の2セントがあります:

  1. RDBMS : これを行うと、ワークフロー インスタンスをクエリできます。たとえば、「ノード X」にあるトークンはどれですか?
  2. XMLを clob として保存する: シンプルさがこのソリューションの真実ですが、ID で取得するだけでクエリを実行することはできません。
  3. NOSQL : さまざまな問題に対してさまざまな解決策があります。MongoDBは一般的なソリューションであり、ドキュメント指向の永続性を提供します。
于 2011-01-26T07:19:59.593 に答える
1

私は rdbms テーブルを使用しません。使用する場合は、定義をテキスト BLOB として保存します。定義の記録を作成しようとすることは、柔軟性が低く、時間の経過とともに定義を変更するのが難しいため、悪い考えです。多くの人がさまざまなアプローチを使用しますが、私は JSON または YAML を使用し、XML は使用しません。その動機は、できるだけシンプルにすることです。XML を使用しようとすると、特に形式化された特定の形式の XML を使用すると、達成しようとしていることに実際には何の役にも立たない正確な仕様を満たすために多くの時間を費やすことになります。JSON と YAML はどちらも、コードの観点から非常に簡単に操作できます。YAML は人間にとって読みやすく、編集しやすく、JSON ほど句読点やエスケープが難しくありません。JSON はより広く使用されており、YAML よりもサイズが小さくなっています。

内部オブジェクトとデータ形式をやり取りするインポーター/エクスポーターがあれば、RDBMS やその他のメカニズムを使用して永続化するのは簡単です。CouchDB を使用することもできます。これは、アプリケーションに他の利点を提供する可能性があり、非常に適している可能性があります。

于 2011-01-26T07:22:25.543 に答える
0

たとえばXStreamを使用して構成された UI を単純にシリアル化し、シリアル化されたビットをバイナリ列としてデータベースに格納するのはどうでしょうか。次に、ユーザーがログインすると、関連するデータを取得し、デシリアライズし、必要に応じて初期化して表示します。

于 2011-01-26T08:09:08.823 に答える