2

現在、私はEJB3.0 session beans自分のアプリケーションで使用しています。通常、私は使用してBeanを検索しjndi name、関連するメソッドを呼び出します。しかし最近、何Map度も検索するのではなく、これらの参照を保存するように提案されました。

毎回参照を避けるためにSession Bean参照を保存するのは良い習慣ですか? Mapそれとも危険ですか?アプリケーションで発生する可能性がある場合、どのような問題が発生する可能性がありますか?

それが良い習慣であれば、私は別の懸念があります。

参照を Map格納するクラスは、モジュール Asession beansの一部です。モジュール B1 ...Bnの一部です。そのため、参照を に保存するときにMap検索した後、元に戻すことができます。その間、 モジュール Bnは再デプロイされますが、A はそのまま残ります。そのため、マップから Bean を検索した後 (エントリが含まれているため)、それを使用してClassCast Exceptionスローされます。

その理由は何ですか?どうすれば回避できますか? JBOSS アプリケーション サーバー - jboss 5.1.0.GAを使用しています。

4

1 に答える 1

1

ステートレスおよびシングルトン セッション Bean ルックアップへの参照をキャッシュしても問題ありません。これは基本的@EJBに、フィールドで使用するときにアノテーションが行うことです。(ルックアップごとに個別の EJB 参照を返すステートフル セッション Bean では明らかに機能しません。)

アプリケーション サーバーについて言及せず、ClassCastException のスタック トレースを提供しませんでしたが、モジュールを再起動すると、アプリケーションの新しいインスタンス用の新しいクラス ローダーが作成される可能性が非常に高くなります。これは、キャッシュした EJB 参照が現在非互換。結果をキャッシュしなくても、同様の ClassCastException が発生すると推測していましたが、おそらくアプリケーション サーバーにはその回避策があります。EJB モジュールを再起動するときは、すべての呼び出し元モジュール (またはアプリケーション全体) を再起動するのがおそらく最善です。

于 2015-10-11T17:12:12.280 に答える