式とスクリプトでコンフィグレーションBeanを公開
式やスクリプトで構成豆公衆
デフォルトでは、あなたがactiviti.cfg.xml構成にしたり、独自のSpring構成ファイルで指定したすべてのBeanは、式へとスクリプトで利用できます。あなたが設定ファイルに豆の視界を制限したい場合は、あなたのプロセスエンジンの設定に豆と呼ばれるプロパティを設定することができます。ProcessEngineConfigurationで豆プロパティがマップです。あなたがそのプロパティを指定すると、そのマップに指定された唯一の豆は、式やスクリプトに表示されます。暴露豆はあなたがそのマップに指定などの名前で公開されます。
デフォルトでは、お使いのコンフィギュレーションまたはすべての式とスクリプトactiviti.cfg.xml豆で指定された独自のSpring構成ファイルが用意されています。あなたはBean構成ファイルの可視性を制限したい場合は、プロセス・エンジン構成で豆と呼ばれるプロパティを設定することができます。ProcessEngineConfiguration豆プロパティがマップです。このプロパティを指定すると、スクリプトで指定された豆と魚の式は、マップでのみ表示されます。Beanは、あなたが公共の場でのマッピング名を指定して開きます。
展開のキャッシュ設定(展開キャッシュの設定)
すべてのプロセス定義データベースにプロセス定義が必要になるたびにヒットを避けるために、プロセス定義データが変更されないので、(彼らはしている解析された後の)キャッシュされます。デフォルトでは、このキャッシュに制限はありません。プロセス定義のキャッシュを制限するには、次のプロパティを追加します。
データは変更されないため、すべてのプロセス定義は、それぞれのプロセス定義の必要性を回避するためには、プロセス定義を(パース後)キャッシュデータベースに遭遇しているでしょう。デフォルトでは、このキャッシュは無制限です。キャッシュプロセス定義を制限するには、式やスクリプトで以下のコンフィグレーションBean propertyexposeを追加
<property name="processDefinitionCacheLimit" value="10" />
このプロパティを設定すると、提供ハードの限界を持っているLRUキャッシュとデフォルトのハッシュマップのキャッシュを交換します。もちろん、このプロパティの最高値が格納されたプロセス定義の合計量と、実際にすべてのランタイムプロセスインスタンスで実行時に使用されるプロセス定義の数に依存します。
また、独自のキャッシュ実装を注入することができます。これはorg.activiti.engine.impl.persistence.deploy.DeploymentCacheインタフェースを実装するBeanである必要があります。
<property name="processDefinitionCache">
ルールキャッシュを構成するためのknowledgeBaseCacheLimitとknowledgeBaseCacheと呼ばれる同様のプロパティがあります。あなたのプロセスで、ルールのタスクを使用する場合にのみ必要とされています。
HashMapのデフォルトのキャッシュモード、キャッシュのサイズは、構成やプロセスの数とカスタムハードウェア、実際に使用されるプロセスの合計数の数に依存します。
我々はまた、独自のキャッシュ実装注入し、我々は、インターフェイスがorg.activiti.engine.impl.persistence.deploy.DeploymentCache実装する必要がありますすることができます
キャッシュルールを設定するために使用knowledgeBaseCacheLimitとknowledgeBaseCacheと呼ばれる同様の性質を持っています。そうする過程で、ルールタスクを使用した場合のみ。
ロギング
すべてのログはSLF4Jを経由する、とあなたは私たちが達成することを選択したログを選択することができますされています。
デフォルトでは、選択したログフレームを使用するためにactivitiエンジンの依存関係にはSFL4J結合jarファイルは、プロジェクトに追加する必要があります、ありません。あなたが任意の実装のjarファイルを追加しない場合、SLF4Jは単なる警告がすべてのログを記録していない、すべてのログを記録しませんでした、NOP-ロガーを使用します。
activiti-UIとactiviti-残りのwebappsには、Log4jの結合を使用するように設定されています。すべてのテストが*モジュールが実行activiti-すると、またLog4jのを使用しています。
イベントハンドラ(イベントハンドラ)
Activitiエンジンでのイベントメカニズムは、様々なイベントがエンジン内で発生したときに通知を受け取ることができます。使用可能なイベントの概要については、サポートされているすべてのイベントタイプを見てみましょう。
イベントメカニズムtivitiエンジンは、様々なイベントがエンジン内で発生したときに通知を受けることができます。利用可能なイベントの概要を得るためには、サポートされているイベントのすべてのタイプを表示します。
派遣すべてのイベントはorg.activiti.engine.delegate.event.ActivitiEventのサブタイプです。イベントが公開(使用可能な場合)タイプ、executionId、processInstanceIdとprocessDefinitionId
すべてのイベントはorg.activiti.engine.delegate.event.ActivitiEventのサブタイプを実現しています。このイベントは、(利用可能な場合)タイプexecutionId、processInstanceIdとprocessDefinitionId開いています
イベントリスナーの例
public class MyEventListener implements ActivitiEventListener {
@Override
public void onEvent(ActivitiEvent event) {
switch (event.getType()) {
case JOB_EXECUTION_SUCCESS:
System.out.println("A job well done!");
break;
case JOB_EXECUTION_FAILURE:
System.out.println("A job has failed...");
break;
default:
System.out.println("Event received: " + event.getType());
}
}
@Override
public boolean isFailOnException() {
// The logic in the onEvent method of this listener is not critical, exceptions
// can be ignored if logging fails...
return false;
}
}
イベントリスナーの一般的な使用例を容易にするために、Activitiが提供するいくつかの基本実装があります。これらは、ベースクラスとして、または例えば、リスナーの実装として使用することができる:
org.activiti.engine.delegate.event.BaseEntityEventListener:特定のタイプのエンティティに関連するイベントをリスンするために使用することができるアンイベントリスナーのベースクラスエンティティまたはすべてのエンティティのため。、のonCreate(...)にonUpdate(...)と、エンティティが作成、更新または削除されるonDelete(...):それは離れて上書きされなければならない型チェックや特典4つのメソッドを隠します。他のすべてのエンティティに関連するイベントの場合、onEntityEvent(...)が呼び出されます。
Activitiは、イベントリスナーの促進を達成するためにいくつかの基本的な一般的な使用例を提供します。これらの例は塩基として用いてもよいし、リスナーが実現:
org.activiti.engine.delegate.event.BaseEntityEventListenerr:ベース・クラス・イベント・リスナーは、エンティティまたはエンティティイベントに関連するすべてのエンティティの特定のタイプを聞くことができます。これは、型チェックを隠し、そして4つの方法がカバーされるべき提供:のonCreate(...)、にonUpdate( ...) とonDelete(...を)エンティティが作成、更新または削除されたとき。エンティティに関連する他のすべてのイベントがonEntityEventと呼ぶことにするために(...)。
設定したイベントリスナーを次のように
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
...
<property name="eventListeners">
<list>
<bean class="org.activiti.engine.example.MyEventListener" />
</list>
</property>
</bean>
また、イベントリスナーの種類を実行するように構成することができます。
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
...
<property name="typedEventListeners">
<map>
<entry key="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" >
<list>
<bean class="org.activiti.engine.example.MyJobEventListener" />
</list>
</entry>
</map>
</property>
</bean>
コードは以下のようにモニター、APIインターフェイスを実行して添加してもよいです。
/**
* Adds an event-listener which will be notified of ALL events by the dispatcher.
* @param listenerToAdd the listener to add
*/
void addEventListener(ActivitiEventListener listenerToAdd);
/**
* Adds an event-listener which will only be notified when an event occurs, which type is in the given types.
* @param listenerToAdd the listener to add
* @param types types of events the listener should be notified for
*/
void addEventListener(ActivitiEventListener listenerToAdd, ActivitiEventType... types);
/**
* Removes the given listener from this dispatcher. The listener will no longer be notified,
* regardless of the type(s) it was registered for in the first place.
* @param listenerToRemove listener to remove
*/
void removeEventListener(ActivitiEventListener listenerToRemove);
あなたは次のようにXML設定は、プロセス定義のモニターに加えてもよいです。
<process id="testEventListeners">
<extensionElements>
<activiti:eventListener class="org.activiti.engine.test.MyEventListener" entityType="task" />
<activiti:eventListener delegateExpression="${testEventListener}" events="ENTITY_CREATED" entityType="task" />
</extensionElements>
...
</process>
EntityType値であってもよい:添付ファイル、コメント、実行、アイデンティティ・リンク、仕事、プロセス・インスタンス、プロセス定義、タスク。
スケジュールされたイベントに対処するためのもう一つの方法は、BPMNのイベントにスローされます1。覚えておいてください、だけActiviti BPMN-イベントになりセンスを投げイベントタイプの特定のタイプを使用します。例えば、プロセス・インスタンスを削除するときはBPMNイベントはエラーになりスロー。信号処理インスタンスでスローする方法を次のコードショーは、(グローバル)外部流れに対して信号をスローし、エラーイベントは、プロセスインスタンスでスローされ、イベントメッセージプロセスインスタンスをスロー。むしろ、イベントのタイプに固有がスローされ、クラスまたはdelegateExpressionを使用するよりも一緒に追加のプロパティを持つプロパティthrowEventを使用。
<process id="testEventListeners">
<extensionElements>
<activiti:eventListener throwEvent="signal" signalName="My signal" events="TASK_ASSIGNED" />
</extensionElements>
</process>
<process id="testEventListeners">
<extensionElements>
<activiti:eventListener throwEvent="globalSignal" signalName="My signal" events="TASK_ASSIGNED" />
</extensionElements>
</process>
<process id="testEventListeners">
<extensionElements>
<activiti:eventListener throwEvent="message" messageName="My message" events="TASK_ASSIGNED" />
</extensionElements>
</process>
<process id="testEventListeners">
<extensionElements>
<activiti:eventListener throwEvent="error" errorCode="123" events="TASK_ASSIGNED" />
</extensionElements>
</process>
(リスナーを説明したプロセスに定義された)プロセス定義にリスナーの注意事項
1、イベントリスナーはextensionElementsの子要素として、プロセスの要素で宣言することができます。リスナーは、プロセス内の個々の活動に定義することはできません。
他の式は、(例えば、ゲートウェイで)持っているとしてdelegateExpressionで使用される2、式は、実行コンテキストにアクセスすることはできません。彼らは、プロセスのエンジン構成の豆プロパティで定義された豆または任意バネBeanにスプリングを使用して(及び豆プロパティが存在しない)を実装しているリスナーインターフェースを参照することができます。
リスナーのクラス属性を使用する場合は3、、のみ作成され、そのクラスの単一のインスタンスが存在します。ていることを確認し、リスナーの実装では、メンバーフィールドに依存しているか、複数のスレッド/コンテキストからの安全な使用を保証するものではありません。
不正イベントタイプはイベント属性または不正throwEvent値で使用されている4が、使用されているプロセス定義を(効果的に配備を失敗)展開されたときに、例外がスローされます。クラスまたはdelegateExecutionため不正値(いずれかの存在しないクラス、存在しないBean参照またはリスナーインタフェースを実装しないデリゲート)が供給されると、例外が処理が開始されるときにスロー(または場合にPROCESS-の最初の有効なイベントします定義)がリスナーにディスパッチされます。必ず参照されるクラスはクラスパス上にあり、有効なインスタンスへの表現が解決することを確認します。
1、イベントリスナとしてのみプロセス要素の子要素extensionelement声明。あなたは、単一のイベントリスナー・プロセスで定義することはできません。
2、および他の式は(例えば、ゲートウェイにおける)実行コンテキストdelegateExpressionないアクセスに使用される異なる表現です。彼らは、リスナーの実装を参照し、(豆と属性が存在しない)ビーンエンジン構成で、又は任意スプリングビーン春の使用における豆の流動特性に定義することができます。
リスナクラスの属性は、唯一のクラスのインスタンスを作成します3。実装はリスナーに依存していないことを確認してくださいまたは使用に複数のスレッド/コンテキストの安全からフィールドのメンバーを確認してください。
プロパティで不正イベントタイプのイベントを使用するか、または不正throwEvent値を使用する場合、図4は、展開プロセス定義に例外(実際にデプロイ失敗)をスローします。クラスまたは不正な値のdelegateExecutionが提供する場合は、このプロセスは、(場合や、最初の有効なイベントプロセス定義を開始したときに例外がスローされます(存在しないカテゴリを、何の言及や豆手数料はリスナー・インターフェースを実装していないではないがあります)リスナーに割り当てられます)。有効なインスタンスへの参照クラスパス上のクラス、および発現解決されることを確認してください。
これは実験的な特徴であります↩︎