web-dev-qa-db-ja.com

Javaの軽量ワークフローエンジン

新しいワークフローエンジンを作成するか、既存のBPMエンジンであるjBPM 5、Activiti 5を使用する方が良いでしょうか?

私のアプリケーションはWebベースのアプリケーションであり、パフォーマンスが重要です。私の疑問は、jBPM/Activitiを使用することは、単純なワークフローエンジンを記述することと比較してパフォーマンスのオーバーヘッドになるかどうかです。

自己実装を行うと、ワークフローの視覚化ができなくなります。パフォーマンスのために、それは交換できます。

32
jaks

これは本当にあなたの要件に依存します。まず、ワークフローエンジンが本当に必要かどうかを確認します( this または他のソース)。本当に必要でない限り、おそらくそれを避けるべきです。

ワークフローエンジンを提供するものが本当に必要な場合は、既に構築されているものを選択します。 jbpmまたはactivitiを使用する人は、ワークフローエンジンの構築においてあなたよりもはるかに多くの経験があるため、おそらくパフォーマンスを改善するために既に調整されています。

18
dgmora

私はすでにここに回答を投稿した人たち、またはとにかく彼らの回答の一部に同意します:P、私が現在働いている会社では、同様の挑戦を持っていたので、私たちの経験に基づいて私の意見を追加する自由を取りました。

本番関連のアプリケーションでjBPMワークフローエンジンを使用していたアプリケーションを移行する必要がありました。アプリケーションの保守にはかなりの課題があったため、市場にもっと良いオプションがあるかどうかを確認することにしました。私たちはすでに言及したリストに来ました:

  • Activiti (プロトタイプで試してみる予定)
  • Bonita (プロトタイプで試してみる予定)
  • jBPM (過去の経験により失格)

JBPMを使用した最初の経験が最良ではなかったため、jBPMを使用しないことにしました。これに加えて、リリースされたすべての新しいバージョンで後方互換性が壊れました。

最後に、使用したソリューションは、抽象化としてアクティビティとプロセスを持つ注釈に基づいて、軽量のワークフローエンジンを開発することでした。それは多かれ少なかれ、仕事をしたのはステートマシンでした。

ワークフローエンジンについて議論するときに言及する価値があるもう1つの点は、それらがバッキングDBに依存しているという事実です-私が経験した2つのワークフローエンジン( SAG webMethods および jPBM )-私の経験から、それは特にバージョン間の移行中に少しオーバーヘッドでした。

そのため、ワークフローエンジンの使用は、それから本当に恩恵を受けるアプリケーションに対してのみ資格があり、アプリケーションのワークフローのほとんどがワークフロー自体を中心に回っている場合、そうでなければ仕事のためのより良いツールがあります。

ステートマシンに関して、私は this ステートマシンのかなり完全なコレクションを含む応答Javaフレームワーク。

お役に立てれば。

33
Olimpiu POP

Activiti、Bonita、jBPMなどのJavaベースのワークフローエンジンは、幅広いBPMN 2.0仕様をサポートしています。したがって、グラフィカルな方法でプロセスをモデル化できます。さらに、これらのエンジンの一部には、Activiti(Activiti Crystalballを使用)などのシミュレーション機能があります。独自にプロセスをコーディングする場合、プロセスを変更する必要があるときほど柔軟ではありません。したがって、JavaベースのBPMエンジンを使用することもお勧めします。

BPMN 2.0ベースのオープンソースエンジンに関する調査を行いました。具体的なユースケースに関連したキーポイントは次のとおりです。

1。ボニータ:

Bonitaにはゼロコーディングアプローチがあります。つまり、コーディングを必要とせずにプロセスを構築するための使いやすいIDEを提供します。それを実現するために、Bonitaにはコネクタの概念があります。たとえば、Webサービスを使用する場合、グラフィカルなウィザードを提供します。欠点は、プレーンなXML SOAPエンベロープを手動で記述し、グラフィカルテキストボックスにコピーする必要があることです。このアプローチの問題は、Bonitaが意図したユースケースしか実現できないことです。 Bonitaがコネクタを開発しなかったシステムを統合する場合は、そのようなコネクタを自分でコーディングする必要があり、非常に苦痛です。たとえば、BonitaはSOAP Webサービスを利用するためのSOAPコネクタを提供します。このコネクタはSOAP 1.2でのみ動作しますが、SOAP 1.1では動作しません( http://community.bonitasoft.com/answers/consume-soap-11 -webservices-bonita-secure-web-service-connector )。 SOAP 1.1のレガシーアプリケーションがある場合、このシステムをプロセスに簡単に統合することはできません。データベースについても同じことが言えます。専用のデータベースバージョン用のデータベースコネクタはわずかです。コネクタと一致しないバージョンがある場合は、独自にコーディングする必要があります。

さらに、Bonitaは、無料のコミュニティエディションではLDAPまたはActive Directory Syncをサポートしていません。これは、実稼働環境にとって非常に優れています。もう1つ考慮すべき点は、BonitaがGPL/LGPLライセンスに基づいてライセンスされているため、Bonitaを別のエンタープライズアプリケーションに統合するときに問題が発生する可能性があることです。さらに、コミュニティのサポートは非​​常に弱いです。 2年以上前の投稿がいくつかあり、それらの投稿にはまだ回答がありません。

もう1つの重要なことは、ビジネスとITの連携です。モデル化プロセスは、ITおよびビジネスアナリストが関与する共同作業です。そのため、両方のユーザーグループに適切なツールが必要です(たとえば、開発者向けのEclipseプラグインと、ビジネス向けの使いやすいWebモデラー)。 BonitaはBonita Studioのみを提供します。これは、マシンにインストールする必要があります。このIDEは非常に技術的であり、ビジネスユーザーには適していません。したがって、BonitaとのBusiness-IT-Alignmentを実現することは非常に困難です。

Bonitaは、非常に簡単で簡単なプロセスのためのBPMツールです。ゼロコーディングアプローチのため、ラーニングカーブは非常に低く、非常に高速にモデリングを開始できます。必要なプログラミングスキルが少なく、コーディングを必要とせずにプロセスを実現できます。しかし、プロセスが非常に複雑になるとすぐに、柔軟性が不足するため、Bonitaは最適なソリューションではなくなる可能性があります。 Bonitaが意図したユースケースのみを実現できます。

2。 jBPM:

jBPMは非常に強力なオープンソースBPMエンジンであり、多くの機能を備えています。 Webモデラーは、一部のファンデルアールストワークフローパターン(workflowpatterns.com)のプレハブモデルもサポートしています。 jBPMはEclipse統合とWebベースのモデラーを提供するため、Business-IT-Alignmentは実現可能です。少し注意が必要なのは、Webモデラーでのみフォームを定義でき、Eclipseプラグインではフォームを定義できないことです。まとめると、jBPMは企業での使用に適した候補です。私たちの目玉はスケーラビリティでした。 jBPMは、Rules-Engine Droolsに基づいています。これにより、プロセスインスタンス全体がデータベースにBLOBとして保持されるという事実につながります。これは、検索とスケーラビリティを検討する際の重要なショートップです。

さらに、学習曲線は複雑であるため非常に高くなっています。 jBPMはBPMN-Standardが示唆するようなサービスタスクを提供しません。対照的に、独自のJavaサービスタスクを定義する必要があり、エンジンに手動で登録する必要があります。

3。 Activiti:

最後に、Activitiを使用しました。これは非常に使いやすいフレームワークベースのエンジンだからです。 Eclipseプラグインと最新のAngularJS Web-Modelerを提供します。このようにして、Business-IT-Alignmentを実現できます。 REST-APIはSpring Securityによって保護されているため、シングルサインオン機能を使用してエンジンを非常に簡単に拡張できます。 Apache License 2.0のため、コピーレフトはありません。つまり、生産性の高い環境で非常に重要な使用法と拡張性に関しては完全に自由です。

さらに、BPMNカバレッジは非常に優れています。すべてのBPMN要素が実現されるわけではありませんが、それを行うエンジンは知りません。

Activiti Explorerは、Activiti APIの使用方法を示すデモフロントエンドです。このフロントエンドはVAADINに基づいているため、非常に簡単に拡張できます。コミュニティは非常に活発であるため、問題が発生した場合に非常に迅速に支援を受けることができます。

Activitiは、生産的な使用に非常に重要な外部フォームテクノロジーの優れた統合ポイントを提供します。すべての候補者のフォームテクノロジーは非常に限定的です。したがって、XFormsのような標準のフォームテクノロジーをエンジンと組み合わせて使用​​することは理にかなっています。そのようなより複雑なものでさえ、formKey-Attributeを介して実現できます。

Activitiはゼロコーディングアプローチを採用していません。つまり、サービスをオーケストレーションしたい場合、少しコーディングする必要があります。ただし、SOAPサービスとの通信でも、JavaサービスタスクとApache CXFを使用して実現できます。コーディングの労力は少ないです。

私のキーポイントが決定を下すことによって助けられることを願っています。明確にするために、これはActivitiの広告ではありません。適切な製品の選択は、具体的なユースケースに依存します。プロジェクトで最も重要な点のみを指摘したい

24
Ben

問題は、ワークフローエンジンを求めるときに本当に達成したいことです。

ワークフローエンジンを使用して達成したい一般的な目標は、実行時にビジネスロジックを変更する際の柔軟性を高めることです。モデリングの部分は、ここで最も重要なものの1つです。 BPMN 2.0はこの分野の事実上の標準であり、説明されているすべてのエンジンがこの標準をサポートしています。

2番目の目標は、「いつ起こるべきか...」質問を記述する方法でビジネスプロセスを制御することです。そして、この部分は、プロジェクト内で直面しているビジネス要件と多くの関係があります。

一部のワークフローエンジン( Activity[〜#〜] jbpm [〜#〜] )は、プロセスを「コーディング」することでこの要件に答えるのに役立ちます。これは、「いつ起こるべきか」をモデル化することを意味します。 'パラダイムでは、コードのどの部分(タスクまたはイベント)は、さまざまな状況でワークフローエンジンによって実行される必要があります。この概念について多くの議論が行われています。そして開発者は当然、これを自分で実装することさえできないのかと尋ねます。 (実際、それは一見思えるほど簡単ではありません)

他のワークフローエンジン( Imixs-WorkflowBonita )は、「何が起こるべきか...」よりユーザー中心の方法での要件。これは、タスク指向のワークフローエンジンによる人間のスキルとアクティビティをサポートする、人間中心のビジネスプロセス管理の領域です。組織内でのタスクとプロセスの分散に重点が置かれています。ワークフローエンジンを使用すると、特定のユーザーまたはユーザーグループにタスクを配布し、長時間実行されるビジネスプロセスを保護、ログ記録、および監視できます。たぶん、これらはあなたが本当に自分で実装したくないものです。

ワークフローは非常に広い範囲をカバーするため、個別に考慮する必要のあるものを混在させないでください。

2
Ralph

コメントを追加したいと思います。 jBPM、Activityなどの準備が整ったエンジン(それらはたくさんあります)を選択すると、システム自体の学習に時間を費やす必要がありますが、これは簡単な作業ではないかもしれません。特に、小さなコードを自動化するだけでよい場合。

次に、問題が発生した場合、ベンダーのサポートに対処する必要がありますが、これは想像するほど迅速ではありません。コンサルタントの費用もかかります。

最後に、最も重要な理由は、エンジンのエコシステムで開発する必要があることです。ベンダーは、自社のシステムはどのシステムにも柔軟に組み込むことができると言う傾向がありますが、そうではない場合があります。最終的には、BPMエコシステムに合わせてアプリケーションを書き直します。

2
nomadus

すぐに使えるソリューションを使用することをお勧めします。ワークフローエンジンの開発には膨大な量のリソースと時間が必要であることを考えると、既製のエンジンがより良い選択肢です。 Workflow Engine をご覧ください。これは、任意のJavaソリューションに任意の複雑さのカスタム実行可能ワークフローを追加できる軽量コンポーネントです。

1
Jan Guardian

はい、私の見方では、あなたが自分で書くべき理由はありません。ほとんどのオープンソースBPM/Workflowフレームワークは非常に柔軟性があり、基本を学ぶ必要があります。 jBPMを選択すると、単純なワークフローエンジンよりもはるかに多くを取得できるため、何を構築しようとしているかによって異なります。

乾杯

1
salaboy

最近、Piperをオープンソースにしました( https://github.com/creactiviti/piper )分散型で非常に軽量なSpringベースのワークフローエンジン。

1
acohen

@ Apache Antを見てワークフローエンジンを構築できます。はるかに堅牢で、必要な要件のほとんどが既に組み込まれている純粋なステートマシンです。

それとは別に、Java/Groovy/JS言語にさまざまな動的コード/スクリプトを埋め込むこともできるため、非常に強力になります。また、タスクの拡張が可能です。

その周りにはかなりの量のツールがあります。または、IDEが必要な場合は、その上に構築できます。

更新:比較的軽量で肥大化していないSpringステートマシンも利用可能です https://projects.spring.io/spring-statemachine/

0
Rohitdev