始める前に
『UserWorkArea 区画へのアクセス』トピックで説明されているように、UserWorkArea インターフェースがクライアントから参照できること、または、『ユーザー定義の作業域区画へのアクセス』トピックで説明されているように、ユーザー定義区画がクライアントから参照できることを確認します。次のステップでは、UserWorkArea 区画を図のように使用します。
ただし、ユーザー定義区画もまったく同様に使用できます。
このタスクについて
作業域を使用するビジネス・アプリケーションでは、一般にサーバー・オブジェクトが
作業域のプロパティーを取得し、それらを使用してローカルの作業を進めていきます。
手順
- アクティブな作業域の名前を取得して、呼び出し元のスレッドが作業域に関連付けられているかどうかを判別します。
アプリケーションは UserWorkArea インターフェースの getName メソッドを使用して、
現行の作業域の名前を取得します。 スレッドが作業域に関連付けられていない場合は、getName メソッドがヌルを戻します。 次のコード例では、作業域の名前は、その作業域が開始されたクラスの名前に対応しています。
public class SimpleSampleBeanImpl implements SessionBean {
...
public String [] test() {
// Get the work-area reference from JNDI.
...
// Retrieve the name of the work area. In this example,
// the name is used to identify the class in which the
// work area was begun.
String invoker = userWorkArea.getName();
...
}
}
- 作業域プロパティーのオーバーライド。 サーバー・オブジェクトは、独自のネストされた作業域を作成することにより、
クライアントの作業域のプロパティーをオーバーライドできます。詳しくは、『作業域のプロパティーのオーバーライド』の項を参照してください。
- get メソッドを使用して、作業域からプロパティーを取り出します。
この get メソッドは意図的に単純になっています。処理する宣言済みの例外はありません。 アクティブな作業域がない場合、または現行の作業域にそのようなプロパティーが設定されていない場合は、get メソッドはヌルを戻します。
重要: CORBA クライアントが構成済みのデータ型を設定してエンタープライズ Bean のインターフェースを呼び出すという
比較的珍しいシナリオでは、get メソッドが NotSerializableError を発生させることがあります。
次の例では、SimpleSampleBean によるサイト ID と優先順位プロパティーの取得について示しています。 一方のプロパティーはクライアントによって外側の作業域内に設定され、もう一方のプロパティーはサーバー側の Bean によって、ネストされた作業域内に設定されているということに注意してください。ネスティングは、プロパティーの取得に対して透過的です。
public class SimpleSampleBeanImpl implements SessionBean {
public String [] test() {
...
// Begin a nested work area.
userWorkArea.begin("SimpleSampleBean");
try {
userWorkArea.set("company",
SimpleSampleCompany.London_Development);
}
catch (NotOriginator e) {
}
SimpleSampleCompany company =
(SimpleSampleCompany) userWorkArea.get("company");
SimpleSamplePriority priority =
(SimpleSamplePriority) userWorkArea.get("priority");
...
}
}
- オプション: 作業域から見えるすべてのキーのリストを取り出します。
UserWorkArea インターフェースは、作業域から見える
すべてのキーのリストを取り出すための retrieveAllKeys メソッドを備えています。 このメソッドは、引数がなく、ストリングの配列を戻します。 retrieveAllKeys メソッドは、作業域がスレッドに関連付けられていない場合、ヌルを戻します。 プロパティーを含んでいない作業域が関連付けられている場合、このメソッドはサイズ 0 の配列を戻します。
- getMode メソッドを使用して、作業域プロパティーのモードを照会します。
UserWorkArea インターフェースは、特定のプロパティーのモードを判別するための getMode メソッドを備えています。 このメソッドは、プロパティーのキーを引数として指定し、モードを PropertyModeType オブジェクトとして戻します。 指定されたキーが作業域内に存在しない場合、このメソッドは PropertyModeType.normal を戻し、
エラーを発生させることなくプロパティーの設定と除去ができることを示します。
- オプション: 作業域プロパティーを削除します。
UserWorkArea インターフェースは、作業域の現行の有効範囲からプロパティーを
削除するための remove メソッドを備えています。 プロパティーが最初に現行の有効範囲で設定された場合は、その有効範囲を除去すると、そのプロパティーは削除されます。 プロパティーが、最初に外側の作業域で設定された場合は、その作業域を削除すると、
現行の有効範囲が完了するまでそのプロパティーは削除されます。 現行の作業域が完了すると、削除されたプロパティーが復元されます。
remove メソッドは、プロパティーのキーを引数として取ります。 標準モードまたは読み取り専用モードのプロパティーのみ、除去できます。固定プロパティーを除去しようとすると、PropertyFixed 例外が作成されます。他のプロセスで作成された作業域のプロパティーを除去しようとすると、
NotOriginator 例外が作成されます。
例
『作業域を使用するアプリケーションの開発』トピックに記載された、SimpleSample アプリケーション例のサーバー・サイドは、クライアントからのリモート呼び出しを受け入れます。クライアントが作業域を作成済みの場合は、サーバーは各リモート呼び出しを使って、
クライアントから作業域を取得します。 作業域は透過的に伝搬されます。
どのリモート・メソッドも、その引数リストに作業域は組み込みません。
サンプル・アプリケーションでは、サーバー・オブジェクトはデモンストレーションのためにだけ、
作業域インターフェースを使用しています。 例えば、SimpleSampleBean は、インポートされた作業域に、
意図的に直接書き込みを行おうとします。これにより、NotOriginator 例外が作成されます。同様に、この Bean は、読み取り専用の SimpleSampleCompany を意図的にマスクしようとします。
これにより、PropertyReadOnly 例外が発生します。 SimpleSampleBean はまた、SimpleSampleBackendBean
を呼び出す前に、作業域をネストし、優先順位プロパティーを正常にオーバーライドします。 実際のビジネス・アプリケーションでは、作業域のプロパティーを抽出し、
それらを使用してローカルの作業を進めていきます。 SimpleSampleBean は、要求がセールス環境から出るときに、
機能が拒否されましたというメッセージを書き込んで、これと同様の処理をしています。