WebLogic エンタープライズ JavaBeans バージョン 3.0 プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

エンタープライズ JavaBeans 3.0 の単純なサンプル

以下の節では、新しいメタデータ アノテーション プログラミング モデルを使用する EJB の単純な Java サンプルについて説明します。

これらのサンプルを参照して EJB をプログラミングする方法については、このマニュアルの別の節で説明します。

 


単純なステートレス EJB のサンプル

次に、ServiceBean ステートレス セッション EJB の単純なビジネス インタフェースのコードを示します。

package examples;
/**
* Service ステートレス セッション EJB のビジネス インタフェース
*/
public interface Service {
  public void sayHelloFromServiceBean();
}

このコードは、Service ビジネス インタフェースに、1 つのメソッド sayHelloFromServiceBean() が含まれていることを示します。このメソッドは、パラメータを取らず、void を返します。

次に、上の Service インタフェースを実装する Bean ファイルのコードを示します。太字部分については、後ほど解説します。

package examples;
import static javax.ejb.TransactionAttributeType.*;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.interceptor.ExcludeDefaultInterceptors;
/**
* Service ビジネス インタフェースを実装する Bean ファイル。
* 以下の EJB 3.0 アノテーションを使用している。
* - @Stateless - EJB のタイプがステートレス セッションであることを指定する
* - @TransactionAttribute - EJB がトランザクション内で実行されることはな
* いことを指定する
* - @ExcludeDefaultInterceptors - このクラスでは、コンフィグレーション
* されているデフォルト インターセプタを呼び出さないことを指定する
*/
@Stateless
@TransactionAttribute(NEVER)
@ExcludeDefaultInterceptors
public class ServiceBean
implements Service
{
  public void sayHelloFromServiceBean() {
System.out.println("Hello From Service Bean!");
}
}

このサンプル コードで注目すべき主な点は以下のとおりです。

 


単純なステートフル EJB のサンプル

次に、AccountBean ステートフル セッション EJB の単純なビジネス インタフェースのコードを示します。

package examples;
/**
* Account ステートフル セッション EJB のビジネス インタフェース
*/
public interface Account {
  public void deposit(int amount);
public void withdraw(int amount);
public void sayHelloFromAccountBean();
}

このコードは、Account ビジネス インタフェースに 3 つのメソッド (depositwithdraw、および sayHelloFromAccountBean) が含まれていることを示します。

次に、上の Account インタフェースを実装する Bean ファイルのコードを示します。太字部分については、後ほど解説します。

package examples;
import static javax.ejb.TransactionAttributeType.*;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.Remote;
import javax.ejb.EJB;
import javax.annotation.PreDestroy;
import javax.interceptor.Interceptors;
import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.InvocationContext;
/**
* Account ビジネス インタフェースを実装する Bean ファイル。
* 以下の EJB アノテーションを使用している。
* - @Stateful - ステートフル セッション EJB であることを指定する
* - @TransactionAttribute - この EJB がトランザクション
* 内で実行されることはないことを指定する
* - @Remote - この EJB のリモート インタフェースを指定する
* - @EJB - ServiceBean ステートレス セッション EJB への
* 依存性を指定する
* - @Interceptors - この Bean クラスがインターセプタ クラスに関連付けられており、
* デフォルトでは、すべてのビジネス メソッドが、@AroundInvoke アノテーション
* が付けられているインターセプタ クラス内のメソッドを呼び出すことを指定する
* - @ExcludeClassInterceptors - Bean クラスに対して定義された
* インターセプタ メソッドを、このメソッドに対して実行しないこと
* を指定する
* - @PreDestroy - EJB コンテナが Bean を破棄しようとした
* ときに呼び出されるライフサイクル メソッドを指定する
*
*/
@Stateful
@TransactionAttribute(NEVER)
@Remote({examples.Account.class})
@Interceptors({examples.AuditInterceptor.class})
public class AccountBean
implements Account
{
  private int balance = 0;
  @EJB(beanName="ServiceBean")
private Service service;
  public void deposit(int amount) {
balance += amount;
System.out.println("deposited: "+amount+" balance: "+balance);
}
  public void withdraw(int amount) {
balance -= amount;
System.out.println("withdrew: "+amount+" balance: "+balance);
}
  @ExcludeClassInterceptors
public void sayHelloFromAccountBean() {
service.sayHelloFromServiceBean();
}
  @PreDestroy
public void preDestroy() {
System.out.println("Invoking method: preDestroy()");
}
}

このサンプル コードで注目すべき主な点は以下のとおりです。

 


インターセプタ クラスのサンプル

次に、インターセプタ クラスのサンプル コードを示します。この AuditInterceptor クラスは、上のサンプルで示した AccountBean ステートフル セッション Bean から @Interceptors({examples.AuditInterceptor.class}) アノテーションで参照しているインターセプタ クラスです。太字部分については、後ほど解説します。

package examples;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
/**
 * インターセプタ クラス。インターセプタ メソッドには @AroundInvoke アノテーションを
 * 付ける
*/
public class AuditInterceptor {
  public AuditInterceptor() {}
  @AroundInvoke
public Object audit(InvocationContext ic) throws Exception {
System.out.println("Invoking method: "+ic.getMethod());
return ic.proceed();
}
  @PostActivate
public void postActivate(InvocationContext ic) {
System.out.println("Invoking method: "+ic.getMethod());
}
  @PrePassivate
public void prePassivate(InvocationContext ic) {
System.out.println("Invoking method: "+ic.getMethod());
}
}

このサンプル コードで注目すべき主な点は以下のとおりです。

 


セッション Bean から 3.0 エンティティを呼び出すサンプル

セッション Bean からエンティティを呼び出すサンプルについては、配布キットに含まれている EJB 3.0 のサンプルを参照してください。WebLogic Server をインストールすると、次のディレクトリにサンプルがインストールされます。

WL_HOME/samples/server/examples/src/examples/ejb/ejb30

WL_HOME は、WebLogic Server のインストール ディレクトリ (たとえば /bea/wlserver_10.3) です。


ページの先頭       前  次