Oracle® Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発 11g リリース 1 (10.3.1) B55521-01 |
|
戻る |
次へ |
以下の節では、Web アプリケーション リソースをコンフィグレーションする方法について説明します。
Web アプリケーションで使用するリソースは、通常 Web アプリケーションの外部にデプロイされます。オプションとして、JDBC データソースを EAR ファイルの一部として Web アプリケーションのスコープの中でデプロイできます。
Web アプリケーションで外部リソースを使用するには、web.xml
および weblogic.xml
デプロイメント記述子を使用して、アプリケーションが使用する JNDI リソース名をグローバル JNDI リソース名で解決する必要があります。web.xml
ファイルは、Web アプリケーションの WEB-INF
ディレクトリにあります。詳細については、「リソースのコンフィグレーション」を参照してください。
JDBC データソースは、weblogic-application.xml デプロイメント記述子内でそれらのリソースをコンフィグレーションすることによって、Web アプリケーション EAR ファイルの一部としてデプロイすることもできます。スコープがアプリケーションとして定義された、EAR ファイルの一部としてデプロイされるリソースを、アプリケーション スコープ リソースと呼びます。これらのリソースは、アプリケーションに対してはプライベートなままであり、アプリケーション コンポーネントは「リソースのコンフィグレーション」で説明するように <resource-ref>
を追加することで、リソース名にアクセスできます。
Web アプリケーションから JNDI (Java Naming and Directory Interface) を介してデータソースなどのリソースにアクセスする場合、コード内でルックアップする JNDI 名を、グローバル JNDI ツリーにバインドされている実際の JNDI 名にマップできます。このマッピングを行うには、web.xml
と weblogic.xml
の両方のデプロイメント記述子を使用します。このマッピングにより、アプリケーション コードを変更せずにこれらのリソースを変更できるようになります。デプロイメント記述子には、Java コードで使用される名前、JNDI ツリーにバインドされているとおりのリソースの名前、リソースの Java タイプを指定します。また、リソースのセキュリティをサーブレットによってプログラム的に処理するか、または HTTP リクエストに関連付けられる資格に基づいて処理するかを指定します。また、JMS モジュールのリソース (キュー、トピック、接続ファクトリなど) にアクセスすることもできます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JMS のコンフィグレーションと管理』の「JMS アプリケーション モジュールのデプロイメントのコンフィグレーション」を参照してください。
リソースをコンフィグレーションするには、次の手順に従います。
コードで使用するリソース名、Java タイプ、およびセキュリティ認可タイプをデプロイメント記述子に入力します。
リソース名を JNDI 名にマップします。
次の例に、外部データソースの使用方法を示します。この例は、accountDataSource
というデータ ソースが定義されていることを前提としています。詳細については、Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「JDBC データ ソースの作成」を参照してください。
コード リスト 7-1 外部データソースの使用例
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource"); web.xml entries: <resource-ref> . . . <res-ref-name>myDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>CONTAINER</res-auth> . . . </resource-ref> weblogic.xml entries: <resource-description> <res-ref-name>myDataSource</res-ref-name> <jndi-name>accountDataSource</jndi-name> </resource-description>
Web アプリケーションは、外部参照を使用することによって、異なるアプリケーション (異なる EAR ファイル) の一部としてデプロイされた EJB にアクセスできます。参照される EJB は、その weblogic-ejb-jar.xml
デプロイメント記述子のグローバル JNDI ツリーに名前をエクスポートします。Web アプリケーション モジュールでの EJB 参照は、ejb-reference-description
要素をその weblogic.xml
デプロイメント記述子に追加することによって、このグローバル JNDI 名にリンクできます。
この手順は、Web アプリケーションと EJB との間接レベルを提供しており、サード パーティの EJB や Web アプリケーションを使用していて、EJB を直接呼び出すコードを変更できない場合に便利です。ほとんどの場合、この間接機能を使用しなくても EJB は直接呼び出すことができます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。
Web アプリケーションで使用するために外部 EJB を参照するには、次の手順に従います。
コード内で EJB をルックアップするために使用する EJB 参照名、Java クラス名、EJB のホームおよびリモート インタフェースのクラス名を、J2EE 標準のデプロイメント記述子 web.xml
の ejb-ref
要素に入力します (web.xml
ファイルは、Web アプリケーションの WEB-INF
ディレクトリにあります)。
WebLogic 固有のデプロイメント記述子である weblogic.xml
の ejb-reference-description
要素にある参照名を、weblogic-ejb-jar.xml
ファイルに定義された JNDI 名にマップします。
Web アプリケーションがエンタープライズ アプリケーション アーカイブ (EAR ファイル) の一部である場合は、J2EE 標準のデプロイメント記述子 web.xml
の ejb-link
要素のある EAR で使用される名前で EJB を参照できます。
web.xml
デプロイメント記述子の ejb-ref
要素では、サーブレットまたは JSP のいずれかが特定の EJB を使用することを宣言します。weblogic.xml
デプロイメント記述子の ejb-reference-description
要素で、その参照を EJB にバインドします。バインドされた EJB はグローバル JNDI ツリーに通知されます。
ejb-reference-descriptor
要素は、ejb-ref-name
要素を使って解決する ejb-ref
要素を示します。つまり、同じ ejb-ref-name
要素を持つ ejb-reference-descriptor
要素と ejb-ref
要素を同時に使用できます。
ejb-link
構文が追加されたことによって、EJB を使用するサーブレットまたは JSP と使用される EJB が同じアプリケーション内にある場合には、ejb-reference-descriptor
要素は不要になりました。
ejb-ref-name
要素は、web.xml
デプロイメント記述子内で次の 2 つの役割を果たします。
ユーザ コード (サーブレットまたは JSP) が EJB のルックアップに使用する名前。したがって、ejb-ref-name
要素が ejb1
である場合は、java:comp/env
を基準とした相対的な ejb1
の JNDI 名ルックアップを行います。ejb-ref-name
要素は、サーブレットまたは JSP が組み込まれた Web アプリケーションのコンポーネント環境 (java:comp/env
) にバインドされます。
ejb-ref-name
要素を ejb1
とした場合、サーブレットまたは JSP のコードは次のようになります。
Context ctx = new InitialContext(); ctx = (Context)ctx.lookup("java:comp/env"); Object o = ctx.lookup("ejb1"); Ejb1Home home = (Ejb1Home) PortableRemoteObject.narrow(o, Ejb1Home.class);
ejb-ref
要素と ejb-reference-descriptor
要素のリンク。
アプリケーションの内部で、WebLogic Server は、他のアプリケーション コンポーネントによって参照される EJB を、参照するコンポーネントに関連付けられた環境にバインドします。これらのリソースは、java:comp/env
を基準とした相対的な JNDI 名のルックアップを通じて、実行時にアクセスされます。
EJB と Web アプリケーションを含むアプリケーション (エンタープライズ アプリケーションとも呼ばれる) のアプリケーション デプロイメント記述子 (application.xml
) の例を以下に示します (簡潔に示すために、この例では XML ヘッダは省略しています)。
コード リスト 7-2 デプロイメント記述子の例
<application> <display-name>MyApp</display-name> <module> <web> <web-uri>myapp.war</web-uri> <context-root>myapp</context-root> </web> </module> <module> <ejb>ejb1.jar</ejb> </module> </application>
Web アプリケーションのコードで ejb1.jar
内の EJB を使用できるようにするには、J2EE 標準の Web アプリケーション デプロイメント記述子 web.xml
に、JAR ファイルを参照する ejb-link
と、呼び出される EJB の名前を含む ejb-ref
スタンザが含まれている必要があります。
ejb-link
エントリのフォーマットは以下のようにする必要があります。
filename#ejbname
filename
は Web アプリケーションに対する相対的な JAR ファイル名、ejbname
はその JAR ファイル内の EJB です。ejb-link
要素は以下のようになります。
<ejb-link>../ejb1.jar#myejb</ejb-link>
JAR のパスは WAR ファイルに対して相対的なので、「../
」で始まります。また、ejbname
がそのアプリケーション全体でユニークな場合、JAR のパスは省略してもかまいません。その結果、エントリは以下のようになります。
<ejb-link>myejb</ejb-link>
ejb-link
要素は、Web アプリケーションの web.xml
記述子に含まれる ejb-ref
要素の下位要素です。ejb-ref
要素は以下のようになります。
コード リスト 7-3 <ejb-ref> 要素
<web-app> ... <ejb-ref> <ejb-ref-name>ejb1</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>mypackage.ejb1.MyHome</home> <remote>mypackage.ejb1.MyRemote</remote> <ejb-link>../ejb1.jar#myejb</ejb-link> </ejb-ref> ... </web-app>
この例で ejb-link
要素の構文は次のとおりです。
<ejb-link>../ejb1.jar#ejb1</ejb-link>,
この構文で #
の左側の部分は、参照される EJB モジュールの相対パスです。#
の右側の構文は、そのモジュールで参照される特定の EJB です。上記の例では、EJB の JAR ファイルと WAR ファイルが同じレベルにあります。
ejb-link
で参照される名前 (この例では myejb
) は、参照される EJB の記述子の ejb-name
要素に対応しています。その結果、この ejb-ref
が参照している EJB モジュールのデプロイメント記述子 (ejb-jar.xml
) には、以下のようなエントリが必要です。
コード リスト 7-4 <ejb-jar> 要素
<ejb-jar> ... <enterprise-beans> <session> <ejb-name>myejb</ejb-name> <home>mypackage.ejb1.MyHome</home> <remote>mypackage.ejb1.MyRemote</remote> <ejb-class>mypackage.ejb1.MyBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> ... </ejb-jar>
ejb-name
要素は myejb
に設定されています。
実行時に、Web アプリケーション コードが java:/comp/env
に基づいて EJB の JNDI 名をルックアップすることを確認します。サーブレット コードの例は以下のとおりです。
MyHome home = (MyHome)ctx.lookup("java:/comp/env/ejb1");
この例で使用される名前 (ejb1) は、上記の web.xml
の抜粋の ejb-ref
要素で定義される ejb-ref-name です。
システム CLASSPATH
から、または Web アプリケーションの WEB-INF/classes
ディレクトリからクラスまたは他のリソースを提供する必要がある場合、ClasspathServlet
と呼ばれる特殊なサーブレットを使用できます。ClasspathServlet
はアプレットまたは RMI クライアントを使用し、サーバサイド クラスへのアクセスを必要とするアプリケーションで役に立ちます。ClasspathServlet
は暗黙的に登録され、任意のアプリケーションから利用できます。
ClasspathServlet
は、デフォルトでは常に有効です。無効にするには、ServerMBean
のパラメータ ClassPathServletDisabled
を true
に設定します (デフォルトは false
)。
ClasspathServlet
はシステム CLASSPATH
から次の順序でクラスまたはリソースを返します。
WEB-INF/classes
WEB-INF/lib/*
の下の jar ファイル
システム CLASSPATH
Web アプリケーションの WEB-INF/classes
ディレクトリからリソースを提供する場合、次のような URL でリソースを呼び出します。
http://server:port/myWebApp/classes/my/resource/myClass.class
この場合、リソースは Web アプリケーションのルートを基準にした次のディレクトリにあります。
WEB-INF/classes/my/resource/myClass.class
注意 : ClasspathServlet はシステム CLASSPATH にあるすべてのリソースを提供するので、システム CLASSPATH には公開できないリソースは置かないでください。 |
注意 : WebLogic Server には、レガシー CGI (Common Gateway Interface) スクリプトのサポート機能が用意されています。しかし、新しいプロジェクトでは、HTTP サーブレットまたは JavaServer Pages を使用することをお勧めします。 |
WebLogic Server は、CGIServlet
という内部 WebLogic サーブレットを介してすべての CGI スクリプトをサポートします。CGI を使用するには、この CGIServlet
を Web アプリケーション デプロイメント記述子に登録します。「クライアントによる Web アプリケーションへのアクセス方法のコンフィグレーション」を参照してください。
WebLogic Server で CGI をコンフィグレーションするには、次の手順に従います。
J2EE 標準の Web アプリケーション デプロイメント記述子 web.xml
内の servlet
および servlet-mapping
要素を使用して、Web アプリケーション内で CGIServlet
を宣言します。web.xml
ファイルは、Web アプリケーションの WEB-INF
ディレクトリにあります。CGIServlet
のクラス名は、weblogic.servlet.CGIServlet
です。このクラスを Web アプリケーションにパッケージ化する必要はありません。
次の init-param
要素を定義して、CGIServlet
用の次の初期化属性を登録します。
cgiDir
- CGI スクリプトが存在するディレクトリのパス。複数のディレクトリを指定するには、セミコロン「;
」(Windows) またはコロン「:
」(UNIX) で区切ります。cgiDir
を指定しない場合、Web アプリケーション ルートの下の cgi-bin
がデフォルトのディレクトリとなります。
useByteStream
- デフォルトでは、CGI スクリプトの出力の読み取りには、文字ストリームが使用されます。スクリプトによりバイナリ データが生成される際、文字エンコーディングのせいでストリームが破損する場合があります。ストリームが破損しないようにするには、useByteStream パラメータを使用します。このパラメータを ASCII 出力に使用すると、パフォーマンスの向上にもつながります。
extension mapping
- スクリプトを実行する実行可能ファイルまたはインタープリタにファイル拡張子をマップします。スクリプトが実行可能ファイルを必要としない場合、この初期化属性は省略可能です。
拡張子マッピング用の param-name
は、*.pl
のように、アスタリスク、ドット、ファイル拡張子の順で指定する必要があります。
param-value
は、スクリプトを実行するインタープリタまたは実行可能ファイルへのパスを含んでいます。個別のマッピングに独立した init-param
要素を作成すると、複数のマッピングを作成できます。
コード リスト 7-5 CGIServlet の登録に使用する Web アプリケーション デプロイメント記述子エントリの例
<servlet> <servlet-name>CGIServlet</servlet-name> <servlet-class>weblogic.servlet.CGIServlet</servlet-class> <init-param> <param-name>cgiDir</param-name> <param-value> /bea/wlserver6.0/config/mydomain/applications/myWebApp/cgi-bin </param-value> </init-param> <init-param> <param-name>*.pl</param-name> <param-value>/bin/perl.exe</param-value> </init-param> </servlet> ... <servlet-mapping> <servlet-name>CGIServlet</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
Perl スクリプトを要求するために使用する URL は、次のパターンに従う必要があります。
http://host:port/myWebApp/cgi-bin/myscript.pl
各値の説明は次のとおりです。
host:port
- WebLogic Server のホスト名とポート番号
myWebApp
- Web アプリケーションの名前
cgi-bin
- CGIServlet
にマップされる url-pattern
名
myscript.pl
- cgiDir
初期化属性で指定したディレクトリに存在する Perl スクリプトの名前