8

ステートフルセッションBeanが不動態化される場合、その状態はハードディスクに書き込まれ、Beanインスタンスは他の要求を処理するために解放されます(少なくともこれは私の理解です)。同じクライアントが再びアクティブになると、Beanインスタンスはハードディスクから状態を読み取り、状態を回復します。しかし、Beanインスタンスは、状態を維持するためにどのクライアントに対してどのファイルを読み取る必要があるかをどのように知るのでしょうか。

私はJ2EEを初めて使用するので、非常に素朴な疑問を投げかけている場合はご容赦ください。これを理解するために他のトピックを知る必要がある場合は、正しい方向に向けてください。

4

1 に答える 1

13

ステートフルセッションBean(SfSB)を、通常のJavaクラスのインスタンスに非常に近いものとして視覚化するのが最善です。SfSBのインスタンスを検索(または注入)すると、コンテナーがSfSBのインスタンスを作成し、インスタンスを返します。次に、他のJavaインスタンスと同じように、そのインスタンスを操作します。

つまり、インスタンスをセッションに保存したり、ディスクにシリアル化したりすることができます。

詳細は、使用しているインスタンスが実際には実際の基盤となるSfSBインスタンスのプロキシであるということです。実際のSfSB自体ではありません。

ローカルプロキシでBeanを呼び出す場合、そのBeanをメモリに明示するのはコンテナジョブです。Beanのパッシベーションとアクティブ化は、バックグラウンドで実行されます(ただし、Beanのライフサイクルを通じてプロセスを利用することはできます)。

コンテナがパッシベーションされたSfSBを見つけるために必要な情報はすべて、使用しているプロキシに保存されますが、これは不透明です。あなたはそれについて心配する必要はありません。

したがって、一般的なWebベースのシナリオでは、ライフサイクルは、Beanインスタンスを取得し、それをWebセッションに格納してから、通常のように使用することです。コンテナが、スペースなどを確保するためにBeanを不動態化する必要があると判断した場合、自動的に不動態化されます。ユーザーが戻ると、アプリはWebセッションからインスタンスをプルし、呼び出しを行います。その時点で、Beanが不動態化されている場合、コンテナは自動的にBeanをアクティブ化します。このメカニズム全体はコンテナに依存しますが、透過的です。覚えておくべき重要なことは、他のJavaオブジェクトと同じように、コンテナーから取得したSfSBに固執する必要があるということです。

最後の注意点は、SfSBのパッシベーションを長時間許可すると、コンテナによって自動的に削除されることです。

于 2011-11-19T07:19:42.057 に答える