1

ファクトリ クラスにアクセスする必要があるステートレス セッション Bean があります。このファクトリ クラスは、SLSB で静的メンバーまたはインスタンス メンバーとして宣言するのが最善ですか? SLSB が再利用されるため、リクエストごとに 1 つのインスタンスではなく、Bean ごとに (インスタンス メンバー オプションを使用する場合) ファクトリのインスタンスが 1 つだけ作成されるというのは正しいでしょうか?

4

3 に答える 3

1

SLSBインスタンスはプールされるため、その存続期間中に潜在的に多くのリクエストを処理します。そのため、インスタンス変数はリクエストごとに再作成されません。

SLSBの「自然な」方法は、各インスタンスを独立させ、静的なものを使用せず、インスタンス間の同期を必要としないことです。したがって、可能であれば、SLSBインスタンスごとにファクトリインスタンスを作成します。

于 2009-10-13T07:24:44.350 に答える
1

SLBのインスタンスがリクエストごとに作成されないと想定しないでください。コンテナは、リクエストごとに1つ作成する権限の範囲内にあります。同様に、インスタンスを1つだけ持つことも許可されています(私は思います)。より一般的には、コンテナはそれらのプールを維持します。

SLSBのインスタンス化や初期化に比較的費用がかかる場合は、コンテナーが何を実行するかを正確に調査し、可能であれば、コンテナーが実行したいことを明示的に構成する必要があります。

そうすれば、インスタンスフィールドをSLSBクラスに保持することに問題はないはずです。

于 2009-10-13T07:27:49.260 に答える
0

SLSB がプールから再利用される限り、インスタンス変数は再作成されません。SLSB のライフサイクルはかなり単純です。インスタンスを作成し、それを n 回使用して n 回のリクエストに対応し、最終的に破棄します。これらのアクションはすべてコンテナによって実行されます。そのため、Bean の作成プロセス (私たちが制御) で、これらのインスタンス変数を初期化できます。ただし、副作用を避けるために、初期化後にこれらの変数の内容を変更しないでください。

必要に応じて静的インスタンスを使用できますが、同期の問題を手動で処理する必要があることに注意してください。さらに、あなたは地元の工場に拘束されています。

非常に洗練されたソリューションが、EJB 3.1 と @Singleton EJB によって提供されます。

于 2012-10-26T10:03:14.347 に答える