Session Beansは、クライアントが必要に応じて呼び出す処理をまとめたものです。クライアントの特定のセッションに対応しており、セッション開始と同時に生成され、セッション終了時に消滅します。
Session Beansにも、2つの種類があります。
ひとつめは、"Stateless Session Beans"です。Stateless Session Beansは、インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞うEJBです。
ふたつめは、"Stateful Session Beans"です。こちらは内部状態を持っています。
ここでは、Stateful Session Beanについて解説しましょう。
本章では、Cartサンプルアプリケーションを作成します。ファイルの構成は次のとおりです。
最初はStateful Session Beansが公開するメソッドを定義しているインタフェースである"Cart.java"です。
iimport java.util.Collection; import javax.ejb.Remote; @Remote public interface Cart { public void addItem(String item); public Collection<String> getItems(); }
続いて、Stateless Session Beanの本体です。先ほど作成したインタフェースを実装しています。
import java.util.Collection; import java.util.List; import java.util.ArrayList; import javax.ejb.Stateful; @Stateful public class CartBean implements Cart { private ArrayList<String> list = new ArrayList<String>(); public void addItem(String item) { list.add(item); } public Collection<String> getItems() { return list; } }
Stateful Session Beanであることを示すために、@Statefulアノテーションを付加しています。
また、内部状態(ここではCartの中身)を管理するために、listフィールドを用意しています。
続いて、クライアントプログラムです。cartに「かに」「うに」「利尻昆布」といったString型のオブジェクトが管理され、最後にfor文を使ってcartに含まれているオブジェクトを表示させています。
import java.util.Collection; import javax.ejb.EJB; public class CartClient { @EJB static Cart cart; public static void main(String[] args) { cart.addItem("かに"); cart.addItem("うに"); cart.addItem("利尻昆布"); Collection<String> c = cart.getItems(); for (String item: c) { System.out.println(item); } } }