クライアントからEJBBean
を呼び出す場合は、まずJNDIルックアップを使用してEJBHome
オブジェクト参照を保持する必要があります。このコードは、EJBBean
で作業する必要があるたびに実行する必要があります。そのため、冗長で高価になります。EJBHomeFactoryパターンの実装に同期マップが必要ですか?
この問題を解決するには、オブジェクト参照をEJBHome
にキャッシュし、JNDIルックアップを繰り返さずにキャッシュから何度も再利用します。
これはEJBHomeFactory Pattern
(またはより一般的なサービスロケータパターン)です。
私が見た実装の大部分は、同期化されたMap
をキャッシュとして使用するか、Hashtable
を使用します。アプリケーションがサーバーにデプロイされた後にキャッシュが構築され、後でキャッシュに変更が加えられない場合(get()メソッドのみが実行されます)、実際にはMap
またはHashMap
が同期する必要がありますか?
私が知っているHashMap
少なくとも1つのスレッドがマップを変更する場合は安全ですが(このhereにはSOの投稿があります)、この場合スレッドは読み取りのみを実行します。
EJBHomeFactory Pattern
ではHashMap
を安全に使用できますか?