アクセス・インテント・サービス
アクセス・インテントは、アプリケーションの永続性を厳密に管理することを 可能にするアプリケーション・サーバー・ランタイム・サービスです。
アクセス・インテント・サービスは、 エンティティー Bean アクセスのパフォーマンスを最適化するために Enterprise JavaBeans (EJB) コンテナーとそのエージェントが使用する、 宣言されたアノテーションのセットを定義します。 これらのアノテーションは、アクセス・インテント・ポリシー と呼ばれるセットに編成されます。
アクセス・インテント・ポリシーには、EJB コンテナーとそのエージェントによるヒントと考えられるアノテーションのセットが含まれています。 ほとんどのアクセス・インテント・ポリシーは、特定のバックエンド・リソース・マネージャーにマップできる高水準の抽象化を表すヒントです。 パーシスタンスの詳細を実行する際に必要な並行性制御、接続、およびキャッシュ管理を保証するのは、EJB パーシスタンス機構の役割です。 EJB パーシスタンス・マネージャーは、 アクセス・インテントのヒントを使用することで、 それに割り当てられたタスクを実行する際に、パフォーマンスについてより適切な判断を行うことができます。 より少数のアクセス・インテントは、EJB コンテナーへのヒントであり、 EJB コレクションの管理に影響を与えます。
一般に、アプリケーションでは、Bean レベル のアクセス・インテントを構成します。 アクセス・インテント・ポリシーは、 アプリケーション・プロファイル の有効範囲内の Bean に適用することもできます。 したがって、 複数の対立するアクセス・インテント・ポリシーを持つ Bean を構成することができます。 アプリケーション・プロファイルの資料に、 ある要求の Bean に特定のアクセス・インテント・ポリシーを適用するアプリケーションを構成し、 次に異なる要求の同じ Bean に別のアクセス・インテント・ポリシーを適用する方法についての、より詳しい説明があります。
アクセス・インテント・ポリシーをメソッド・レベルで適用することは、 WebSphere® Application Server バージョン 6.0 では推奨されていません。 この方法でアクセス・インテントを構成する場合は、EJB モジュールの スコープ内のメソッドにポリシーを適用して、 そのポリシーが、メソッド上のすべての要求に対する、 デフォルトのアクセス・インテントになるようにします。
アクセス・インテントの設計に関する考慮事項

アクセス・インテント・ポリシーは、エンティティー Bean のあらゆるメソッドで構成できますが、 ポリシーの属性の中には、一定の条件下にあるランタイム環境によってのみ活用できるものがあります。 例えば、CMP エンティティー Bean で並行性およびアクセス・インテントが使用されるのは、接続をオープンし、所定のリソースからデータを読み取るために ejbLoad メソッドが駆動されるときのみです。 そのデータは、キャッシュされ、ejbStore メソッドの呼び出し中に正しい照会を駆動するために使用されます。 先読みヒントは、Bean に対してファインダーを実行しているときだけ使用されます。 コレクション増分およびリソース・マネージャー事前取り出し増分は、マルチ・オブジェクト・ファインダーでのみ使用されます。 ポリシーを使用しないメソッドについてのポリシーを構成しても、エラーにはなりません。 ポリシーがメソッドに正しく適用されている場合であっても、ポリシーの特定の属性のみが使用されます。 ただし、アプリケーション全体で不必要にポリシーを構成すると、 アプリケーションの設計が不明確になり、そのアプリケーションの保守が複雑になります。
アクセス・インテントと BMP エンティティー Bean
アクセス・インテントの宣言機能は、ユーザーに、CMP エンティティー Bean 開発者としての大きな力を与えてくれます。 製品が、アプリケーション内でパーシスタンス論理を明示的に管理することなく、パーシスタンスの詳細を管理する方法について、ヒントを提供することができます。 ただし、BMP エンティティー Bean を開発しなければならない場合があります。 BMP コンポーネントと CMP コンポーネントの間における唯一の意味のある違いは、 誰がパーシスタンス論理を提供するかということにあるため、 製品が CMP エンティティー Bean の代わりに行うように、BMP エンティティー Bean もアクセス・インテントのヒントを活用できる必要があります。 アクセス・インテント・サービスを使用する BMP エンティティー Bean は、 アプリケーションのプロファイル作成に参加します。 つまり、アクセス・インテント属性の値には要求と要求の間で異なるものを使用でき、 BMP エンティティー Bean はシームレスにそのパーシスタンス戦略を変更できるようになります。
アクセス・インテント・ポリシーは、BMP エンティティー Bean メソッドと CMP エンティティー Bean メソッドの両方に適用できます。 アクセス・インテントのヒントは、本来契約で保証されたものではないため、 BMP エンティティー Bean がそれらのヒントを活用する義務はありません。 BMP エンティティー Bean は、その特定の Bean にとって重要なアクセス・インテント属性のみを使用することが予期されます。
現行のアクセス・インテント・ポリシーは、特定の BMP エンティティー Bean の java:comp 名前空間にバインドされます。 そのポリシーは、 アクセス・インテント・ポリシーが検索されたメソッド呼び出しの期間にのみ適用されます。 一般的なシナリオでは、ejbLoad メソッドの呼び出し中にアクセス・タイプをキャッシュし、ejbStore メソッドの呼び出し中に適切なアクションが行われるようにします。
アクセス・インテントのベスト・プラクティス
EJB メソッドにアクセス・インテント・ポリシーを適用する場合は、次の問題を考慮してください。
- まず初めに、エンティティー用にデフォルトのアクセス・インテント・ポリシーを構成します。アプリケーションを作成して始動した後、アプリケーション・プロファイルまたはメソッド・レベルのアクセス・インテントを使用して、アプリケーションの所定のアクセス・パスを調整することができます。
- 異なるアクセス・タイプを同時に使用できない。同一トランザクション内でペシミスティック・ポリシーとオプティミスティック・ポリシーを使用しないようにしてください。ほとんどのデータベースでは、ペシミスティック・ポリシーおよびオプティミスティック・ポリシーは異なる分離レベルを使用します。 これにより、複数のデータベース接続が行われるため、 接続を共有することによって提供されるパフォーマンスの向上は望めません。
- wsPessimisticUpdate-NoCollision ポリシーを適用する際は、注意してください。このポリシーでは、データ保全性が保たれません。データベース・ロックが保持されないため、並行トランザクションは互いの更新を上書きすることができます。 このポリシーは、任意の時点に、パーシスタント・ストアを更新しようとするトランザクションが 1 つのみであることが確かな場合にのみ使用してください。
For further information on Java Persistence API (JPA) Access intent, see the topic on JPA Access intent.