何度も何度も、セッションBeanで静的変数を使用することは想定されていないことを読みました。それでは、このBeanのロガーを取得して、Beanメソッド全体で使用するにはどうすればよいでしょうか。
3 に答える
あなたは「ルール」を少し厳格に解釈していると思います。
サーブレット/セッション/Beanの状態を静的変数に格納しないでください。その参照は、そのタイプのすべてのインスタンス間で共有されます。
ただし、ロガー(通常、または保持すべきではない)は状態を保持します。クラス名に基づいてロガーに名前を付けたり分類したりする通常の方法に従う場合は、ロガーインスタンスへの静的参照を使用することは完全に問題ありません。
public class SomeTypeOfBean {
private static final Logger log = Logger.getLogger(SomeTypeOfBean.class);
//...
}
読み取り専用の非ブロッキング静的参照 (ロガーとは) は、(アプリケーション サーバーの裁量で) それらのいくつかのコピーを持っていても問題がない場合、通常は問題ありません。
そうは言っても、ロガーが静的変数になければならないということは何もありません。インスタンス変数に入れることができます(ロガーがシリアル化できない場合は一時的なものになります)。
EJB ルールについて理解する必要があることの 1 つは、EJB ルールが存在する理由と、アプリ サーバーが機能しなくなる原因を理解することが最も重要です (実際にアプリケーション サーバーに依存しない開発を行っている場合)。それを理解すれば、それらをどのように扱うかがわかります (そして、アプリ サーバーがクラスに対して何をすることが期待されているかを考えると、それらは理にかなっています)。それがドキュメントに書かれた恣意的なルールの集まりにすぎない場合、それらにとらわれる代わりに、それらをどのように扱うかを理解することができなくなります.
非静的メンバーにすることができます。