Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この章の内容は次のとおりです。
詳細は、次を参照してください。
実行時にJNDIを使用してEJBから重要なリソースにアクセスする前に、それらのリソースへの環境参照を定義する必要があります。環境参照は静的で、Beanによって変更できません。
この項では次の参照の構成について説明します。
EJB 3.0では、環境参照を定義するかわりにアノテーション、リソース・インジェクションおよびデフォルトのJNDI名(クラス名およびインタフェース名に基づく)を使用できます。別の方法として、OC4J固有のデプロイメント・ディスクリプタまたはOC4J固有のアノテーションを使用して環境参照を定義できます。
EJB 2.1では、<ejb-ref>
または<ejb-local-ref>
要素を適切なデプロイメント・ディスクリプタに定義する必要があります。
どちらの場合も、環境参照を定義する場合は、実際のJNDI名を使用するか、関連付けられている論理名を使用してデプロイの柔軟性を高めることができます。
詳細は、次を参照してください。
クライアントのロールで動作している1つのEnterprise Bean(ソースEnterprise Beanと呼ぶ)が別のEnterprise Bean(ターゲットEnterprise Beanと呼ぶ)にアクセスするには、その前にソースEnterprise Beanのデプロイメント・ディスクリプタでターゲットEnterprise BeanへのEJB参照を定義する必要があります。
注意 EJB 3.0では、ターゲットEnterprise Beanへの環境参照は不要です。リソース・インジェクションを使用して、ターゲットEnterprise Beanに直接アクセスできます(「EJB 3.0 Enterprise Beanへのアクセス」を参照)。 |
詳細は、次を参照してください。
JDBCデータソース、JMSトピックまたはキュー、Java mail、HTTP URLなどのサービスへの接続を提供するリソース・マネージャのコネクション・ファクトリへの環境参照を定義できます。これらの参照は、提供する実際のリソース・マネージャ・コネクション・ファクトリへのデプロイ時に、そのOC4Jがバインドする論理名です。
注意 EJB 3.0では、リソース・マネージャのコネクション・ファクトリへの環境参照は不要です。リソース・インジェクションを使用して、リソース・マネージャのコネクション・ファクトリに直接アクセスできます(「EJB 3.0リソース・マネージャのコネクション・ファクトリのルックアップ」を参照)。 |
リソース・マネージャのコネクション・ファクトリにアクセスする各クライアントについて、クライアント・ソース・コードにこれを注入するか、クライアントのデプロイメント・ディスクリプタに環境参照を定義する必要があります。
詳細は、次を参照してください。
環境変数を環境参照とともに定義して、JNDIを使用して環境変数値をアクセス可能にできます。
詳細は、「環境変数への環境参照の構成」を参照してください。
Webサービスを環境参照とともに定義して、JNDIを使用してWebサービスをアクセス可能にできます。
詳細は、「Webサービスへの環境参照の構成」を参照してください。
エンティティ・マネージャへの推奨されるアクセス方法は、アノテーションおよび依存性注入を使用することです(「OC4Jのデフォルト・エンティティ・マネージャの取得」および「JNDIを使用したエンティティ・マネージャの取得」を参照)。
アノテーションおよびインジェクションをサポートしないクラス(ヘルパー・クラスおよびWebクライアント)でエンティティ・マネージャを取得するには、最初に永続性コンテキスト参照を定義してから、JNDIを使用してエンティティ・マネージャをルックアップする必要があります。
詳細は、次を参照してください。
環境参照を使用することを選択した場合、EJB参照を構成する場所は、表19-1に示すようにクライアントのタイプによって決まります。
EJB 3.0でEJB環境参照を定義する場合、OC4J固有のデプロイメント・ディスクリプタのかわりにOC4J固有のアノテーションを使用できます。
環境参照を定義する場合は、リソースを論理名またはそのJNDI名で識別できます。アプリケーション・アセンブリおよびデプロイの柔軟性を最大にするために、通常はアプリケーション環境で定義する論理名でリソースを参照することによりEJBアプリケーションを開発します。このように間接的に設定することにより、Bean開発者は、アプリケーションのアセンブルおよびデプロイの方法によって変化する可能性のある実際の名前を指定せずに、Enterprise Bean、他のリソース(JDBC DataSource
など)および環境変数を参照できます。この章の手順では、論理名またはJNDI名の構成方法を説明します。
同じOC4Jインスタンス上にWeb層とEJB層の両方を含むクラスタ化されたOC4Jアーキテクチャまたは単一インスタンスのOC4Jアーキテクチャでは、次のいずれかの方法を使用してターゲットEnterprise Beanのリモート・インスタンスへのEJB参照を定義できます(次の方法は、後の方がアセンブリおよびデプロイの柔軟性が高くなるように配列されています)。
<ejb-ref>
要素を構成します(「クライアントのejb-refの構成: インダイレクションなし」を参照)。
<ejb-link>
要素を指定する適切なクライアントEJBデプロイメント・ディスクリプタで<ejb-ref>
要素を構成します
<ejb-ref>
要素を構成し、その論理名を実際のBeanと関連付けるOC4J固有の適切なデプロイメント・ディスクリプタで<ejb-ref-mapping>
を構成します(「クライアントのejb-refの構成: orion-ejb-jar.xmlのejb-ref-mappingを使用したインダイレクションの解決」を参照)。
EJB 3.0では、ターゲットEnterprise Beanへの環境参照は不要です。リソース・インジェクションを使用して、ターゲットEnterprise Beanに直接アクセスできます(「EJB 3.0 Enterprise Beanへのアクセス」を参照)。
注意
Web層とEJB層が異なるホスト上の個別のOC4Jインスタンスにデプロイされる非クラスタ化アーキテクチャの場合は、「リモートEJBへの環境参照の構成: クラスタ化されていない個別のWeb層およびEJB層」を参照してください。
ターゲットEnterprise Beanのルックアップの詳細は、第29章「クライアントからのEnterprise Beanへのアクセス」を参照してください。
Beanインタフェースが1つのみの場合(ただ1つのセッションBeanのみがインタフェースCart.class
を使用する場合など)、またはアセンブリおよびデプロイの柔軟性を提供するインダイレクションを使用しない場合、このオプションを選択します。
<ejb-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-1に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの実際の名前
<ejb-ref-type>
: ターゲットEnterprise Beanのタイプ(Session
またはEntity
のいずれか)
<home>
: ターゲットEnterprise Beanのリモート・ホーム・インタフェースのパッケージ名とクラス名
<remote>
: ターゲットEnterprise Beanのリモート・コンポーネント・インタフェースのパッケージ名とクラス名<ejb-ref> <ejb-ref-name>myBeans/BeanA</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>myBeans.BeanAHome</home> <remote>myBeans.BeanA</remote> </ejb-ref>
Beanインタフェースが1つのみではない場合、またはアセンブリおよびデプロイの柔軟性を提供するインダイレクションを使用する場合、このオプションを選択します。
<ejb-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-2に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの論理名
<ejb-ref-type>
: ターゲットEnterprise Beanのタイプ(Session
またはEntity
のいずれか)
<home>
: ターゲットEnterprise Beanのリモート・ホーム・インタフェースのパッケージ名とクラス名
<remote>
: ターゲットEnterprise Beanのリモート・コンポーネント・インタフェースのパッケージ名とクラス名
<ejb-link>
: ターゲットBeanの実際の名前<ejb-ref> <ejb-ref-name>ejb/nextVal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>myBeans.BeanAHome</home> <remote>myBeans.BeanA</remote> <ejb-link>myBeans/BeanA</ejb-link> </ejb-ref>
次の条件が満たされる場合にこのオプションを使用します。
<ejb-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-3に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの論理名
<ejb-ref-type>
: ターゲットEnterprise Beanのタイプ(Session
またはEntity
のいずれか)
<home>
: ターゲットEnterprise Beanのリモート・ホーム・インタフェースのパッケージ名とクラス名
<remote>
: ターゲットEnterprise Beanのリモート・コンポーネント・インタフェースのパッケージ名とクラス名<ejb-ref> <ejb-ref-name>ejb/nextVal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>myBeans.BeanAHome</home> <remote>myBeans.BeanA</remote> </ejb-ref>
orion-ejb-jar.xml
デプロイメント・ディスクリプタ内で、例19-4に示すように論理名をターゲットBeanの実際の名前にマッピングする<ejb-ref-mapping>
要素を定義します。<ejb-ref-mapping name="ejb/nextVal" location="myBeans/BeanA"/>
図19-1に示すように、<ejb-ref-mapping>
要素では、name
属性を<ejb-ref-name>
と一致するように構成し、location
属性をターゲットBeanの実際の名前で構成します。例19-4では、論理名ejb/nextVal
は、ターゲットBean myBeans/BeanA
の実際の名前にマッピングされます。
OC4Jは、論理名を、クライアント・サイドの実際のJNDI名にマッピングします。サーバー・サイドでJNDI名を受信し、これをJNDIツリー内で解決します。
一般的なJava EEアプリケーション・アーキテクチャでは、非クラスタ化環境でWeb層を1つのOC4Jインスタンスにデプロイし、EJB層を別のホスト上にあるもう1つのOC4Jインスタンスにデプロイします。
このアーキテクチャでリモートEnterprise Beanにアクセスするには、コンテキストの作成時にWeb層コードの必須JNDIプロパティを設定する必要があります(「初期コンテキストでのJNDIプロパティの設定」を参照)。これらのハードコードされたプロパティにより、テスト環境から本番環境への移行などの際に移植性の問題が発生する可能性があります。
OC4J固有のデプロイXML(「デプロイXMLの使用方法」を参照)を使用すると、リモートEnterprise Beanへの参照を、必須のJNDIコンテキスト変数を含むJNDIプロパティ・ファイルと関連付けることができます。これにより、アセンブリとデプロイが容易になります。
図19-2はJSPまたはサーブレット・クライアントのアーキテクチャを示しており、図19-3はEJBクライアントのアーキテクチャを示しています。
JNDIプロパティ・ファイルの詳細は、「JNDIプロパティ・ファイルでのJNDIプロパティの設定」を参照してください。
OC4J固有の要素<ejb-ref-mapping>
を使用して、リモートEnterprise Beanへの参照を必須のJNDIコンテキスト変数を含むJNDIプロパティ・ファイルと関連付けるには、Web層のOC4Jインスタンスを次のように構成します。
<ejb-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-5に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの論理名
<ejb-ref-type>
: ターゲットEnterprise Beanのタイプ(Session
またはEntity
のいずれか)
<home>
: ターゲットEnterprise Beanのリモート・ホーム・インタフェースのパッケージ名とクラス名
<remote>
: ターゲットEnterprise Beanのリモート・コンポーネント・インタフェースのパッケージ名とクラス名<ejb-ref> <ejb-ref-name>ejb/emp</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>myBeans.EmployeeBeanHome</home> <remote>myBeans.EmployeeBean</remote> </ejb-ref>
このアーキテクチャにおいて、クライアント・デプロイメント・ディスクリプタはWeb層のOC4Jインスタンス上にあります。リモートEnterprise Beanのクライアントは、次のいずれかです。
orion-web.xml
またはorion-ejb-jar.xml
デプロイメント・ディスクリプタ内で、例19-6に示すように次の操作を実行する<ejb-ref-mapping>
要素を定義します。
myBeans/EmployeeBean
)に論理名(ejb/emp
)をマッピングします。
remote-server-ref="true"
)。
jndi-properties-file="empjndi.properties"
)。このプロパティ・ファイルには、ターゲットEJBインスタンスがデプロイされているリモート・ホストへのアクセス時にクライアントが必要とするJNDIコンテキスト変数が含まれます。<ejb-ref-mapping name="ejb/emp" location="myBeans/EmployeeBean" remote-server-ref="true" jndi-properties-file="empjndi.properties" />
図19-1に示すように、<ejb-ref-mapping>
要素では、name
属性を<ejb-ref-name>
と一致するように構成し、location
属性をターゲットBeanの実際の名前で構成します。例19-4では、論理名ejb/emp
は、ターゲットBean myBeans/EmployeeBean
の実際の名前にマッピングされます。
Web層のクライアント(Web層にデプロイされたJSP、サーブレットまたはEnterprise Bean)が(インジェクションまたはJNDIルックアップを使用して)リモート・ターゲットEnterprise Beanにアクセスする場合、Web層のOC4Jインスタンスは、(Web層のOC4Jインスタンスのweb.xml
またはejb-jar.xml
ファイルで指定された)論理名を(Web層のOC4Jインスタンスのorion-web.xml
またはorion-ejb-jar.xml
ファイルで指定された)実際の名前にマッピングします。Web層のOC4Jインスタンスは、EJB層のOC4Jインスタンスにアクセスするために<ejb-ref-mapping>
要素で指定されたJNDIプロパティ・ファイルを使用し、実際の名前をEJB層のOC4Jインスタンス上のターゲットEnterprise Beanに解決します。
次のいずれかの方法を使用してターゲットEnterprise Beanのローカル・インタフェースへのEJB参照を定義できます(次の方法は、後の方がアセンブリおよびデプロイの柔軟性が高くなるように配列されています)。
<ejb-local-ref>
要素を構成します(「クライアントのejb-local-refの構成: インダイレクションなし」を参照)。
<ejb-link>
要素を指定する適切なクライアントEJBデプロイメント・ディスクリプタで<ejb-local-ref>
要素を構成します(「クライアントのejb-local-refの構成: ejb-linkを使用したインダイレクションの解決」を参照)。
<ejb-local-ref>
要素を構成し、その論理名を実際のBeanと関連付けるOC4J固有の適切なデプロイメント・ディスクリプタで<ejb-ref-mapping>
を構成します
EJB 3.0では、ターゲットEnterprise Beanへの環境参照は不要です。リソース・インジェクションを使用して、ターゲットEnterprise Beanに直接アクセスできます(「EJB 3.0 Enterprise Beanへのアクセス」を参照)。
注意
ターゲットEnterprise Beanのルックアップの詳細は、第29章「クライアントからのEnterprise Beanへのアクセス」を参照してください。
Beanインタフェースが1つのみの場合(ただ1つのセッションBeanのみがインタフェースCart.class
を使用する場合など)、またはアセンブリおよびデプロイの柔軟性を提供するインダイレクションを使用しない場合、このオプションを選択します。
<ejb-local-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-1に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの実際の名前
<ejb-ref-type>
: ターゲットBeanのタイプ(Session
またはEntity
)
<local-home>
: ターゲットBeanのローカル・ホーム・インタフェースのパッケージ名とクラス名
<local>
: ターゲットBeanのローカル・コンポーネント・インタフェースのパッケージ名とクラス名<ejb-local-ref> <ejb-ref-name>myBeans/BeanA</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>myBeans.BeanAHome</home> <local>myBeans.BeanA</remote> </ejb-ref>
Beanインタフェースが1つのみではない場合、またはアセンブリおよびデプロイの柔軟性を提供するインダイレクションを使用する場合、このオプションを選択します。
<ejb-local-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-8に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの論理名
<ejb-ref-type>
: ターゲットBeanのタイプ(Session
またはEntity
)
<local-home>
: ターゲットBeanのローカル・ホーム・インタフェースのパッケージ名とクラス名
<local>
: ターゲットBeanのローカル・コンポーネント・インタフェースのパッケージ名とクラス名
<ejb-link>
: ターゲットBeanの実際の名前<ejb-local-ref> <ejb-ref-name>ejb/nextVal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>myBeans.BeanAHome</home> <local>myBeans.BeanA</remote> <ejb-link>myBeans/BeanA</ejb-link> </ejb-ref>
次の条件が満たされる場合にこのオプションを使用します。
<ejb-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-9に示すように次のサブ要素を構成します。
<ejb-ref-name>
: ターゲットEnterprise Beanの論理名
<ejb-ref-type>
: ターゲットBeanのタイプ(Session
またはEntity
)
<local-home>
: ターゲットBeanのローカル・ホーム・インタフェースのパッケージ名とクラス名
<local>
: ターゲットBeanのローカル・コンポーネント・インタフェースのパッケージ名とクラス名<ejb-local-ref> <ejb-ref-name>ejb/nextVal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>myBeans.BeanAHome</home> <local>myBeans.BeanA</remote> </ejb-ref>
orion-ejb-jar.xml
デプロイメント・ディスクリプタ内で、例19-10に示すように論理名をターゲットBeanの実際の名前にマッピングする<ejb-ref-mapping>
要素を定義します。<ejb-ref-mapping name="ejb/nextVal" location="myBeans/BeanA"/>
図19-5に示すように、<ejb-ref-mapping>
要素では、name
属性を<ejb-ref-name>
と一致するように構成し、location
属性をターゲットBeanの実際の名前で構成します。例19-10では、論理名ejb/nextVal
は、ターゲットBean myBeans/BeanA
の実際の名前にマッピングされます。
OC4Jは、論理名を、クライアント・サイドの実際のJNDI名にマッピングします。サーバー・サイドでJNDI名を受信し、これをJNDIツリー内で解決します。
デプロイXMLを使用してJDBCのDataSource
用の環境要素を作成することにより、JDBCを通じてデータベースにアクセスできます(「デプロイXMLの使用方法」を参照)。
注意 EJB 3.0では、リソース・マネージャのコネクション・ファクトリへの環境参照は不要です。リソース・インジェクションを使用して、リソース・マネージャのコネクション・ファクトリに直接アクセスできます(「EJB 3.0リソース・マネージャのコネクション・ファクトリのルックアップ」を参照)。 |
リソース・マネージャのコネクション・ファクトリのルックアップの詳細は、次を参照してください。
デプロイXMLを使用してJDBC DataSource
への参照を定義するには、次のようにします。
data-sources.xml
ファイルで、目的のDataSource
を定義し、その実際のJNDI名を指定します(第20章「データソースの構成」を参照)。この例では、DataSource
が、/test/OrderDataSource
というJNDI名でdata-sources.xml
ファイルで指定されていることを前提としています。
<resource-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、例19-11に示すように次のサブ要素を構成します。
<res-ref-name>
: JDBCデータソースの論理名。参照名にはjdbc
という接頭辞を付けることをお薦めしますが、これは必須ではありません。Beanのソース・コードでこの参照をルックアップするために初期コンテキストを使用する場合は(例19-30を参照)、必ず論理名にjava:comp/env/
という接頭辞を付けます(java:comp/env/jdbc/OrderDB
など)。
<res-type>
: リソースのJavaタイプ。JDBC DataSource
オブジェクトの場合、これはjavax.sq.DataSource
です。
<res-auth>
: 認証情報のソース(Application
またはContainer
)。<enterprise-beans>
...
<resource-ref>
<res-ref-name>jdbc/OrderDB</res-ref-name>
<res-type>javax.sq.DataSource</res-type>
<res-auth>Application</res-auth>
</resource-ref>
</enterprise-beans>
orion-ejb-jar.xml
デプロイメント・ディスクリプタで、例19-12に示すように<resource-ref-mapping>
を定義して次の属性を構成します。
name
: (ejb-jar.xml
に定義された)データソースの論理名
location
: (data-sources.xml
に定義された)データソースの実際の名前<resource-ref-mapping
name="jdbc/OrderDB"
location="test/OrderDataSource"
/>
図19-6に、name
属性がjdbc/OrderDB
(ejb-jar.xml
で定義された論理名)に設定され、location
属性がtest/OrderDataSource
(data-sources.xml
で定義されたJNDI名)に設定された<resource-ref-mapping>
要素を示します。
Beanの実装では、論理名java:comp/env/jdbc/OrderDB
を使用して、このデータソースのJDBCデータソース・リソース・マネージャのコネクション・ファクトリをルックアップできます(例19-30を参照)。
JMS 1.0の場合と同じように(「JMS宛先またはコネクション・リソース・マネージャのコネクション・ファクトリへの環境参照の構成(JMS 1.0)」を参照)、JMS 1.1を使用して、JMSコネクション・リソース・マネージャのコネクション・ファクトリへの環境参照を定義します。ただし、クライアント・デプロイメント・ディスクリプタの<message-destination-ref>
要素および対応するOC4J固有のデプロイメント・ディスクリプタの<message-destination-ref-mapping>
要素を使用してJMS宛先への環境参照を定義できます(「EJB環境参照を構成する場所」を参照)。
<message-destination-ref-mapping>
を使用して、クライアント<message-destination-ref-name>
をOC4J環境で使用できる別の場所にマッピングします。これにより、メッセージ・コンシューマおよびプロデューサを1つ以上の共通の論理的な宛先にリンクする手段が提供されます。
<message-destination-ref>
はすべてのEJBタイプで使用できるため、<message-destination-ref-mapping>
はメッセージドリブン・デプロイに限定されません。
詳細は、『Oracle Containers for J2EEサービス・ガイド』の「Oracle Enterprise Messaging Service(OEMS)」を参照してください。
注意 EJB 3.0では、リソース・マネージャのコネクション・ファクトリへの環境参照は不要です。リソース・インジェクションを使用して、リソース・マネージャのコネクション・ファクトリに直接アクセスできます(「EJB 3.0リソース・マネージャのコネクション・ファクトリのルックアップ」を参照)。 |
リソース・マネージャのコネクション・ファクトリのルックアップの詳細は、次を参照してください。
JMS宛先(キューまたはトピック)およびJMSコネクション・リソース・マネージャのコネクション・ファクトリには、デプロイXMLを使用してそれらのコネクション・ファクトリへの環境参照を作成することでアクセスできます(「デプロイXMLの使用方法」を参照)。
注意 EJB 3.0では、リソース・マネージャのコネクション・ファクトリへの環境参照は不要です。アノテーションおよびリソース・インジェクションを使用して、リソース・マネージャのコネクション・ファクトリに直接アクセスできます(「EJB 3.0リソース・マネージャのコネクション・ファクトリのルックアップ」を参照)。 |
リソース・マネージャのコネクション・ファクトリのルックアップの詳細は、次を参照してください。
JMS宛先およびJMSコネクション・リソース・マネージャのコネクション・ファクトリを定義するには、次のようにします。
詳細は、次を参照してください。
詳細は、次を参照してください。
使用するJMSプロバイダのタイプにかかわらず、論理名の定義方法は同じです。
<resource-env-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、次のサブ要素を構成します。
<resource-env-ref-name>
: JMS宛先リソース・マネージャのコネクション・ファクトリの論理名。
<resource-env-ref-type>
: 宛先クラス・タイプ。javax.jms.Queue
またはjavax.jms.Topic
です。
例19-13に、JMSトピック・リソース・マネージャのコネクション・ファクトリの<resource-env-ref>
要素を示します。
<resource-env-ref> <resource-env-ref-name>rpTestTopic</resource-env-ref-name> <resource-env-ref-type>javax.jms.Topic</resource-env-ref-type> </resource-env-ref>
<resource-ref>
要素を定義し、次のサブ要素を構成します。
<res-ref-name>
: JMSコネクション・リソース・マネージャのコネクション・ファクトリの論理名。
<res-type>
: コネクション・ファクトリ・クラス・タイプ。javax.jms.QueueConnectionFactory
またはjavax.jms.TopicConnectionFactory
です。
<res-auth>
: 認証を行う機能。Container
またはBean
です。
<res-sharing-scope>
: 共有スコープ。Shareable
またはUnshareable
です。
例19-14に、JMSトピック・コネクション・リソース・マネージャのコネクション・ファクトリの<resource-ref>
要素を示します。
<resource-ref> <res-ref-name>myTCF</res-ref-name> <res-type>javax.jms.TopicConnectionFactory</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
<resource-env-ref-mapping>
要素を定義し、そのname
属性をJMS宛先論理名(<resource-env-ref>
で定義)に、またそのlocation
属性をJMSプロバイダの構成時に定義したJNDI名に構成します(手順2を参照)。例19-15に、OEMS JMSの<resource-env-ref-mapping>
要素を示します。
<resource-env-ref-mapping name="rpTestTopic" location="jms/Topic/rpTestTopic"> </resource-env-ref-mapping>
<resource-ref-mapping>
を定義し、そのname
属性をJMSコネクション・ファクトリの論理名(<resource-ref>
で定義)に、またそのlocation
属性をJMSプロバイダの構成時に定義したJNDI名(手順2を参照)に構成します。例19-16に、OEMS JMSの<resource-ref-mapping>
要素を示します。
<resource-ref-mapping name="myTCF" location="jms/Topic/myTCF"> </resource-ref-mapping>
InitialContext
のJNDIルックアップを通じてBeanがアクセスする環境変数を作成できます。これらの変数はejb-jar.xml
ファイルの<env-entry>
要素で定義します。型は、String
、Integer
、Boolean
、Double
、Byte
、Short
、Long
、Float
のいずれかです。環境変数の名前は<env-entry-name>
サブ要素で定義し、型は<env-entry-type>
サブ要素で定義します。初期値は<env-entry-value>
サブ要素で定義します。<env-entry-name>
はjava:comp/env
コンテキストに対して相対的です。
例19-17に、ejb-jar.xml
ファイルでのjava:comp/env/minBalance
およびjava:comp/env/maxCreditBalance
の環境変数の定義方法を示します。
<env-entry>
<env-entry-name>minBalance</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>500</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>maxCreditBalance</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>10000</env-entry-value>
</env-entry>
ejb-jar.xml
ファイルで定義した環境変数の値は、name
属性がejb-jar.xml
ファイルで定義したenv-entry-name
と一致するenv-entry-mapping
要素をorion-ejb-jar.xml
ファイルに定義することでオーバーライドできます。ejb-jar.xml
ファイルで指定された型は変わりません。
図19-7に、minBalance
環境変数の値をorion-ejb-jar.xml
ファイルでオーバーライドして500に設定する方法を示します。
環境変数のルックアップの詳細は、次を参照してください。
Webサービスには、そのWebサービスを参照するリソース・マネージャのコネクション・ファクトリを作成することでステートレス・セッションBeanからアクセスできます。
リソース・マネージャのコネクション・ファクトリにアクセスする各クライアントについて、クライアント・ソース・コードにこれを注入するか、クライアントのデプロイメント・ディスクリプタに環境参照を定義する必要があります。
Webサービスへの環境参照を作成するには、次のようにします。
適切なクライアント・デプロイメント・ディスクリプタに<service-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、次のサブ要素を構成します。
例19-18に、Webサービスの<service-ref>
要素を示します。
参照名にはservice
という参照名を付けることをお薦めしますが、これは必須ではありません。Beanコードでは、この参照(例30-5を参照)のルックアップは、常に先頭にjava:comp/env
が付きます(たとえば、java:comp/env/service/myService
など)。
<service-ref>
<service-ref-name>service/StockQuoteService</service-ref-name>
<service-interface>com.example.StockQuoteService</service-interface>
</service-ref>
対応するOC4J固有のデプロイメント・ディスクリプタ(「EJB環境参照を構成する場所」を参照)の<service-ref-mapping>
を定義し、そのname
属性をWebサービス論理名(<service-ref>
で定義)に構成し、<service-qname>
サブ要素を構成します。
例19-19に、Webサービスの<service-ref-mapping>
要素を示します。
<service-ref-mapping name="service/WebServiceBroker">
<service-qname namespaceURI="urn:WebServiceBroker" localpart="WebServiceBroker"/>
</service-ref-mapping>
Webサービスのルックアップおよび使用方法の詳細は、第30章「EJBおよびWebサービスの使用方法」を参照してください。
エンティティ・マネージャを取得する最も簡単な方法は、@PersistenceContext
アノテーションを使用することです(「EntityManagerの取得」を参照)。
ただし、アノテーションおよびインジェクションをサポートしないクラス、つまりヘルパー・クラスでエンティティ・マネージャを取得するには、最初に適切なデプロイメント・ディスクリプタ・ファイルにpersistence-context-ref
を定義する必要があります。
永続性コンテキストへの環境参照を作成するには、次のようにします。
適切なクライアント・デプロイメント・ディスクリプタに<persistence-context-ref>
要素を定義し(「EJB環境参照を構成する場所」を参照)、次のサブ要素を構成します。
<persistence-context-ref-name>
: 永続性コンテキストの論理名。
<persistence-unit-name>
: この永続性コンテキストに関連付けられている永続性ユニットの名前。この名前の永続性ユニットはpersistence.xml
ファイルで定義する必要があります。
詳細は、次を参照してください。
例19-20に、web.xml
ファイル内の永続性コンテキストの<persistence-context-ref>
要素を示します。
参照名はpersistence
から開始することをお薦めしますが、これは必須ではありません。Beanコードでは、この参照(「ヘルパー・クラスでのエンティティ・マネージャの取得」を参照)のルックアップは、常に先頭にjava:comp/env
が付きます(たとえば、java:comp/env/persistence/InventoryAppMgr
など)。
...
<servlet>
<servlet-name>webTierEntryPoint</servlet-name>
<servlet-class>com.sun.j2ee.blueprints.waf.controller.web.MainServlet</servlet-class>
<init-param>
<param-name>default_locale</param-name>
<param-value>en_US</param-value>
</init-param>
<persistence-context-ref>
<description>
Persistence context for the inventory management application.
</description>
<persistence-context-ref-name>
persistence/InventoryAppMgr
</persistence-context-ref-name>
<persistence-unit-name>
InventoryManagement <!-- Defined in persistenc.xml -->
</persistence-unit-name>
</persistence-context-ref>
</servlet>
...
エンティティ・マネージャのルックアップおよび使用方法の詳細は、「ヘルパー・クラスでのエンティティ・マネージャの取得」を参照してください。
初期コンテキスト・ファクトリを使用して、初期コンテキスト(JNDIネームスペースへの参照)を取得します。初期コンテキストを使用すると、JNDI APIを使用してEnterprise Bean、リソース・マネージャのコネクション・ファクトリ、環境変数、またはJNDIでアクセス可能なその他のオブジェクトをルックアップできます。
使用する初期コンテキスト・ファクトリのタイプは、表19-2に示すように、使用しているクライアントのタイプによって決まります。
クライアント・タイプ | ターゲットEJBとの関連 | 初期コンテキスト・ファクトリ |
---|---|---|
任意のクライアント |
クライアントとターゲットEnterprise Beanが同一JVM上に置かれます。 |
デフォルト(「デフォルトの初期コンテキスト・ファクトリの構成」を参照) |
任意のクライアント |
クライアントとターゲットEnterprise Beanは同じアプリケーションにデプロイされます。 |
デフォルト(「デフォルトの初期コンテキスト・ファクトリの構成」を参照) |
任意のクライアント |
クライアントの親として指定されるアプリケーションにデプロイされるターゲットEnterprise Bean。1 |
デフォルト(「デフォルトの初期コンテキスト・ファクトリの構成」を参照) |
クライアントとターゲットEnterprise Beanは同一JVM上に置かれず、同じアプリケーションにデプロイされません。ターゲットEJBアプリケーションはクライアントの親ではありません。1 |
|
|
クライアントとターゲットEnterprise Beanは同一JVM上に置かれず、同じアプリケーションにデプロイされません。ターゲットEJBアプリケーションはクライアントの親ではありません。1 |
|
1
アプリケーションの親の設定方法は、『Oracle Containers for J2EE開発者ガイド』を参照してください。 |
詳細は、次を参照してください。
ターゲットBeanと同一JVM上に置かれているクライアント(表19-2を参照)は、そのノードのJNDIプロパティに自動的にアクセスします。したがって、JNDIプロパティは必要ないため、Enterprise Beanへのアクセスは簡単です。
//Get the Initial Context for the JNDI lookup for a local EJB InitialContext ic = new InitialContext(); //Retrieve the Home interface using JNDI lookup Objecthello
Object = ic.lookup("java:comp/env/ejb/HelloBean
");
クライアントにOracle初期コンテキスト・ファクトリが必要な場合は(表19-2を参照)、次のJNDIプロパティを設定する必要があります。
JNDIプロパティの設定の詳細は、「Enterprise BeanでのJNDIプロパティの設定」を参照してください。
java.naming.factory.initial
プロパティをクライアントに適したOracle初期コンテキスト・ファクトリ(表19-2を参照)で定義します。
java.naming.provider.url
プロパティをOC4Jインストール環境に適したネーミング・プロバイダURLで定義します。
HashTable
を作成し、javax.naming.Context
フィールドをキーとし、String
オブジェクトを値として使用して必要なプロパティを移入します。Hashtable env = new Hashtable(); env.put("java.naming.factory.initial", "oracle.j2ee.server.ApplicationClientInitialContextFactory"); env.put("java.naming.provider.url", "opmn:ormi://opmnhost:6004:oc4j_inst1/ejbsamples");
HashTable
を初期コンテキスト・コンストラクタに渡します。Context ic = new InitialContext (env);
Oracle Application Serverのインストールで、OPMNは1つ以上のOC4Jインスタンスを管理します。この場合、java.naming.provider.url
の値は次の形式である必要があります。
opmn:ormi://<hostname>:<opmn-request-port>:<oc4j-instance-name>/<application-name>
このプロバイダURLのフィールドは、次のように定義されます。
<hostname>
: Oracle Application Serverが実行されているホストの名前。
<opmn-request-port>
: この構成では、ORMIポートを使用するかわりにOPMNリクエスト・ポートを使用する必要があります。OPMNリクエスト・ポートは、次のようにopmn.xml
にあります。
<notification-server> <port local="6100" remote="6200" request="6003"/> ... </notification-server>
デフォルトのOPMNリクエスト・ポートは6003です。
<oc4j-instance-name>
: この構成では、OPMNがロード・バランシング/フェイルオーバーに使用する複数のOC4Jプロセスが存在する場合があります。アプリケーションにデプロイされるインスタンスの名前を使用します。デフォルトのインスタンス名はhome
です。
たとえば、ホスト名がdpanda-us
、リクエスト・ポートが6003、インスタンス名がhome1
の場合、プロバイダURLは次のようになります。
opmn:ormi://dpanda-us:6003:home1/ejbsamples
詳細は、次を参照してください。
スタンドアロンのOC4Jインストールでは、java.naming.provider.url
の値は次の形式である必要があります。
ormi://<hostname>:<ormi-port>/<application-name>
このプロバイダURLのフィールドは、次のように定義されます。
<hostname>
: OC4Jが実行されているホストの名前
<ormi-port>
: 次のようにrmi.xml
ファイルで構成されているORMIポート
<rmi-server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/rmi-serv er-10_0.xsd" port="23791" schema-major-version="10" schema-minor-version="0" > ... </rmi-server>
デフォルト・ポートは23791です。
<application-name>
: server.xml
ファイルで構成されているアプリケーション名
たとえば、ホスト名がdpanda-us
、ORMIポートが23793、アプリケーション名がejb30slsb
の場合、プロバイダURLは次のようになります。
ormi://dpanda-us:23793/ejb30slsb
詳細は、次を参照してください。
クライアントがターゲットと同一JVM上に置かれていて、ターゲットと同じアプリケーション内に存在している場合、またはターゲットが親の中に存在する場合、JNDIプロパティを初期化する必要はありません。それ以外の場合は、次のいずれかの方法でJNDIプロパティを初期化する必要があります。
この項の内容は次のとおりです。
詳細は、次を参照してください。
java.util.Properties
のメソッドload
で指定されている要件に準拠した、jndi.properties
という名前のJNDIプロパティを設定できます。
JNDIプロパティは次のように設定します。
<PropertyName>=<PropertyValue>
次に例を示します。
java.naming.factory.initial= oracle.j2ee.server.ApplicationClientInitialContextFactory
プロパティ名については、javax.naming.Context
のフィールド定義を参照してください。
例については、「JNDIプロパティの資格証明の指定」を参照してください。
jndi.properties
ファイル内でJNDIプロパティを設定する場合は、必ずこのファイルをクライアントのCLASSPATH
からアクセス可能にしてください。または、このファイルをOC4J固有の適切なデプロイXMLファイルのejb-ref-mapping
の属性jndi-properties-file
に指定してください(「リモートEJBへの環境参照の構成: クラスタ化されていない個別のWeb層およびEJB層」を参照)。
JNDIプロパティは、コマンドラインで-D
引数として、または環境参照(「環境変数への環境参照の構成」を参照)として指定されたシステム・プロパティとして設定できます。
JNDIプロパティは、HashTable
を作成し、javax.naming.Context
フィールドをキーとして、またString
オブジェクトを値として使用して必要なプロパティを移入することにより設定できます。初期コンテキストをインスタンス化する場合、HashTable
を初期コンテキスト・コンストラクタに渡します。
例については、「初期コンテキストでの資格証明の指定」を参照してください。
EJB 3.0を使用している場合は、リソース・インジェクション(「アノテーションの使用方法」を参照)またはInitialContext
(「初期コンテキストの使用方法」を参照)を使用してリソース管理接続をルックアップできます。
例19-24に、アノテーションおよび依存性注入を使用してEJB 3.0リソース・マネージャのコネクション・ファクトリにアクセスする方法を示します。
@Stateless public class EmployeeServiceBean implements EmployeeService {
...
public void sendEmail(String emailAddress) {
@Resource Session testMailSession;
...
}
}
例19-25に、初期コンテキストを使用してEJB 3.0リソース・マネージャのコネクション・ファクトリをルックアップする方法を示します。
@Stateless public class EmployeeServiceBean implements EmployeeService {
...
public void sendEmail(String emailAddress) {
InitialContext ic = new InitialContext();
Session session = (Session) ic.lookup("java:comp/env/mail/testMailSession");
...
}
}
詳細は、「初期コンテキスト・ファクトリの構成」を参照してください。
EJB 3.0を使用している場合は、リソース・インジェクション(「リソース・インジェクションの使用方法」を参照)またはInitialContext
(「初期コンテキストの使用方法」を参照)を使用して環境変数をルックアップできます。
リソース・インジェクションを使用している場合は、次のいずれかを使用して、コンテナに依存してフィールドまたはsetterメソッド(プロパティ)を初期化できます。
同じJNDI名を使用してフィールドとsetterの両方を注入することはできません。
次の例では、デフォルトのJNDI名java:comp/env/maxExemptions
で環境変数に対して指定された値でmaxExemptions
フィールドを初期化する方法を示します。
例19-27に示すように、フィールド・レベル(例19-26を参照)またはsetterメソッド(プロパティ)レベルでリソース・インジェクションを使用できます。
@Stateless public class EmployeeServiceBean implements EmployeeService {
...
// The maximum number of tax exemptions, configured by Deployer
// Assumes JNDI name java:comp/env/maxExemptions.
@Resource int maxExemptions;
...
public void setMaxExemptions(int maxEx) {
maxExemptions = maxEx;
}
...
}
例19-27 デフォルトの環境変数名を使用したプロパティ・レベルでのリソース・インジェクション
@Stateless public class EmployeeServiceBean implements EmployeeService {
...
int maxExemptions;
...
// Assumes JNDI name java:comp/env/maxExemptions.
@Resource
public void setMaxExemptions(int maxEx) {
maxExemptions = maxEx;
}
...
}
例19-28に示すように、明示的なJNDI名を指定できます。
@Stateless public class EmployeeServiceBean implements EmployeeService {
...
int maxExemptions;
...
@Resource(name="ApplicationDefaults/maxExemptions")
public void setMaxExemptions(int maxEx) {
maxExemptions = maxEx;
}
...
}
例19-29に、InitialContext
を使用してBeanのコード内でこれらの環境変数をルックアップする方法を示します。
InitialContext ic = new InitialContext(); Integer min = (Integer) ic.lookup("java:comp/env/minBalance"); Integer max = (Integer) ic.lookup("java:comp/env/maxCreditBalance"));
環境変数の値を取得するには、各環境変数の先頭にjava:comp/env/
を付加する必要があります。これは、コンテナが環境変数を格納する場所です。
詳細は、「初期コンテキスト・ファクトリの構成」を参照してください。
EJB 2.1を使用している場合は、InitialContext
(「初期コンテキストの使用方法」を参照)を使用してリソース・マネージャのコネクション・ファクトリをルックアップできます。
リソースの構成の詳細は、「リソース・マネージャのコネクション・ファクトリ環境参照」を参照してください。
例19-30に、java:comp/env/jdbc
接頭辞の付いたEJBデプロイメント・ディスクリプタ(「JDBCデータソース・リソース・マネージャのコネクション・ファクトリへの環境参照の構成」を参照)で定義されている論理名を持つInitialContext
を使用してBeanのコード内のJDBCデータソース・リソース・マネージャのコネクション・ファクトリをルックアップする方法を示します。
javax.sql.DataSource db; java.sql.Connection conn; ... InitialContext ic = new InitialContext(); db = (javax.sql.DataSource) initCtx.lookup("java:comp/env/jdbc/OrderDB"); conn = db.getConnection();
詳細は、「初期コンテキスト・ファクトリの構成」を参照してください。
EJB 2.1を使用している場合は、InitialContext
(「初期コンテキストの使用方法」を参照)を使用して環境変数をルックアップできます。
環境変数の構成の詳細は、「環境変数への環境参照の構成」を参照してください。
例19-29に、InitialContext
を使用してBeanのコード内でこれらの環境変数をルックアップする方法を示します。
InitialContext ic = new InitialContext(); Integer min = (Integer) ic.lookup("java:comp/env/minBalance"); Integer max = (Integer) ic.lookup("java:comp/env/maxCreditBalance"));
環境変数の値を取得するには、各環境変数の先頭にjava:comp/env/
を付加する必要があります。これは、コンテナが環境変数を格納する場所です。
詳細は、「初期コンテキスト・ファクトリの構成」を参照してください。
|
Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|