ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

10.1.1 Session Beanの形態

Session Beanは、クライアントとの対話処理を行うためのオブジェクトです。Session BeanにはSTATEFULとSTATELESSの2種類が存在します。
それぞれの特徴を以下に示します。

STATEFUL

クライアントと1対1に対応し、クライアントとの対話中にトランザクション状態やアプリケーション変数を保持します。クライアントの仕事の一部を、サーバ上に分散させるための機構です。
クライアントからは、あたかもクライアント上に存在するオブジェクトのようにアクセスできます。
EJBアプリケーションのインスタンスは、クライアントからのcreate要求により生成されますが、システム異常などが発生するとSTATEFUL Session Beanの無通信監視機能によって自動的に消滅します。STATEFUL Session Beanの無通信監視機能については、“10.5.3 STATEFUL Session Beanの無通信監視機能”を参照してください。

STATELESS

複数のクライアントから共有されるオブジェクトです。
クライアントn個に対してEJBアプリケーションのインスタンスはn個以下を設定できます。
クライアントとの対話中、トランザクション状態やアプリケーション変数を保持しません。そのため、対話中の状態は、クライアント側で管理してください。
ビジネスメソッドが複数のクライアントから呼び出された場合、クライアント要求数がEJBアプリケーション定義で設定されたインスタンス数を超えると、クライアントからの要求はシリアルにキューイングされます。
EJBアプリケーションのインスタンスは、処理スレッドの数だけ作成され再利用されます。
STATEFULに比べて、サーバ側の資源を小さくしたい場合に利用します。

STATEFUL Session

STATEFULは、STATELESSに比べて、EJBアプリケーションおよび、クライアントアプリケーションを容易に記述できるメリットがあります。



STATEFULでは、クライアントとEJBアプリケーションのインスタンスが1対1となります。
そのため、インスタンスを消去しないかぎり、クライアントとEJBアプリケーションの対話の状態を保持します。

ビジネスメソッドで使用する変数は、ビジネスメソッドを終了しても保証されます。
そのため、複数のメソッドにまたがる処理ができます。

また、EJBアプリケーションで使用するトランザクションに関しても、トランザクションの開始から終了までの間に、クライアントから複数のメソッド呼出しができます。



STATELESS Session

STATELESSは、STATEFULに比べて、メモリ消費量が少ないというメリットがあります。
STATELESSは、クライアント数をM個、EJBアプリケーションのインスタンス数をN個とすると、M>=Nにできます。
これにより、STATEFULに比べて、EJBアプリケーションのインスタンス数を少なくできます。



STATELESSでは、インスタンスは複数のクライアントから共用されます。
そのため、複数のビジネスメソッド間では、クライアントとEJBアプリケーションの対話の状態を保持しません。

ビジネスメソッドで使用される変数は、ビジネスメソッドを終了すると保証されません。
また、EJBアプリケーションで使用するトランザクションに関しても、トランザクションの開始と終了は、メソッド内に閉じていなくてはなりません。