第7章 コンテキスト


この章では プロセス変数 について説明します。プロセス変数は、プロセスインスタンス関連の情報を保持するキーと値のペアです。
注記
コンテキスト をデータベースに保存できるようにするために、いくつかの小さな制限が適用されます。

7.1. プロセス変数へのアクセス

org.jbpm.context.exe.ContextInstance は、プロセス変数の中心的なインターフェイスとして機能します。次の方法で、プロセスインスタンスから ContextInstance を取得します。
ProcessInstance processInstance = ...;
ContextInstance contextInstance = 
	(ContextInstance) processInstance.getInstance(ContextInstance.class);
Copy to Clipboard Toggle word wrap
基本的な操作は次のとおりです。
void ContextInstance.setVariable(String variableName, Object value);
void ContextInstance.setVariable(
	String variableName, Object value, Token token);

Object ContextInstance.getVariable(String variableName);
Object ContextInstance.getVariable(String variableName, Token token);
Copy to Clipboard Toggle word wrap
変数名は java.lang.String です。デフォルトでは、Business Process Manager は次の値の型をサポートしています。(Hibernate で永続化できる他の型もサポートしています。)
java.lang.Stringjava.lang.Boolean
java.lang.Characterjava.lang.Float
java.lang.Doublejava.lang.Long
java.lang.Bytejava.lang.Integer
java.util.Datebyte[]
java.io.Serializable 
注記
型指定のない null 値 も永続的に格納できます。
警告
プロセス変数に他の型が格納されている場合は、プロセスインスタンスを保存しないでください。例外エラーが発生します。

7.2. 変数の寿命

プロセスアーカイブで変数を宣言する必要はありません。ランタイム時に、任意の Java オブジェクトを変数に格納します。変数が存在しない場合は、単純な java.util.Map と同じ方法で作成されます。また、変数は削除することもできます。
ContextInstance.deleteVariable(String variableName);
ContextInstance.deleteVariable(String variableName, Token token);
Copy to Clipboard Toggle word wrap
型は自動的に変更できます。これは、異なる型の値の変数を型で上書きできることを意味します。単純な列の更新よりも多くのデータベースとの通信が発生するため、型の変更の数は、常に制限することが重要です。

7.3. 可変永続性

変数はプロセスインスタンスの一部です。プロセスインスタンスをデータベースに保存すると、データベースがプロセスインスタンスと同期されます。(これにより、変数が作成、更新、および削除されます。) 詳細は、4章 永続性 を参照してください。

7.4. 可変スコープ

各実行パス (トークン とも呼ばれます) には、独自のプロセス変数のセットがあります。変数は常に実行パスで要求されます。プロセスインスタンスには、これらのパスのツリーがあります。変数が要求されたときにパスが指定されていない場合、ルートトークン がデフォルトで使用されます。
変数の検索は再帰的に行われます。検索は、特定の実行パスの親で実行されます。(これは、プログラミング言語で変数のスコープを設定する方法に似ています。)
存在しない変数が実行パスに設定されると、その変数は ルートトークン に作成されます。(そのため、各変数にはデフォルトでプロセススコープがあります。) 変数トークンを "ローカル" にするには、次の例に従って明示的に作成します。
ContextInstance.createVariable(String name, Object value, Token token);
Copy to Clipboard Toggle word wrap

7.4.1. 変数のオーバーロード

変数のオーバーロード とは、各実行パスが同じ名前の変数の独自のコピーを持つことができることを意味します。これらのコピーはすべて別々に扱われ、異なる型を取ることができます。変数のオーバーロードは、同じ遷移で複数の同時実行パスを起動する場合に有用なことがあります。これらのパスを区別するのは、それぞれの変数のセットだけであるからです。

7.4.2. 変数のオーバーライド

変数のオーバーライド とは、ネストされた実行パス 内の変数が、よりグローバルな実行パス内の変数をオーバーライドすることを意味します。一般に、"ネストされた実行パス" は同時実行に関連しています。フォークとジョインの間の実行パスは、フォークに到達した (ネストされた) 実行パスの子です。たとえば、プロセスインスタンススコープ内の contact という名前の変数を、ネストされた実行パス shipping および billing 内のこの変数でオーバーライドできます。

7.4.3. タスクインスタンス変数のスコープ

タスクインスタンス変数については、「 タスクインスタンス変数 」 を参照してください。

7.5. 一時変数

プロセスインスタンスがデータベースに永続化されると、通常の変数も永続化されます。しかし、変数をデータベースに格納せずに委譲クラスで使用する必要がある場合もあります。これは、一時変数 を使用して実現できます。
注記
一時変数の寿命は、ProcessInstance Java オブジェクトの寿命と同じです。
注記
その性質上、一時変数は実行パスとは関係ありません。そのため、プロセスインスタンスオブジェクトには、それらのマップが 1 つしかありません。
一時変数には、コンテキストインスタンス内の独自のメソッドセットを介してアクセスできます。processdefinition.xml ファイルで宣言する必要はありません。
Object ContextInstance.getTransientVariable(String name);
void ContextInstance.setTransientVariable(String name, Object value);
Copy to Clipboard Toggle word wrap
この章では、プロセス変数について詳しく説明しました。これで、このトピックの理解に自信を持てるはずです。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat