Oracle Containers for J2EE JavaServer Pages開発者ガイド 10g(10.1.3.1.0) B31860-01 |
|
この章では、Oracle Application ServerのコンポーネントであるOracle Containers for J2EE(OC4J)付属のWebコンテナが実装する機能の詳細を説明します。Oracle Application Server、OC4J、OC4J JSPの実装と機能、および提供されているカスタム・タグ・ライブラリとユーティリティ(『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照)の概要を説明します。
次の項目について説明します。
Oracle Containers for J2EE 10gリリース3(10.1.3)、略称OC4Jは、完全なJava 2 Enterprise Edition(J2EE)1.4準拠の環境を提供します。スタンドアロンOC4Jは、開発環境および小規模から中規模の本番環境で使用されます。
OC4Jは、すべてJavaで作成されており、標準のJava Development Kit(JDK)のJava仮想マシン(JVM)で実行されます。ご使用のオペレーティング・システムの標準のJDKでOC4Jを実行できます。
OC4Jのドキュメントでは、Javaプログラミング、J2EEテクノロジ、およびWebとEJBアプリケーション・テクノロジについて、基本的な知識があることを前提としています。これには、/WEB-INF
や/META-INF
ディレクトリなどのデプロイ規則が含まれます。
Oracle Containers for J2EEリリース3(10.1.3)には、いくつかの新機能や拡張機能が含まれています。これらについて、次に説明します。
OC4Jでは、J2EE 1.4標準(JAX-RPC 1.1を含む)に基づいたWebサービスを完全にサポートしています。また、Webサービスの相互運用性もサポートしています。
OC4Jは、J2EE環境でアプリケーションをデプロイおよび管理するための新しい標準を定義している、次の仕様をサポートしています。
Oracle Application Server TopLinkは、高機能なオブジェクトの永続化フレームワークで、幅広いJava 2 Enterprise Edition(J2EE)やJavaアプリケーションのアーキテクチャに使用できます。OracleAS TopLinkは、OC4Jのコンテナ管理の永続性(CMP)コンテナと、Bean管理の永続性(BMP)開発を単純化するベース・クラスもサポートしています。
OracleAS Job Schedulerは、J2EEアプリケーションに非同期スケジュール・サービスを提供します。主な機能には、ジョブの発行、制御および監視機能が含まれます。ジョブとは、作業が行われる際に実行される作業単位と定義されています。
OC4Jの新しい分散トランザクション・マネージャでは、あらゆる種類のXAリソース間で2フェーズ・トランザクションを調整できます。XAリソースには、Oracleデータベースに加え、他のベンダーやJMSプロバイダのデータベース(IBM WebsphereMQなど)が含まれます。また、障害時の自動トランザクション・リカバリもサポートしています。
Generic JMS Resource Adapterが、OC4Jの最新バージョンに同梱されるOracleAS JMS、およびIBM Websphere MQ JMSバージョン5.3用のOC4Jプラグインとして使用できるようになりました。
JMS接続をキャッシュできるようにするため、そして同時にグローバル・トランザクションにも正常に参加できるようにするため、遅延トランザクション登録に対するサポートが追加されました。
さらに、Generic JMS Resource Adapterのエラー処理機能が向上しました。エンドポイントは、プロバイダまたはシステム障害後、自動的に再試行を行い、onMessage()
エラーが正しく処理されます。
OC4Jの最新のリリースでは、次の機能が提供されます。
OC4Jは、標準のJ2EEのAPIをサポートおよび認証しています。これらのAPIを表2-1に示します。
OC4Jでは、Oracle HTTP Serverを使用しなくてもHTTPおよびHTTPS通信をネイティブにサポートしています。
デフォルトのWebサイトはhttp-web-site.xml
ファイルで定義されます。このファイルでデフォルトのHTTPリスナーはポート8888
に指定されます。このファイルを応用して、追加のWebサイトを別のポートに定義できます。OC4Jで追加のWebサイトを作成する手順は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
OC4Jでは、OC4Jインスタンスのクラスタ間で、HTTPセッション、ステートフル・セッションでのEnterprise JavaBeansレプリケーションおよびロード・バランシングをサポートしています。ただしこのリリースでは、クラスタの構成および管理はすべて手動で、OC4J固有のアプリケーション構成ファイルを編集することによって行う必要があります。詳細は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
JSPページに関するOC4Jの付加価値機能は、次の3つのカテゴリにグループ化できます。
次の各項では、これらのカテゴリの機能の概要、およびJavaServer Pages標準タグ・ライブラリ(JSTL)に対するOracleサポートの概要について説明します。JSTLサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
OC4J付属のJSPコンテナは、Sun社による次の仕様に完全に準拠しています。
詳細は、これらの仕様を参照してください。
この項では、OC4JのWebコンテナがサポートするOracle固有のプログラミング拡張機能の概要を説明します。
JSP仕様2.0準拠に加え、OC4J Webコンテナには、注目すべき次の機能があります。
「JSPのためのOracleの付加価値機能」も参照してください。
web.xml
ファイルとTLDのXML妥当性チェック用の個別のモード切替え web.xml
の妥当性チェックは、デフォルトでは無効ですが、有効にできます。TLDの妥当性チェックはデフォルトでは無効です。
このフラグを使用して、JSPのデフォルト設定よりも多いJavaパッケージを自動的にインポートします。
複数のWebアプリケーションで共有するタグ・ライブラリJARファイルを配置するディレクトリを指定できます。
JSPページに対してタイムアウト値を指定できます。この値が経過した後に再度リクエストされなかった場合、そのページはメモリーから削除されます。
次の機能もサポートされています。
選択できるモードは、1)自動再ロードまたはJSPページの自動再変換を行わずにJSPページを実行する、2)ページ実装クラス(JavaBeansクラスまたは他の依存クラスを除く)を自動的に再ロードする、3)変更されたJSPページを自動的に再変換する、のいずれかです。
タグ・ハンドラの作成とガベージ・コレクションの時間を節約するために、タグ・ハンドラ・インスタンスのプーリングを必要に応じて有効にできます。これらは、application
スコープにプールされます。ページごとに、または同じページのセクションごとに、異なる設定を使用できます。「タグ・ハンドラの再利用(タグ・プーリング)の無効化または有効化」を参照してください。
JSPページからのNULL出力に対して、デフォルトのNULL文字列のかわりに空の文字列を出力できます。
OC4JのWebコンテナでは、グローバル・インクルードと呼ばれる機能が提供されています。この機能によって、仮想のJSP include
ディレクティブを使用して、指定のディレクトリ内またはディレクトリ下のJSPページに静的にインクルードする1つ以上のファイルを指定できます。変換時に、Webコンテナは、インクルード・ファイルとディレクトリをページに指定する構成ファイル/WEB-INF/ojsp-global-include.xml
を検索します。
この拡張機能は、以前のOracle JSPリリースでglobals.jsa
またはtranslate_params
機能を使用していたアプリケーションを移行する場合に、特に便利です。詳細は、「Oracle JSPのグローバル・インクルード」を参照してください。
DMSによって、OC4Jも含めた多数のOracle Application Serverコンポーネントにパフォーマンス監視機能が追加されます。DMSの目的は、組込みのパフォーマンス測定値を介して、実行時の動作に関する情報を提供することにあります。これによって、ユーザーは、パフォーマンスに関する問題を診断、分析およびデバッグできます。DMSは、この情報を、デプロイ中も含めていつでも使用できるパッケージで提供します。データはHTTPを通じて公開され、ブラウザで表示できます。
OC4JのWebコンテナはDMS機能をサポートし、関連する統計値を計算し、スパイ・サーブレットなどのDMSサーブレットに情報を提供して、エージェントを監視します。統計には、次の内容(必要に応じて、平均、最大および最小を使用)が含まれます。時間はミリ秒単位で示されます。
これらのサーブレットの標準構成は、OC4Jのapplication.xml
およびdefault-web-site.xml
構成ファイルにあります。Oracle Enterprise Manager 10g Application Server Controlコンソールを使用してDMSにアクセスし、DMS情報を表示して、必要に応じてDMS構成を変更します。
JSPメトリックの正確な定義と、JSPメトリックを表示および分析する詳細な手順については、『Oracle Application Serverパフォーマンス・ガイド』を参照してください。
この項では、標準準拠のカスタム・タグ・ライブラリ、カスタムJavaBeansおよびその他のクラスを介して実装される、OC4J JSP拡張機能の概要について説明します。これらの機能の詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
JspScopeListener
。
Webでのパフォーマンスの問題に対応するために、E-Businessでは、コスト効率の高いテクノロジとサービスを導入して、インターネット・サイトのパフォーマンスを改善する必要があります。Webキャッシングは、この問題を解決するための主要なテクノロジで、静的および動的なWebコンテンツをキャッシングします。Webキャッシングの利点には、パフォーマンス、スケーラビリティ、高可用性、コスト削減およびネットワークの通信量の軽減があります。
OC4Jは、Webキャッシング・テクノロジに対して、次のサポートを提供します。
Oracle Web Cacheは、ESIエンジンを備えています。
Web Object Cacheは、Oracle Application ServerのJava Object Cacheをデフォルト・リポジトリとして使用します。
これらの機能の詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
OC4J JSP実装は、Sun社のJSTL仕様で指定されているとおり、JavaServer Pages標準タグ・ライブラリ(JSTL)をサポートしています。
注意
JSTLは、OC4J内の デプロイされたWebアプリケーション間でタグ・ライブラリを共有する手順は、「Webアプリケーション間でのタグ・ライブラリの共有」を参照してください。 |
JSTLは、Javaなどのスクリプト言語に不慣れなJSPページの作成者を対象にしています。以前は、JSPページで動的データを処理するには、スクリプトレットが使用されていました。JSTLタグを使用すると、スクリプトレットが不要になります。
JSTLの主な機能は、次のとおりです。
(「I18N」は、国際化標準を指します。)
タグのサポートは、前述の機能に基づいて4つのJSTLサブライブラリに編成されています。
JSTLサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。JSTLの詳細は、次のWebサイト上の仕様を参照してください。
http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.html
現在のVisual Javaプログラミング・ツールは、JSPコーディングをサポートしています。特に、Oracle JDeveloperは、JSP開発をサポートし、次の機能を備えています。
デバッグでは、JDeveloperによってJSPページ内にブレーク・ポイントを設定し、JSPページからJavaBeansへのコールを追跡できます。これは、手動によるデバッグと比較して大変便利な方法です。たとえば、JSPページに出力文を追加し、状態をレスポンス・ストリーム(ブラウザ表示用)やサーバー・ログ(暗黙的なapplication
オブジェクトのlog()
メソッドを使用)に出力できます。
JDeveloperについては、JDeveloperのオンライン・ヘルプ、または次のOTN(Oracle Technology Network)のサイトを参照してください。
http://otn.oracle.com/products/jdev/content.html
(このWebサイトを参照するには、OTNに登録する必要があります。無償で登録できます。)JDeveloperが提供するJSPタグ・ライブラリの概要は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
次の各項では、リソース管理に関する標準機能とOracleの付加価値機能について説明します。
JSPページでは、実行中に取得したリソース(JDBC接続、文、結果セット・オブジェクトなど)の適切な管理が必要です。標準のjavax.servlet.http
パッケージには、sessionスコープのリソースを管理するために、HttpSessionBindingListener
インタフェースとHttpSessionBindingEvent
クラスが用意されています。たとえば、sessionスコープの問合せBeanはこの機能を使用して、Beanがインスタンス化されるときにデータベース・カーソルを取得し、HTTPセッションが終了するときにそのカーソルをクローズできます。
この項では、HttpSessionBindingListener
のvalueBound()
メソッドとvalueUnbound()
メソッドの使用方法について説明します。
HttpSessionBindingListener
インタフェースを実装するオブジェクトは、valueBound()
メソッドとvalueUnbound()
メソッドを実装できます。いずれのメソッドも、HttpSessionBindingEvent
インスタンスを入力として取得します。これらのメソッドは、サーブレット・コンテナによってコールされます。valueBound()
メソッドは、オブジェクトがセッションに格納されるときにコールされ、valueUnbound()
メソッドは、オブジェクトがセッションから削除されるか、あるいはセッションがタイムアウトまたは無効になるとコールされます。開発者は通常、オブジェクトが保持するリソースを解放するためにvalueUnbound()
メソッドを使用します(後述の例では、データベース接続の解放で使用します)。
次の「JDBCQueryBean JavaBeanコード」の項では、HttpSessionBindingListener
を実装するJavaBeanのサンプルとそのBeanをコールするJSPページのサンプルを示します。
次に、JDBCQueryBean
のサンプル・コードを示します。これは、HttpSessionBindingListener
インタフェースを実装するJavaBeanです。ここでは、データベース接続用にJDBC OCIドライバを使用しています。このサンプル・コードを実行する場合は、適切なJDBCドライバと接続文字列を使用してください。
JDBCQueryBean
は、HTMLリクエストから検索条件を取得し(「UseJDBCQueryBean JSPページ」を参照)、その検索条件に基づいて動的なクエリーを実行し、結果を出力します。
このクラスは、セッション終了時にデータベース接続をクローズするvalueUnbound()
メソッド(HttpSessionBindingListener
インタフェースで指定されます)も実装します。
package mybeans; import java.sql.*; import javax.servlet.http.*; public class JDBCQueryBean implements HttpSessionBindingListener { String searchCond = ""; String result = null; public void JDBCQueryBean() { } public synchronized String getResult() { if (result != null) return result; else return runQuery(); } public synchronized void setSearchCond(String cond) { result = null; this.searchCond = cond; } private Connection conn = null; private String runQuery() { StringBuffer sb = new StringBuffer(); Statement stmt = null; ResultSet rset = null; try { if (conn == null) { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection("jdbc:oracle:oci8:@", "scott", "tiger"); } stmt = conn.createStatement(); rset = stmt.executeQuery ("SELECT ename, sal FROM scott.emp "+ (searchCond.equals("") ? "" : "WHERE " + searchCond )); result = formatResult(rset); return result; } catch (SQLException e) { return ("<P> SQL error: <PRE> " + e + " </PRE> </P>\n"); } finally { try { if (rset != null) rset.close(); if (stmt != null) stmt.close(); } catch (SQLException ignored) {} } } private String formatResult(ResultSet rset) throws SQLException { StringBuffer sb = new StringBuffer(); if (!rset.next()) sb.append("<P> No matching rows.<P>\n"); else { sb.append("<UL><B>"); do { sb.append("<LI>" + rset.getString() + " earns $ " + rset.getInt(2) + "</LI>\n"); } while (rset.next()); sb.append("</B></UL>"); } return sb.toString(); } public void valueBound(HttpSessionBindingEvent event) { // do nothing -- the session-scope bean is already bound } public synchronized void valueUnbound(HttpSessionBindingEvent event) { try { if (conn != null) conn.close(); } catch (SQLException ignored) {} } }
次のJSPページでは、前の「JDBCQueryBean JavaBeanコード」の項で定義したJDBCQueryBean
JavaBeanを使用し、session
スコープを使用してBeanを起動します。ここでは、JDBCQueryBean
を使用して、ユーザーが入力した検索条件と一致する従業員名を表示します。
JDBCQueryBean
は、このJSPページのjsp:setProperty
タグから検索条件を取得します。このタグは、ユーザーがHTMLフォームを使用して入力したsearchCond
リクエスト・パラメータの値に従って、BeanのsearchCond
プロパティを設定します。HTMLのINPUT
タグによって、フォームに入力された検索条件はsearchCond
と命名されます。
<jsp:useBean id="queryBean" class="mybeans.JDBCQueryBean" scope="session" /> <jsp:setProperty name="queryBean" property="searchCond" /> <HTML> <HEAD> <TITLE> The UseJDBCQueryBean JSP </TITLE> </HEAD> <BODY BGCOLOR="white"> <% String searchCondition = request.getParameter("searchCond"); if (searchCondition != null) { %> <H3> Search results for : <I> <%= searchCondition %> </I> </H3> <%= queryBean.getResult() %> <HR><BR> <% } %> <B>Enter a search condition for the EMP table:</B> <FORM METHOD="get"> <INPUT TYPE="text" NAME="searchCond" VALUE="ename LIKE 'A%' " SIZE="40"> <INPUT TYPE="submit" VALUE="Ask Oracle"> </FORM> </BODY> </HTML>
次に、このページの入力と出力のサンプルを示します。
前述の例では、HttpSessionBindingListener
機能のかわりに、JavaBeanのfinalize()
メソッドで接続をクローズできます。finalize()
メソッドは、セッションのクローズ後にBeanのガベージ・コレクションが実行されるとコールされます。ただし、HttpSessionBindingListener
インタフェースの動作は、finalize()
メソッドよりも確実に予測できます。ガベージ・コレクションの頻度は、アプリケーションのメモリー消費パターンによって異なります。これに対して、HttpSessionBindingListener
インタフェースのvalueUnbound()
メソッドは、セッションの停止時に確実にコールされます。
OC4Jでは、OC4J JSPはJspScopeListener
インタフェースを提供し、applicationスコープ、sessionスコープ、requestスコープまたはpageスコープのリソースを管理します。
この機能は、サーブレットとJSP標準に従って、page
、request
、session
またはapplication
スコープのオブジェクトをサポートします。他のスコープとともにsessionスコープをサポートするクラスを作成するために、クラスにJspScopeListener
インタフェースとHttpSessionBindingListener
インタフェースを実装して、両方のインタフェースを統合できます。OC4JまたはJServ環境でのpage
スコープの場合は、Oracle固有の実行時実装を使用することもできます。
HttpSessionBindingListener
の構成と統合方法については、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
|
![]() Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|