JSR220(EJBCore)3.2.2.ローカルクライアント

セッションビーンはローカルクライアントを持つかもしれません。
ローカルクライアントはローカルクライアントビューを提供しているセッションビーンと同じJVMに配置されたクライアントで、ビーンと堅く結びついています。
セッションビーンのローカルクライアントは、他のエンタープライズビーンやWebコンポーネントであるかもしれません。


ローカルクライアントビューを通してのエンタープライズビーンへのアクセスは、ローカルクライアントとローカルクライアントビューを提供するエンタープライズビーンの両者が同一のJVM上に配置されている必要があります。
ローカルクライアントビューはそれ故、リモートクライアントビューによって提供されるロケーション透過性は提供しません。


EJB3.0においては、ローカルクライアントはビーンのローカルビジネスインタフェースを通してセッションビーンにアクセスします。
EJB2.1とそれ以前のAPIで書かれたセッションビーン又はエンティティビーンコンポーネントに対しては、ローカルクライアントはビーンのローカルホームインタフェースとローカルコンポーネントインタフェースを介してアクセスします。
ローカルビジネスインタフェースを実装したコンテナオブジェクトはローカルJavaオブジェクトです。


互換性Note:EJB2.1&それ以前のもEJB3.0で使えるよ。


ローカルビジネスインタフェースのメソッドの引数と戻り値は参照渡しされます。
それ故、ローカルクライアントビューを提供するエンタープライズビーンは、引数及び戻り値として引渡されるどんなJavaオブジェクトも状態が呼び出し元及び呼び出し先に共有されうる可能性があることを想定(asuume)してコーディングされるべきです。


Beanプロバイダは、ローカルインタフェースを通してオブジェクトが引渡されることによる共有の可能性に留意すべきです。
とりわけ、Beanプロバイダはあるエンタープライズビーンの状態が他のビーンの状態としてアサインされていないか注意しなければなりません。
一般的に、ローカルインタフェース缶で引渡される参照はすぐに連鎖してコールされる外側では使うことができません。そして他のエンタープライズビーンの状態の一部として保存してはいけないのです。
Beanプロバイダはどのオブジェクトがローカルインタフェース間で引渡すかを注意深く
決定する必要があります。
この用心は特にトランザクションやセキュリティコンテキストが変化する場合において
当てはまります。