| Oracle Application Server Containers for J2EE サーブレット開発者ガイド 10gリリース2(10.1.2) B15633-02 |
|
一般的に使用されているオープン・ソース・フレームワークおよびユーティリティには、Oracle Application Server 10gリリース2(10.1.2)でOC4Jとともに使用できるものがあります。この付録では、そのうちの2つ、Jakarta StrutsおよびJakarta log4jを構成および使用する方法を説明します。
ここでは、OC4Jスタンドアロン環境での、これらのオープン・ソース・ユーティリティの構成および使用について説明します。次の各項で詳細に説明します。
次の各項で、Jakarta StrutsをOC4Jスタンドアロン環境で使用するための手順について説明します。
Jakarta Strutsは、オープン・ソース・フレームワークで、Javaサーブレット、JavaServer PagesおよびXMLなどのオープン・スタンダードを使用したWebアプリケーションの開発を支援します。Strutsは、Model-View-Controller(MVC)パターンに基づいたモジュール化アプリケーション開発モデルをサポートしています。Strutsを使用することにより、業界標準や実証済設計モデルに基づき、アプリケーションの拡張可能な開発環境を作成できます。
次の各項で、Strutsライブラリ、ドキュメントおよびサンプル・アプリケーションをOC4Jスタンドアロン環境にインストールする方法について説明します。このマニュアルでは、Strutsを使用したアプリケーションの構築方法は説明しません。StrutsのWebサイトにあるユーザー・ガイド、インストール・ガイドおよびその他のドキュメントを参照してください。次のサイトから入手可能です。
http://struts.apache.org http://struts.apache.org/learning.html
Strutsの配布版は、次のサイトから入手可能です。
http://struts.apache.org/
アーカイブ・ファイルをこのサイトからダウンロードします。プラットフォームに合ったフォーマット(ZIPファイルまたは圧縮済のTARファイル)を選択し、ローカル・ファイル・システムに保存します。
WinZipまたはTARなど、プラットフォームに合ったツールを使用して、ダウンロードしたStrutsバイナリ配布版のアーカイブ・ファイルを解凍します。これにより、次のディレクトリ構造が作成されます(Struts 1.0.2リリースの場合)。
jakarta-struts-1.0.2/INSTALL jakarta-struts-1.0.2/LICENSE jakarta-struts-1.0.2/README jakarta-struts-1.0.2/lib/jdbc2_0-stdext.jar jakarta-struts-1.0.2/lib/struts.jar jakarta-struts-1.0.2/lib/struts.tld jakarta-struts-1.0.2/lib/struts-bean.tld jakarta-struts-1.0.2/lib/struts-config_1_0.dtd jakarta-struts-1.0.2/lib/struts-form.tld jakarta-struts-1.0.2/lib/struts-html.tld jakarta-struts-1.0.2/lib/struts-logic.tld jakarta-struts-1.0.2/lib/struts-template.tld jakarta-struts-1.0.2/lib/web-app_2_2.dtd jakarta-struts-1.0.2/lib/web-app_2_3.dtd jakarta-struts-1.0.2/webapps/struts-blank.war jakarta-struts-1.0.2/webapps/struts-documentation.war jakarta-struts-1.0.2/webapps/struts-example.war jakarta-struts-1.0.2/webapps/struts-exercise-taglib.war jakarta-struts-1.0.2/webapps/struts-template.war jakarta-struts-1.0.2/webapps/struts-upload.war
Strutsドキュメントは、Webアプリケーションとして、StrutsアーカイブのwebappsディレクトリのWARファイル内に用意されています。次の手順を、選択したStrutsのバージョンに合せて使用し、StrutsドキュメントWebアプリケーションをOC4Jデフォルト・アプリケーションにデプロイします。
構成ファイルは、j2ee/home/configディレクトリに存在します。
application.xmlに、struts-documentation.warファイル用に新規の<web-module>要素を追加します。この要素は、ファイル内に存在している任意の<web-module>要素の後に置きます。Strutsバイナリ配布版を解凍したディレクトリのパスを指定します。次にエントリの例を示します。
<orion-application ... > ... <web-module id="struts-documentation" path="your_path/jakarta-struts-1.0.2/webapps/struts-documentation.war" /> ... </orion-application>
http-web-site.xmlに、ドキュメントWebアプリケーションをURLコンテキスト・パスにバインドするための新規<web-app>要素を追加します。この要素は、ファイル内に存在している任意の<web-app>要素の後に置きます。次に、/struts/docをStrutsドキュメントのURLコンテキスト・パスに指定するエントリの例を示します。
<web-site ... > ... <web-app application="default" name="struts-documentation" root="/struts/doc" /> ... </web-site>
OC4Jのデフォルト・アプリケーションを使用するためのapplication="default"設定に注意してください。OC4JにデプロイされるWebアプリケーションは、すべてJ2EEアプリケーション内に存在する必要があります。通常、このために、WebアプリケーションのWARファイルをJ2EEアプリケーションのEARファイル内にパッケージ化します。ただし、この例のように、OC4Jデフォルト・アプリケーションを使用してスタンドアロンWARファイルをデプロイして、手順を簡略化することもできます。
% java -jar oc4j.jar
次のような出力が表示されます。
Auto-unpacking /java/jakarta-struts-1.0.2/webapps/struts-documentation.war ... done. Oracle Application Server (10.1.2.0.0) Containers for J2EE initialized
struts-documentation.warを解凍すると、jakarta-struts-1.0.2/webappsディレクトリの下にstruts-documentationディレクトリおよびサブディレクトリが作成および移入されます。
http-web-site.xmlで指定したURLコンテキスト・パスを使用してドキュメントにアクセスします。
http://host:8888/struts/doc
StrutsドキュメントのWelcomeページが表示されます。
Strutsバイナリ配布版には、サンプルWebアプリケーションがwebappsディレクトリのWARファイル内に用意されています。ドキュメントWebアプリケーションと同様、StrutsサンプルWebアプリケーションもOC4Jデフォルト・アプリケーションにデプロイできます。次の手順を、選択したStrutsのバージョンに合せて使用します。構成ファイルは、j2ee/home/configディレクトリに存在します。
application.xmlに、struts-example.warファイル用に新規の<web-module>要素を追加します。Strutsバイナリ配布版を解凍したディレクトリのパスを指定します。次にエントリの例を示します。
<web-module id="struts-example" path="your_path/jakarta-struts-1.0.2/webapps/struts-example.war" />
これを、struts-documentation.war用に作成した<web-module>要素の直後に追加します。
http-web-site.xmlに、サンプルWebアプリケーションをURLコンテキスト・パスにバインドするための新規の<web-app>要素を追加します。次に、/struts/exampleをサンプルWebアプリケーションのURLコンテキスト・パスに指定するエントリの例を示します。
<web-app application="default" name="struts-example" root="/struts/example" />
これを、ドキュメントWebアプリケーション用に作成した<web-app>要素の直後に追加します。
ドキュメントWebアプリケーションと同様、application="default"設定を使用すると、OC4Jデフォルト・アプリケーション内にサンプルWebアプリケーションが含まれます。
% java -jar oc4j.jar
次のような出力が表示されます。
Auto-unpacking /java/jakarta-struts-1.0.2/webapps/struts-example.war ...done. Oracle Application Server (10.1.2.0.0) Containers for J2EE initialized
struts-example.warを解凍すると、jakarta-struts-1.0.2/webappsディレクトリの下にstruts-exampleディレクトリおよびサブディレクトリが作成および移入されます。
http-web-site.xmlで指定したURLコンテキスト・パスを使用してサンプルWebアプリケーションにアクセスします。
http://host:8888/struts/example
Strutsサンプル・アプリケーションのWelcomeページが表示されます。
Strutsフレームワークを使用してユーザー・アプリケーションをデプロイするには、Strutsライブラリから必要な部分をユーザー・アプリケーションのWARファイルにパッケージ化し、Strutsコンポーネントの必須エントリを使用して、標準のweb.xmlデプロイメント・ディスクリプタを構成します。すると、WebアプリケーションがWARファイルとして作成およびパッケージ化されます。
次の手順を、選択したStrutsのバージョンに合せて使用します。
libディレクトリからユーザー・アプリケーションの/WEB-INF/libディレクトリに、Strutsライブラリをコピーします。次に、UNIX環境(アーカイブ・ファイルを解凍したディレクトリから)の例を示します。「%」はシステム・プロンプトです。
% cp jakarta-struts-1.0.2/lib/struts.jar web-inf/lib
.tldファイル)を、Strutsのlibディレクトリからユーザー・アプリケーションの/WEB-INFディレクトリにコピーします。
% cp jakarta-struts-1.0.2/lib/*.tld web-inf
web.xmlファイルに追加します。
MessageResourceファイル、Struts構成ファイルの名前と位置、およびデバッグ・レベルなどの追加プロパティも指定できます。)<servlet>要素は、トップレベルの<web-app>要素のサブ要素です。
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>ApplicationResources</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet>
<servlet>要素でサーブレット・クラスにマップ済)をURLサーブレット・パスにマップします。<servlet-mapping>要素は、トップレベルの<web-app>要素のサブ要素です。
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
/WEB-INFディレクトリに置かれていることを前提としています。<taglib>要素は、トップレベルの<web-app>要素のサブ要素です。
<taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib>
これで、Webアプリケーションが、Strutsフレームワークを活用するアプリケーションのデプロイをサポートできます。
JSPページ、サーブレット、Strutsコンポーネントおよびその他のファイルを含めたWebアプリケーションの残りの部分をWARファイルに追加すると、アプリケーションをOC4Jにデプロイできます。
次の各項で、Jakarta log4jをOC4Jスタンドアロン環境で使用するための考慮事項について説明します。
log4jフレームワークは、Javaアプリケーションの実行時ロギング処理をサポートするための効率的で柔軟なAPIを提供するオープン・ソース・プロジェクトです。log4jを使用することにより、様々なレベルの警告でメッセージを取り込み、ログ文をコードに挿入することが可能になります。また、システム管理者は、提供されたアプリケーション・コードを変更することなく、アプリケーションの実行時に表示するロギングのレベルを個別に定義できます。
log4jの機能を使用すると、アプリケーションのバイナリ・ファイルを変更せずに、実行時にロギングを行うことが可能です。パフォーマンスを著しく低下せずに、文を出荷時のコードに残しておくことができます。ロギングは構成ファイルによって制御されるため、アプリケーションのバイナリを変更する必要がありません。
次の各項で、log4jライブラリをインストールし、OC4Jで使用するために構成する方法を説明します。幅広いOC4J APIの使用方法はOC4J固有ではないため、このマニュアルでは説明しません。公式のlog4jのWebサイトにあるドキュメントを参照してください。次のサイトから入手可能です。
http://jakarta.apache.org/log4j/docs/index.html http://jakarta.apache.org/log4j/docs/documentation.html
log4j配布版は、次のサイトから入手可能です。
http://jakarta.apache.org/log4j/docs/download.html
アーカイブ・ファイルをこのサイトからダウンロードします。プラットフォームに合ったフォーマット(ZIPファイルまたは圧縮済のTARファイル)を選択し、ローカル・ファイル・システムに保存します。
WinZipまたはTARなど、プラットフォームに合ったツールを使用して、ダウンロードしたlog4jアーカイブ・ファイルを解凍します。これにより、次のディレクトリ構造が作成および移入されます。
jakarta-log4j-1.2.8/ build/ contrib/ ... dist/ classes/ ... lib/ docs/ ... examples/ ... src/ ...
(一部のディレクトリ構造は示されていません。これ以外にもサブディレクトリがあります。)
J2EEアプリケーションでlog4jの機能を使用するには、log4jライブラリがOC4Jのクラスローダーによって使用できる必要があります。処理要件により、いくつかの方法があります。たとえば、log4jライブラリをシステムまたはグローバル・アプリケーション・レベルでインストールすることにより、コンテナにデプロイされたすべてのアプリケーションで使用できるようにすることが可能です。また、log4jライブラリを、特定のアプリケーションのライブラリとしてパッケージ化することも可能です。アプローチにより、構成ファイルの自動ロードの方法など、異なる処理特性が見られます。使用できるアプローチとその利点や弱点に関する詳細は、log4jのWebサイトおよびユーザー・メーリング・リストを参照してください。
次の各項で、log4jをOC4Jで使用するための3種類の方法を説明します。
log4jライブラリをOC4Jのグローバル・アプリケーション・レベルでインストールするには、log4jのlibディレクトリのlog4j JARファイル(log4j-1.2.8.jarなど)をj2ee/home/applibディレクトリにコピーします。デフォルトでは、j2ee/home/config/application.xmlグローバル・アプリケーション・ディスクリプタの<library>要素によって、OC4Jインスタンスにデプロイされるすべてのアプリケーションが共有するライブラリで、このディレクトリを使用できるようになります。OC4Jは、実行時にapplibディレクトリ内のすべてのライブラリを自動的にロードします。次に、UNIX環境(アーカイブ・ファイルを解凍したディレクトリから)の例を示します。「%」はシステム・プロンプトです。
% cp jakarta-log4j-1.2.8/dist/lib/log4j-1.2.8.jar j2ee/home/applib
log4jライブラリを特定のWebアプリケーション用にパッケージ化するには、log4jのlibディレクトリのlog4j JARファイル(log4j-1.2.8.jarなど)をWebアプリケーションの/WEB-INF/libディレクトリにコピーします。Webアプリケーションのクラスローダーにより、実行時にサーブレット・コンテナがWebアプリケーションでlog4jライブラリを使用できるようにします。次に、UNIX環境(アーカイブ・ファイルを解凍したディレクトリから)の例を示します。「%」はシステム・プロンプトです。
% cp jakarta-log4j-1.2.8/dist/lib/log4j-1.2.8.jar web-inf/lib
EJBコンポーネントおよびWebコンポーネントによって構成され、すべてがlog4jを使用するアプリケーションが存在する場合、両方のコンポーネント・セットが使用できる1つの共有ライブラリとしてlog4jライブラリをパッケージ化できます。
J2EEのクラスロード・メカニズムでは、EJBアプリケーションと同じEARファイル内にデプロイされているWebアプリケーションは、EJBクラスローダーで使用可能なクラスにアクセスできます。log4jをEJBアプリケーションのライブラリにすると、Webアプリケーションのライブラリにもなります。
EJBクラスローダーおよびWebクラスローダーは、EARファイルのMETA-INF/Manifest.mfファイルのClass-Path属性で指定されているすべてのライブラリにアクセスできます。ライブラリのJARファイルは、Class-Pathエントリを持つファイル(EARファイルなど)に対して相対的にロードされるため、そのファイルと同じディレクトリに格納されます。この機能を使用することにより、log4jのJARファイルをEJBのJARファイルと同じディレクトリ内に置き、マニフェスト・ファイルで必須ライブラリとして参照することが可能です。また、同じEARファイル内のWebアプリケーションからもEJBコンポーネントのクラスを認識できるため、これらのWebアプリケーションからもlog4jライブラリにアクセスできるようになります。
図A-1に、J2EEアプリケーションのクラスロード階層を示します。
log4jフレームワークを使用すると、外部構成ファイルで指定された設定によってロギング動作を制御し、アプリケーション・コードを変更せずにロギング動作に変更を加えることができます。
外部構成ファイルを使用する方法は、主に3種類あります。各アプローチにより、構成ファイルの名付け方、および実行時にJ2EEアプリケーション・サーバーによってどのように検索されるかが異なります。
次の各項で、これら3種類の方法を説明します。
デフォルトで、log4jはロギング動作の決定に、log4j.propertiesまたはlog4j.xmlという名前の構成ファイルを使用します。log4jは、実行時に使用可能なクラスローダーから、これらのファイルを自動的にロードします。両方のファイルが検出された場合、log4j.xmlが優先されます。
自動構成ファイルを使用するには、OC4Jが使用するCLASSPATHに含まれるディレクトリ内に入れます。次に、これに含まれるものを、ロードの優先順位によって示します。
j2ee/home/applib
/WEB-INF/classes
log4jの自動構成に、デフォルト・ファイル名を使用するかわりに代替ファイル名を使用できます。これには、次のように、OC4Jの起動時に追加実行時プロパティを指定します。「%」はシステム・プロンプトで、urlは使用する構成ファイルの位置を指定します。
% java -Dlog4j.configuration=url
log4j.configurationプロパティの指定値が絶対URLの場合、log4jはURLを直接ロードし、構成ファイルとして使用します。
指定値が絶対URLでない場合、log4jは使用可能なクラスローダーからロードする構成ファイルの名前として指定値を使用します。
たとえば、OC4Jを次のように起動したとします(折り返された1行のコマンドラインであるとします)。
% java -Dlog4j.debug=true -Dlog4j.configuration=file:///d:¥temp¥foobar.xml -jar oc4j.jar
この場合、log4jはファイルd:¥temp¥foobar.xmlを構成ファイルとしてロードします。
別の例として、OC4Jを次のように起動したとします。
% java -Dlog4j.debug=true -Dlog4j.configuration=foobar.xml -jar oc4j.jar
この場合、log4jは使用可能なクラスローダーからfoobar.xmlをロードします。これは、デフォルトの自動構成ファイルlog4j.xmlを使用する場合と同じ仕組みですが、かわりに指定されたファイル名を使用します。
自動構成ファイルのローディング・メカニズムに依存するかわりに、一部のアプリケーションでは、外部構成ファイルのロードにプログラム的なアプローチを使用します。この場合、構成ファイルのパスは、アプリケーション・コード内で直接提供されます。これにより、アプリケーションごとに異なるファイル名を使用できます。log4jユーティリティはロギング動作を決定するために、指定された構成ファイル(XML文書またはプロパティ・ファイル)をロードおよび解析します。
次に例を示します。
public void init(ServletContext context) throws ServletException { // Load the barfoo.xml file as the log4j external configuration file. DOMConfigurator("barfoo.xml"); logger = Logger.getLogger(Log4JExample.class); }
この場合、log4jはOC4Jの起動ディレクトリからbarfoo.xmlをロードします。
プログラム的なアプローチを使用すると、開発者やシステム管理者は最大の柔軟性が得られます。構成ファイルには任意の名前を使用でき、任意の位置からロードできます。この場合でも、システム管理者は、アプリケーション・コードを変更せずに、外部構成ファイルによってロギング動作を変更できます。
さらに柔軟性を確保し、アプリケーションに特定の名前と位置をコードしない場合は、ファイル名と位置を標準web.xmlデプロイメント・ディスクリプタ内のパラメータとして提供すると便利です。サーブレットまたはJSPページは、構成ファイルの位置と名前を指定するパラメータ値を読み取り、構成ファイルのロード元の位置を動的に構成します。このプロセスにより、システム管理者は、使用する構成ファイルの名前と位置の両方を選択できます。
次に、構成ファイルの名前と位置を指定しているweb.xmlエントリの例を示します。
<context-param> <param-name>log4j-config-file</param-name> <param-value>/web-inf/classes/app2-log4j-config.xml</param-value> </context-param>
アプリケーションは、デプロイメント・ディスクリプタから位置の値を読み取り、ローカル・ファイル・システム上でファイルへのフルパスを構成し、ファイルをロードします。次に、サンプル・コードを示します。
public void init(ServletContext context) throws ServletException { /* * Read the path to the config file from the web.xml file, * should return something line /web-inf/xxx.xml or web-inf/classes/xxx.xml. */ String configPath = context.getInitParameter("log4j-config-file"); /* * This loads the file based on the base directory of the web application * as it is deployed on the application server. */ String realPath = context.getRealPath(configPath); if(realPath!=null) DOMConfigurator.configure(realPath); _logger = Logger.getLogger(Log4JExample.class); }
log4jおよび外部構成ファイルを使用するアプリケーションをOC4Jにデプロイする際、log4jがリクエストされた構成ファイルを検索およびロードする方法を表示すると便利な場合があります。これを行うため、log4jではデバッグ・モードが用意されています。デバッグ・モードを使用すると、構成ファイルのロード方法が表示されます。
log4jのデバッグ・モードをオンにするには、次のようにして、OC4Jの起動時に追加実行時プロパティを指定します(「%」はシステム・プロンプトです)。
% java -Dlog4j.debug=true -jar oc4j.jar
OC4Jにより、次のような出力が表示されます。
Oracle Application Server (10.1.2.0.0) Containers for J2EE initialized log4j: Trying to find [log4j.xml] using context classloader [ClassLoader: [[D:¥myprojects¥java¥log4j¥app1¥webapp1¥WEB-INF¥classes], [D:¥myprojects¥java¥log4j¥app1¥webapp1¥WEB-INF¥lib/log4j-1.2.7.jar]]]. log4j: Using URL [file:/D:/myprojects/java/log4j/app1/webapp1/WEB-INF/classes/ log4j.xml] for automatic log4j configuration. log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator log4j: System property is :null log4j: Standard DocumentBuilderFactory search succeded. log4j: DocumentBuilderFactory is: oracle.xml.jaxp.JXDocumentBuilderFactory log4j: URL to log4j.dtd is [classloader:/org/apache/log4j/xml/log4j.dtd]. log4j: debug attribute= "null". log4j: Ignoring debug attribute. log4j: Threshold ="null". log4j: Level value for root is [debug]. log4j: root level set to DEBUG log4j: Class name: [org.apache.log4j.FileAppender] log4j: Setting property [file] to [d:/temp/webapp1.out]. log4j: Setting property [append] to [false]. log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" log4j: Setting property [conversionPattern] to [%n%-5p %d{DD/MM/yyyy} d{HH:mm:ss} [%-10c] [%r]%m%n]. log4j: setFile called: d:/temp/webapp1.out, false log4j: setFile ended log4j: Adding appender named [FileAppender] to category [root].
|
![]() Copyright © 2002, 2005 Oracle Corporation. All Rights Reserved. |
|