質問

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

アイデアはそれを分離することです 意味 から 実行可能 バージョンでは、BPMNまたはJPDLまたはPOJOベースのワークフローソリューション(BeanFlow)の間でランタイムバージョンを選択できるようにします。

制限: :JBPM、Activitiなどのフレームワークを備えたBPMNエディターを使用することはできません。自分のドメインに固有の自分のUIを使用しないようにします。

定義を維持する方法についての提案が必要です。

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

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

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

役に立ちましたか?

解決

「オーケストレーション」によって、私はあなたが意味すると仮定しています 有限状態マシン. 。現在の状態では、どの遷移が他の州に従うことができるかを決定します。エッジと頂点としての状態と遷移の表現は、しばしば 指示された非環式グラフ, しかし、グラフがサイクリングする場合があります(例:ドラフト - 承認のために提出 - >保留中の承認 - 拒否 - >ドラフト)。

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

現在、この目的のために独自のXML定義を書いたこと(面白くない理由のために除外)を作成したことで、私の提案はJPDL(またはBPMN)を使用することです。理由は、彼らの定義が、あなたが現在検討しているものを何でも組み込み、将来意志を取り入れ、特定のポイントで任意のデータや動作を吊るしたり、動作するなどのカスタマイズを有効にしたりする可能性が高いためです。また、サイクル検出に対処し、完了への道があることを確認するために、UIだけでなく、すでに構築されたツールの利点も得られます。

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

最後に、システムの範囲に応じて、おそらくデータベースも使用しているでしょう。私が提案するのは、XMLとデータベースに組織化されるデータをシリアル化された形式で保存することです。次に、データが実行中に移動するときにデータが変更されている場合、データのシリアル化(おそらくそれも変更されている場合はワークフロー)を履歴/監査ログテーブルに書き込みます。

他のヒント

RDBMSテーブルは使用しません。そうであれば、定義をテキストブロブとして保存します。定義のレコードを作成しようとすることは、時間の経過とともに定義を変更するのがはるかに柔軟性がなく、困難であるため、悪い考えです。多くの人はさまざまなアプローチを使用しますが、JSONまたはYAMLを使用してXMLを避けます。その動機は、可能な限りシンプルにすることです。 XMLを使用しようとすると、特にXMLの形式化された特定の形式は、実際に達成しようとしていることを支援するために実際に何もしない正確な仕様を満たす時間をはるかに費やすことになります。 JSONとYAMLはどちらもコードの観点から非常に簡単に作業できます。 YAMLは人間がより簡単に読みやすく、編集しやすく、句読点やJSONほど脱出するのは難しくありません。 JSONはより広く使用されており、Yamlよりも小さいです。 JSONには、ドキュメントサイズが懸念される場合、バイナリカウンターパート、BSONもあります。

内部オブジェクトに出入りするインポーター/輸出業者がデータ形式に移動すると、RDBMSまたはその他のメカニズムを使用して持続すると簡単になります。 CouchDBを使用することもできます。CouchDBは、アプリケーションに他の利点を提供し、非常に適している可能性があります。

とても良い質問!これが私の2セントです:

  1. rdbms: :これを行うと、たとえば「ノードX」にあるトークンなど、ワークフローインスタンスを照会できますか?
  2. 保管 XML CLOBとして:シンプルさはこのソリューションの真実ですが、実際にはこれらを照会することはできません。
  3. nosql: :さまざまな問題に対してさまざまなソリューションがあります。 mongodb 人気のあるソリューションであり、ドキュメント指向の持続性を提供します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top