Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この章では、EJB 3.0セッションBeanを使用するために構成する必要のある様々なオプションについて説明します。
表5-1に、これらのオプションをリストし、基本オプション(ほとんどのアプリケーションに適用可能)であるか拡張オプション(より特殊なアプリケーションに適用可能)であるかを示します。また、ステートレス・セッションBeanに適用可能なオプションとステートフル・セッションBeanに適用可能なオプションも示します。
詳細は、次を参照してください。
オプション | ステートレス | ステートフル | タイプ |
---|---|---|---|
|
|
拡張 |
|
|
|
拡張 |
|
|
|
拡張 |
|
|
|
基本 |
|
|
|
拡張 |
|
|
|
拡張 |
|
|
|
基本 |
|
「EJB 3.0セッションBeanのインターセプタ・クラスのライフ・サイクル・コールバック・インターセプタ・メソッドの構成」 |
|
|
基本 |
|
|
拡張 |
|
|
|
拡張 |
|
|
|
拡張 |
|
|
|
拡張 |
ステートフル・セッションBeanの非アクティブ化は、server.xml
ファイルを使用して有効および無効にできます(「デプロイXMLの使用方法」を参照)。
次のいずれかの理由で非アクティブ化を無効にすることを選択できます。
詳細は、次を参照してください。
EJB 3.0ステートフル・セッションBeanでは、EJB 2.1ステートフル・セッションBeanと同様に、server.xml
ファイルで非アクティブ化を構成します(「デプロイXMLの使用方法」を参照)。
OC4JがEJB 3.0ステートフル・セッションBeanを非アクティブ化する条件は、OC4J固有のアノテーション(「アノテーションの使用方法」を参照)またはorion-ejb-jar.xml
ファイル(「デプロイXMLの使用方法」を参照)を使用して指定できます。
orion-ejb-jar.xml
ファイルの構成は、OC4J固有のアノテーションを使用して設定された対応する構成をオーバーライドします。
詳細は、次を参照してください。
EJB 3.0ステートフル・セッションBeanに対応するOC4J固有のデプロイ・オプションは、OC4J固有の@StatefulDeployment
アノテーションを使用して指定できます。例5-1に、@StatefulDeployment
アノテーションの次の属性を使用してEJB 3.0ステートレス・セッションBeanの非アクティブ化基準を構成する方法を示します。
これらの@StatefulDeployment
の属性の詳細は、表A-1を参照してください。@StatefulDeployment
アノテーションの詳細は、「EJB 3.0セッションBeanのOC4J固有のデプロイ・オプションの構成」を参照してください。
import javax.ejb.Stateless;
import oracle.j2ee.ejb.StatelessDeployment;
@Stateless
@StatefulDeployment(
idletime=100,
memoryThroshold=90,
maxInstances=10,
maxInstancesThreshold=80,
passivateCount=3,
resourceCheckInterval=90
)
public class HelloWorldBean implements HelloWorld {
public void sayHello(String name) {
System.out.println("Hello "+name +" from first EJB3.0");
}
}
EJB 3.0ステートフル・セッションBeanでは、EJB 2.1ステートフル・セッションBeanと同様に、orion-ejb-jar.xml
ファイルで非アクティブ化基準を構成します(「デプロイXMLの使用方法」を参照)。
非アクティブ化時にOC4JがEJB 3.0ステートフル・セッションBeanをシリアライズするディレクトリおよびファイル名は、OC4J固有のアノテーション(「アノテーションの使用方法」を参照)またはorion-ejb-jar.xml
ファイル(「デプロイXMLの使用方法」を参照)を使用して指定できます。
詳細は、次を参照してください。
EJB 3.0ステートフル・セッションBeanに対応するOC4J固有のデプロイ・オプションは、OC4J固有の@StatefulDeployment
アノテーションを使用して指定できます。例5-1に、@StatefulDeployment
アノテーションのpersistenceFileName属性を使用してEJB 3.0ステートレス・セッションBeanの非アクティブ化の場所を構成する方法を示します。
この@StatefulDeployment
の属性の詳細は、表A-1を参照してください。@StatefulDeployment
アノテーションの詳細は、「EJB 3.0セッションBeanのOC4J固有のデプロイ・オプションの構成」を参照してください。
import javax.ejb.Stateless;
import oracle.j2ee.ejb.StatelessDeployment;
@Stateless
@StatefulDeployment(
persistenceFileNazme="C:¥sfsb¥sfsb.persistence",
)
public class HelloWorldBean implements HelloWorld {
public void sayHello(String name) {
System.out.println("Hello "+name +" from first EJB3.0");
}
}
EJB 3.0ステートフル・セッションBeanでは、EJB 2.1ステートフル・セッションBeanと同様に、orion-ejb-jar.xml
ファイルで非アクティブ化の場所を構成します(「デプロイXMLの使用方法」を参照)。
EJB 3.0セッションBeanクラス・メソッドを次のライフ・サイクル・イベントのコールバック・インターセプタ・メソッドとして指定できます(「アノテーションの使用方法」を参照)。
セッションBeanクラスのライフ・サイクル・コールバック・メソッドは、次のシグネチャを持つ必要があります。
void <METHOD>()
EJB 3.0セッションBeanに関連付けるインターセプタ・クラスで1つ以上のライフ・サイクル・コールバック・メソッドを指定することもできます(「EJB 3.0セッションBeanのインターセプタ・クラスのライフ・サイクル・コールバック・インターセプタ・メソッドの構成」を参照)。
詳細は、次を参照してください。
次のいずれかのアノテーションを使用して、EJB 3.0セッションBeanクラス・メソッドをライフ・サイクル・コールバック・メソッドとして指定できます。
例5-3に、@PostConstruct
アノテーションを使用してEJB 3.0ステートフル・セッションBeanのクラス・メソッドinitialize
をライフ・サイクル・コールバック・メソッドとして指定する方法を示します。
@Stateful
public class CartBean implements Cart {
private ArrayList items;
@PostConstruct
public void initialize() {
items = new ArrayList();
}
...
}
EJB 3.0セッションBeanのインターセプタ・クラスのインターセプタ・メソッドをライフ・サイクル・コールバック・インターセプタ・メソッドとして指定できます。
インターセプタ・クラスでライフ・サイクル・コールバック・インターセプタ・メソッドを構成するには、次のようにします。
これは、任意のPOJOクラスにすることができます。
Beanのインターセプタ・クラスに定義するコールバック・メソッドには、次のシグネチャを割り当てます。
Object <METHOD>(InvocationContext)
1つのライフ・サイクル・イベントは、1つのコールバック・インターセプタ・メソッドにのみ関連付けることができますが、1つのライフ・サイクル・コールバック・インターセプタ・メソッドは、複数のコールバック・イベントに割り込むために使用できます。たとえば、@PostConstruct
と@PreDestroy
は、インターセプタ・クラス内で1回のみ出現可能ですが、@PostConstruct
と@PreDestroy
の両方を同じコールバック・インターセプタ・メソッドに関連付けることができます。
詳細は、次を参照してください。
次のいずれかのアノテーションを使用して、インターセプタ・クラス・メソッドをEJB 3.0セッションBeanのライフ・サイクル・コールバック・メソッドとして指定できます。
例5-4に、ステートフル・セッションBeanのインターセプタ・クラスを示します。この例では、@PrePassivate
アノテーションを使用して、メソッドmyPrePassivateInterceptorMethod
をpre-passivateライフ・サイクル・イベントのライフ・サイクル・コールバック・インターセプタ・メソッドとして指定しています。また、@PostConstruct
および@PostActivate
アノテーションを使用して、メソッドmyPostConstructInterceptorMethod
をpost-constructとpost-activate両方のライフ・サイクル・イベントのライフ・サイクル・コールバック・インターセプタ・メソッドとして指定しています。OC4Jは、適切なライフ・サイクル・イベントが発生した場合にのみ、対応するライフ・サイクル・メソッドを起動します。OC4Jは、セッションBeanのビジネス・メソッドが起動されるたびに、ライフ・サイクル・インターセプタ・メソッド以外のすべてのインターセプタ・メソッド(myInterceptorMethod
など)を起動します(「EJB 3.0セッションBeanのインターセプタ・クラスの構成」を参照)。
public class MyStatefulSessionBeanInterceptor {
...
protected void myInterceptorMethod (InvocationContext ctx) {
...
ctx.proceed();
...
}
@PostConstruct
@PostActivate
protected void myPostConstructInterceptorMethod (InvocationContext ctx) {
...
ctx.proceed();
...
}
@PrePassivate
protected void myPrePassivateInterceptorMethod (InvocationContext ctx) {
...
ctx.proceed();
...
}
}
1つの非ビジネス・メソッドをステートレスまたはステートフル・セッションBeanのインターセプタ・メソッドとして指定できます。クライアントがセッションBeanのビジネス・メソッドを起動するたびに、OC4Jは起動をインターセプトし、インターセプタ・メソッドを起動します。クライアント起動は、インターセプタ・メソッドがInvocationContext.proceed()
を返す場合にのみ続行されます。
インターセプタ・メソッドには次のシグネチャがあります。
Object <METHOD>(InvocationContext) throws Exception
インターセプタ・メソッドには、public、private、protectedまたはpackageレベルのアクセスを割り当てることができますが、finalまたはstaticとして宣言することはできません。
このメソッドは、EJB 3.0セッションBeanクラスに指定するか(「アノテーションの使用方法」を参照)、EJB 3.0セッションBeanに関連付けるインターセプタ・クラスに指定できます(「EJB 3.0セッションBeanのインターセプタ・クラスのAroundInvokeインターセプタ・メソッドの構成」を参照)。
詳細は、「EJB 3.0インターセプタについて」を参照してください。
例5-5に、@AroundInvoke
アノテーションを使用してセッションBeanクラスのメソッドをインターセプタ・メソッドとして指定する方法を示します。クライアントがこのステートレス・セッションBeanのビジネス・メソッドを起動するたびに、OC4Jは起動をインターセプトし、インターセプタ・メソッドmyInterceptor
を起動します。クライアント起動は、インターセプタ・メソッドがInvocationContext.proceed()
を返す場合にのみ続行されます。
@Stateless
public class HelloWorldBean implements HelloWorld {
public void sayHello() {
System.out.println("Hello!");
}
@AroundInvoke
protected Object myInterceptor(InvocationContext ctx) throws Exception {
Principal p = ctx.getEJBContext().getCallerPrincipal;
if (!userIsValid(p)) {
throw new SecurityException(
"Caller: '" + p.getName() +
"' does not have permissions for method " + ctx.getMethod()
);
}
return ctx.proceed();
}
}
1つの非ビジネス・メソッドをステートレスまたはステートフル・セッションBeanのインターセプタ・メソッドとして指定できます。クライアントがセッションBeanのビジネス・メソッドを起動するたびに、OC4Jは起動をインターセプトし、インターセプタ・メソッドを起動します。クライアント起動は、インターセプタ・メソッドがInvocationContext.proceed()
を返す場合にのみ続行されます。
このメソッドは、EJB 3.0セッションBeanに関連付けるインターセプタ・クラスに指定するか、EJB 3.0セッションBeanクラスそれ自体に指定できます(「EJB 3.0セッションBeanのAroundInvokeインターセプタ・メソッドの構成」を参照)。
インターセプタ・クラスでインターセプタ・メソッドを構成するには、次のようにします。
これは、任意のPOJOクラスにすることができます。
インターセプタ・メソッドには次のシグネチャがあります。
Object <METHOD>(InvocationContext) throws Exception
インターセプタ・メソッドには、public、private、protectedまたはpackageレベルのアクセスを割り当てることができますが、finalまたはstaticとして宣言することはできません。
詳細は、「EJB 3.0インターセプタについて」を参照してください。
例5-6に、@AroundInvoke
アノテーションを使用してインターセプタ・クラス・メソッドのmyInterceptor
をEJB 3.0セッションBeanのインターセプタ・メソッドとして指定する方法を示します。このインターセプタ・クラスをセッションBeanに関連付けると(「EJB 3.0セッションBeanのインターセプタ・クラスの構成」を参照)、セッションBeanのビジネス・メソッドが起動するたびに、OC4Jは起動をインターセプトし、myInterceptor
メソッドを起動します。クライアント起動は、このメソッドがInvocationContext.proceed()
を返す場合にのみ続行されます。
public class MyInterceptor {
...
@AroundInvoke
protected Object myInterceptor(InvocationContext ctx) throws Exception {
Principal p = ctx.getEJBContext().getCallerPrincipal;
if (!userIsValid(p)) {
throw new SecurityException(
"Caller: '" + p.getName() +
"' does not have permissions for method " + ctx.getMethod()
);
}
return ctx.proceed();
}
@PreDestroy
public void myPreDestroyMethod (InvocationContext ctx) {
...
ctx.proceed();
...
}
}
インターセプタ・クラスは、Beanクラスそれ自体とは異なる1つのクラスであり、そのメソッドはBeanのビジネス・メソッドの起動およびライフ・サイクル・イベントの発生に応じて起動されます。Beanクラスは、任意の数のインターセプタ・クラスに関連付けることができます。
インターセプタ・クラスは、EJB 3.0ステートレスまたはステートフル・セッションBeanに関連付けることができます。
インターセプタ・クラスを使用してEJB 3.0セッションBeanを構成するには、次のようにします。
これは、任意のPOJOクラスにすることができます。
インターセプタ・メソッドには次のシグネチャがあります。
Object <METHOD>(InvocationContext) throws Exception
インターセプタ・メソッドには、public、private、protectedまたはpackageレベルのアクセスを割り当てることができますが、finalまたはstaticとして宣言することはできません。
インターセプタ・メソッドには、ライフ・サイクル・コールバックとして(「EJB 3.0セッションBeanのインターセプタ・クラスのライフ・サイクル・コールバック・インターセプタ・メソッドの構成」を参照)、またはAroundInvoke
メソッドとして
(「EJB 3.0セッションBeanのインターセプタ・クラスのAroundInvokeインターセプタ・メソッドの構成」を参照)アノテーションを付けることができます。
詳細は、「EJB 3.0インターセプタについて」を参照してください。
この項の内容は次のとおりです。
例5-7に、EJB 3.0セッションBeanのインターセプタ・クラスにAroundInvoke
インターセプタ・メソッドおよびライフ・サイクル・コールバック・インターセプタ・メソッドを指定する方法を示します。このインターセプタ・クラスをセッションBeanに関連付けると(例5-8を参照)、セッションBeanのビジネス・メソッドが起動するたびに、OC4JはAroundInvoke
メソッドのmyInterceptor
を起動します。適切なライフ・サイクル・イベントが発生すると、OC4JはmyPreDestroyMethod
などの対応するライフ・サイクル・コールバック・インターセプタ・メソッドを起動します。
public class MyInterceptor {
...
@AroundInvoke
protected Object myInterceptor(InvocationContext ctx) throws Exception {
Principal p = ctx.getEJBContext().getCallerPrincipal;
if (!userIsValid(p)) {
throw new SecurityException(
"Caller: '" + p.getName() +
"' does not have permissions for method " + ctx.getMethod()
);
}
return ctx.proceed();
}
@PreDestroy
public void myPreDestroyMethod (InvocationContext ctx) {
...
ctx.proceed();
...
}
}
インターセプタ・クラスは、@Interceptors
アノテーションを使用してEJB 3.0セッションBeanに関連付けることができます。例5-8に、例5-7のインターセプタ・クラスをEJB 3.0セッションBeanクラスに関連付ける方法を示します。
@PostConstruct
のライフ・サイクル・メソッドは、EJB 3.0セッションBeanクラスそれ自体のメソッドですが(「EJB 3.0セッションBeanのライフ・サイクル・コールバック・インターセプタ・メソッドの構成」を参照)、@PreDestroy
のライフ・サイクル・メソッドは、このセッションBeanに関連付けられたインターセプタ・クラスのライフ・サイクル・コールバック・インターセプタ・メソッドです(「EJB 3.0セッションBeanのインターセプタ・クラスのライフ・サイクル・コールバック・インターセプタ・メソッドの構成」を参照)。
@Stateful
@Interceptors(MyInterceptor.class)
public class CartBean implements Cart {
private ArrayList items;
@PostConstruct
public void initialize() {
items = new ArrayList();
}
...
}
例5-9に示すように、@StatelessDeployment
または@StatefulDeployment
の属性interceptorTypeをsingleton
に設定することで、シングルトン・インターセプタ・クラスを使用するようOC4Jを構成できます。このセッションBeanのすべてのインスタンスは、MyInterceptor
の同じインスタンスを共有します。MyInterceptor
クラスは、ステートレスである必要があります。
この属性の詳細は、表A-1を参照してください。シングルトン・インターセプタの詳細は、「シングルトン・インターセプタ」を参照してください。
@Stateful
@StatefulDeployment(interceptorType="singleton")
@Interceptors(MyInterceptor.class)
public class CartBean implements Cart {
private ArrayList items;
@PostConstruct
public void initialize() {
items = new ArrayList();
}
...
}
EJB 3.0セッションBeanのOC4J固有のデプロイ・オプションは、OC4J固有のアノテーション(「アノテーションの使用方法」を参照)またはorion-ejb-jar.xml
ファイル(「デプロイXMLの使用方法」を参照)を使用して構成できます。
orion-ejb-jar.xml
ファイルの構成は、OC4J固有のアノテーションを使用して設定された対応する構成をオーバーライドします。
EJB 3.0セッションBeanのOC4J固有のデプロイ・オプションは、次のOC4J固有のアノテーションを使用して指定できます。
例5-10に、@StatelessDeployment
アノテーションを使用してEJB 3.0ステートレス・セッションBeanのOC4J固有のデプロイ・オプションを構成する方法を示します。
@StatelessDeployment
の属性の詳細は、表A-1を参照してください。
import javax.ejb.Stateless;
import oracle.j2ee.ejb.StatelessDeployment;
@Stateless
@StatelessDeployment(
minInstances=5,
poolCacheTimeout=90
)
public class HelloWorldBean implements HelloWorld {
public void sayHello(String name) {
System.out.println("Hello "+name +" from first EJB3.0");
}
}
例5-11に、@StatefulDeployment
アノテーションを使用し
てEJB 3.0ステートフル・セッションBeanのOC4J固有のデプロイ・オプションを構成する方法を示します。
@StatefulDeployment
の属性の詳細は、表A-1を参照してください。
import javax.ejb.Stateful
import oracle.j2ee.ejb.StatefulDeployment;
@Stateful
@StatefulDeployment(
idletime=100
passivateCount=3
)
public class CartBean implements Cart {
private ArrayList items;
...
}
例5-12に示すように、OC4J固有のデプロイ・オプションは、orion-ejb-jar.xml
ファイルの<session-deployment>
要素を使用して指定できます。
<session-deployment>
要素の詳細は、「<session-deployment>」を参照してください。
<?xml version="1.0" encoding="utf-8"?>
<orion-ejb-jar
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-ejb-jar-10_0.xsd"
deployment-version="10.1.3.1.0"
deployment-time="10b1fb5cdd0"
schema-major-version="10"
schema-minor-version="0"
>
<enterprise-beans>
<session-deployment
name="MBeanServerEjb"
call-timeout="0"
location="MBeanServerEjb"
local-location="admin_ejb_MBeanServerEjbLocal"
timeout="0"
...
>
</session-deployment>
...
</enterprise-beans>
...
</orion-ejb-jar>
|
Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|