ステートフルセッション bean は、メソッド呼び出し間のステートを維持します。したがって、クライアントは、変数やオブジェクトインスタンスがメソッド呼び出し間で確実に継続されるという前提で一連のメソッドを呼び出すことができます。
ステートフルセッション bean のホームインターフェイスは、次の例に示すように、1 つ以上の create メソッドを定義します。
package flashgateway.samples.ejb;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import java.rmi.RemoteException;
public interface SampleStatefulEjbHome
extends EJBHome {
public SampleStatefulEjb create()
throws CreateException, RemoteException;
public SampleStatefulEjb create(String initialMessage)
throws CreateException, RemoteException;
}
ステートフルセッション bean のコンポーネントインターフェイスは、クライアントから呼び出されるビジネスメソッドを定義します。リモートコンポーネントインターフェイスで定義されるメソッドの場合は、常に RemoteException を返す必要があり、また、すべてのコンポーネントインターフェイスのメソッドが、bean 実装内の対応するビジネスメソッドから返された例外を返す必要があります。
次のコードは、ステートフルセッション bean のリモートコンポーネントインターフェイスを示しています。
package flashgateway.samples.ejb;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
/**
* SampleStatefulEjb は、カスタムの計算に使用できるリソースで、
* 前に実行した計算を記憶できます。
*/
public interface SampleStatefulEjb
extends EJBObject {
public String getMessage()
throws RemoteException;
public int getBiggerInt(int input)
throws RemoteException;
public String getBiggerString(String input)
throws RemoteException;
}
次のコードは、ステートフルセッション bean の bean 実装を示しています。
package flashgateway.samples.ejb;
import javax.ejb.EJBContext;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import java.rmi.RemoteException;
/**
* サンプルのステートフル EJB 実装です。
*/
public class SampleStatefulEjbBean implements SessionBean {
private String message;
private int lastCalculation;
private int count = 0;
transient EJBContext context;
public void ejbCreate() {
message = "ステートフル EJB からこんにちは";
}
public void ejbCreate(String initialMessage) {
message = initialMessage;
}
public int getBiggerInt(int input) {
return input + 1;
}
public String getBiggerString(String input) {
count++;
message = "ハロー " + input;
return getMessage();
}
public String getMessage() {
return message + " (count=" + count + ")";
}
public void ejbRemove() throws RemoteException { }
public void ejbActivate() throws RemoteException { }
public void ejbPassivate() throws RemoteException { }
public void setSessionContext(SessionContext context) {
context = context;
}
public SessionContext getSessionContext() {
return (SessionContext) context;
}
}
次のサンプルは、ステートフルセッション bean の基本的なデプロイメントディスクリプタの要素を示しています。
...
<session>
<display-name>Flash Sample Stateful Session EJB</display-name>
<ejb-name>FlashSampleStatefulEJB</ejb-name>
<home>flashgateway.samples.ejb.SampleStatefulEjbHome</home>
<remote>flashgateway.samples.ejb.SampleStatefulEjb</remote>
<ejb-class>flashgateway.samples.ejb.SampleStatefulEjbBean
</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Bean</transaction-type>
</session>
...
次のサンプルは、ステートフルセッション bean の JRun EJB デプロイメントディスクリプタを示しています。
...
<session>
<ejb-name>FlashSampleStatefulEJB</ejb-name>
<jndi-name>FlashSampleStatefulEJB</jndi-name>
<cluster-home>False</cluster-home>
<cluster-object>False</cluster-object>
<timeout>900</timeout>
</session>
...
上記のステートレスセッション bean のサンプルコードは、samples JRun サーバの Flash Gateway アプリケーションにあります。クライアントを表示するには、Flash MX を使用して <JRun のルートディレクトリ>/servers/samples/flashsamples-ear/webapp/movies/EjbExample.fla を開きます。