作業域サービスは、 パターンを渡す複雑なデータ (保守能力を超えて急速に大きくなる場合があります) を処理するように設計されています。 作業域 は、Java Naming Directory Interface (JNDI) を検索できる任意の クライアントに対してアクセス可能なノートパッドです。 いったん作業域が設定されると、以降のメソッド呼び出し (リモート・リソ ースとローカル・リソースのいずれに対する呼び出しであっても) では、将来的な利用に備えてデータをこの作業域に入れておくことができます。
多数のメソッドが共通の情報を必要とする場合や、ある情報がコール・グラフのかなり下の方にあるメソッドでのみ必要な場合には、作業域を使用するとよいでしょう。 前者の場合は、渡される引数の数が多すぎて保守が難しいモデルを渡す、複雑なパラメーターが必要なくなります。 情報を作業域に入れ、それ以後は個々のメソッドで独自にその情報にアクセスすることにより、これらのパラメーターをメソッドからメソッドへ渡す必要がなくなるので、アプリケーションの機能が向上します。 後者の場合も、不必要なパラメーターの引き渡しがなくなります。また、コ ール・グラフで時々必要になるだけのこれらのパラメーターを、オブジェク ト・リクエスト・ブローカー (ORB) を介してマーシャルしたりマーシャル解 除したりするコストが削減されるので、パフォーマンスが向上します。
作業域を使用してパフォーマンスを最大化しようとする場合は、アクセス場所にかかわらず、JNDI から取得される UserWorkArea 区画をキャッシュに入れてください。 JNDI 内の情報を取得して、将来のために参照を保持することで、JNDI 内の 情報を検索する時間を短縮することができます。 JNDI ルックアップは時間がかかるので、場合によってはコストがかかります。
ユーザー定義の区画に対して、使用可能である追加のキャッシング・メカニ ズムは、構成プロパティー「属性のシリアライゼーションの延期」で定義さ れます。 このメカニズムは、シリアライゼーションおよびデシリアライゼーション呼び出しの数の最小化を試みます。 この構成属性の詳しい説明については、 作業域区画サービス を参照してください。
maxSendSize および maxReceiveSize 構成パラメーターは、作業域のパフォーマンスに影響を与える可能性があります。 これら 2 つの値を 0 (ゼロ) に設定すると、 作業域に送信可能なコンテキストのサイズのポリシングを有効にオフにします。 これにより、アプリケーションが使用するネストされた作業域の数によっては、 パフォーマンスが向上します。 作業域を 1 つしか使用しないアプリケーションでは、 パフォーマンスの向上はごくわずかな場合があります。 多くのネストされた作業域があるアプリケーションでは、 パフォーマンスが向上する場合があります。 ただし、ユーザーは、このポリシングをオフにすることにより、 極端に大量のデータがサーバーに送信される可能性があることに注意する必要があります。
1 回のメソッド呼び出しで 1 つのパラメーターを渡すことへの直接の代替機能として作業域を使用する場合は、パフォーマンスが低下します。 これは、メソッド呼び出し間で単にそのパラメーターを渡すだけの場合に比べて、多くのオーバーヘッドが必要になるからです。 このパフォーマンスの低下は、通常は、オブジェクト・サイズに関するパラメーターを渡す場合と同様の許容範囲内ですが、 このようなパフォーマンスの低下の問題が起こる可能性があることを十分考慮した上で、サービスを利用してください。 ほとんどの機能サービスでは、作業域を上手に使用することで、最良の結果が得られます。
作業域サービスは、リソース間で情報を渡すジョブを簡素化するツールであり、 場合によっては、その情報がコール・グラフ内でまれにしかアクセスされな い場合にパラメーターの引き渡しに関連したオーバーヘッドを削減することで、 パフォーマンスを改善することができます。 JNDI から取得したインスタンスをキャッシュに入れることは、 実行時に最高のパフォーマンスを挙げる上で重要です。