Powered by SmartDoc

Stateful Session Bean

Stateful Session Bean

Session Beansは、クライアントが必要に応じて呼び出す処理をまとめたものです。クライアントの特定のセッションに対応しており、セッション開始と同時に生成され、セッション終了時に消滅します。

Session Beansにも、2つの種類があります。

ひとつめは、"Stateless Session Beans"です。Stateless Session Beansは、インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞うEJBです。

ふたつめは、"Stateful Session Beans"です。こちらは内部状態を持っています。

ここでは、Stateful Session Beanについて解説しましょう。

サンプルアプリケーション

本章では、Cartサンプルアプリケーションを作成します。ファイルの構成は次のとおりです。

インタフェース

最初はStateful Session Beansが公開するメソッドを定義しているインタフェースである"Cart.java"です。

Cart.java
iimport java.util.Collection;
import javax.ejb.Remote;

@Remote
public interface Cart {
	public void addItem(String item);
	public Collection<String> getItems();
}

Stateful Session Bean の作成

続いて、Stateless Session Beanの本体です。先ほど作成したインタフェースを実装しています。

CartBean.java
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に含まれているオブジェクトを表示させています。

CartClient.java
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);
		}
	}
}