ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server エンタープライズ JavaBeans バージョン 3.0 プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55529-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

3 エンタープライズ 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 のインストール ディレクトリ (たとえば /Oracle/Middleware/wlserver_10.3) です。