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);
}
}
}