Stateless Session BeanとStateful Session Beanの大きな違いは、Stateless Session Beanがビジネスロジックを記述する状態(データ)を持たないビジネスオブジェクトであるのに対し、Stateful Session Beanはビジネスロジックを記述する状態(データ)を持つビジネスオブジェクトであることです。
EJBとは、Enterprise Java Beanの略です。
Sun Microsystems社が提供する仕様です。
EJBは、安全でスケーラブルな分散型アプリケーションの開発に役立つ。
また、サーバーに配置されるため、サーバーサイドのコンポーネントです。
JavaにおけるエンタプライズBeanの1つがセッションBeanであり、ビジネスロジックを格納する。
また、ローカル、リモートまたはWebサービスクライアントによってそれを呼び出すことが可能である。
全体として,セッションBeanは,ステートレス又はステートフル・セッションのいずれにもなり得る。
ステートレスセッションビーンとは
ステートレスセッションビーンは、ビジネスロジックを表現するビジネスオブジェクトです。
それはデータを含んでいません。
また、複数のメソッド呼び出しの間の変換状態をコンテナが保持することはない。
そのため、EJBアプリケーションを実行するには、JBoss、Glassfish、WebsphereなどのEJBコンテナが必要である。
ここでは、EJBコンテナがステートレスBeanオブジェクトをプールして、オンデマンドでリクエストに対応する。
しかし、一度にアクセスできるのは1クライアントのみです。
同時アクセスでは、EJBコンテナは各リクエストを異なるインスタンスにルーティングする。
また、ステートレスセッションビーンは、存在しない状態(doesn’t exist)または準備完了状態(ready state)のいずれかになる。
まず,EJBコンテナは,セッションBeanのプールを生成し,維持する。
依存関係を注入し、必要であれば@PostConstructを呼び出す。
次に、クライアントが実際のビジネスロジックを呼び出す。
次に,コンテナは,@PreDestoryメソッドがあれば,それを呼び出す。
最後に,ガベージコレクタがBeanを削除することができる。
ステートフルセッションビーンとは
ステートフルセッションビーンは、ステートレスセッションビーンと同様に、データを持たずにビジネスロジックを表現するビジネスオブジェクトであり、状態を保持しないのが特徴です。
しかし、ステートフルセッションビーンでは、複数のメソッド呼び出しの間でコンテナが会話状態を保持します。
すなわち,ステートフルセッションBeanは,トランザクション内とトランザクション間の両方で状態を保持する。
したがって,各状態性セッションBeanは,特定のクライアントと関連付けられる。
さらに,コンテナは,状態フルセッションビーンズのインスタンスプールを管理しながら,ビーンの状態を自動的に保存及び取得することが可能である。
全体として,ステートフルセッションBeanは,トランザクションが発生すると,その都度フィールドを更新する。
したがって,ステートフル・セッションは,データの一貫性を維持するのに役立つ。
ステートレスセッションビーンとステートフルセッションビーンの違い
定義
ステートレスセッションビーンとは、ビジネスロジックのみを表現するビジネスオブジェクトです。
これに対し、ステートフルセッションビーンは、状態を保持せずにステートレスセッションビーンと同様にビジネスロジックを表現するビジネスオブジェクトです。
州 / データ
ステートレス及びステートフル・セッションBeanの主な違いは,ステートレス・セッションBeanが状態又はデータを持たないのに対して,ステートフル・セッションBeanは状態又はデータを持つということである。
容器の巻き込み
さらに,ステートレス型セッションBeanとステートフル型セッションBeanのもう一つの違いは,コンテナの関与です。
ステートレスセッションBeanでは,コンテナは,複数のメソッド呼び出しの間の会話状態を保持しない。
一方,コンテナは,複数のメソッド呼び出しの間で会話状態を維持する。
注釈
ステートレス・セッションBeanのアノテーションは、@Stateless、@PostConstruct、@PreDestoryであり、ステートフル・セッションBeanのアノテーションは、@Stateless、@PostConstruct、@PreDestory、@PrePassivate、@PostActivateです。
結論
簡単に言うと、セッションBeanはJavaのエンタプライズBeanで、ステートレスまたはステートフルにすることができます。
ステートレスセッションビーンとステートフルセッションビーンの主な違いは、ステートレスセッションビーンはビジネスロジックを記述する状態(データ)を持たないビジネスオブジェクトであり、ステートフルセッションビーンはビジネスロジックを記述する状態(データ)を持つビジネスオブジェクトであることです。
簡単に言うと、ステートフル・セッションはステートレス・セッションBeanよりもデータの一貫性を維持するのに役立ちます。