ヘッダーをスキップ

Oracle Containers for J2EE JavaServer Pages開発者ガイド
10g(10.1.3.1.0)

B31860-01
目次
目次
索引
索引

戻る 次へ

2 Oracle JSPの実装

この章では、Oracle Application ServerのコンポーネントであるOracle Containers for J2EE(OC4J)付属のWebコンテナが実装する機能の詳細を説明します。Oracle Application Server、OC4J、OC4J JSPの実装と機能、および提供されているカスタム・タグ・ライブラリとユーティリティ(『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照)の概要を説明します。

次の項目について説明します。

OC4Jの概要

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ディレクトリなどのデプロイ規則が含まれます。

OC4Jの新機能

Oracle Containers for J2EEリリース3(10.1.3)には、いくつかの新機能や拡張機能が含まれています。これらについて、次に説明します。

Webサービスのサポート

OC4Jでは、J2EE 1.4標準(JAX-RPC 1.1を含む)に基づいたWebサービスを完全にサポートしています。また、Webサービスの相互運用性もサポートしています。

新しいJ2EE 1.4のアプリケーション管理およびデプロイ仕様のサポート

OC4Jは、J2EE環境でアプリケーションをデプロイおよび管理するための新しい標準を定義している、次の仕様をサポートしています。

Oracle Application Server TopLinkのサポート

Oracle Application Server TopLinkは、高機能なオブジェクトの永続化フレームワークで、幅広いJava 2 Enterprise Edition(J2EE)やJavaアプリケーションのアーキテクチャに使用できます。OracleAS TopLinkは、OC4Jのコンテナ管理の永続性(CMP)コンテナと、Bean管理の永続性(BMP)開発を単純化するベース・クラスもサポートしています。

OracleAS Job Scheduler

OracleAS Job Schedulerは、J2EEアプリケーションに非同期スケジュール・サービスを提供します。主な機能には、ジョブの発行、制御および監視機能が含まれます。ジョブとは、作業が行われる際に実行される作業単位と定義されています。

新しい2フェーズ・コミット・トランザクション・コーディネータ機能

OC4Jの新しい分散トランザクション・マネージャでは、あらゆる種類のXAリソース間で2フェーズ・トランザクションを調整できます。XAリソースには、Oracleデータベースに加え、他のベンダーやJMSプロバイダのデータベース(IBM WebsphereMQなど)が含まれます。また、障害時の自動トランザクション・リカバリもサポートしています。

Generic JMS Resource Adapterの拡張

Generic JMS Resource Adapterが、OC4Jの最新バージョンに同梱されるOracleAS JMS、およびIBM Websphere MQ JMSバージョン5.3用のOC4Jプラグインとして使用できるようになりました。

JMS接続をキャッシュできるようにするため、そして同時にグローバル・トランザクションにも正常に参加できるようにするため、遅延トランザクション登録に対するサポートが追加されました。

さらに、Generic JMS Resource Adapterのエラー処理機能が向上しました。エンドポイントは、プロバイダまたはシステム障害後、自動的に再試行を行い、onMessage()エラーが正しく処理されます。

OC4Jの機能

OC4Jの最新のリリースでは、次の機能が提供されます。

J2EEのサポート

OC4Jは、標準のJ2EEのAPIをサポートおよび認証しています。これらのAPIを表2-1に示します。

表2-1    OC4JがサポートするJ2EEのAPI 
J2EEの標準API  OC4Jでサポートされているバージョン 

JavaServer Pages(JSP) 

2.0 

サーブレット 

2.4 

Enterprise JavaBeans(EJB) 

2.1 

Java Transaction API(JTA) 

1.0  

Java Message Service(JMS) 

1.1  

Java Naming and Directory Interface(JNDI) 

1.2 

Java Mail 

1.1.2 

Java Database Connectivity(JDBC) 

2.0拡張機能 

Oracle Application Server Java Authentication and Authorization Service(JAAS)Provider 

1.0 

J2EE Connector Architecture 

1.5 

Java API for XML-Based RPC(JAX-RPC) 

1.1 

SOAP with Attachments API for Java(SAAJ) 

1.2 

Java API for XML Registries(JAXR) 

1.0.5 

OC4JのWeb通信

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のためのOracleの付加価値機能

JSPページに関するOC4Jの付加価値機能は、次の3つのカテゴリにグループ化できます。

次の各項では、これらのカテゴリの機能の概要、およびJavaServer Pages標準タグ・ライブラリ(JSTL)に対するOracleサポートの概要について説明します。JSTLサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。

サポートしている仕様

OC4J付属のJSPコンテナは、Sun社による次の仕様に完全に準拠しています。

詳細は、これらの仕様を参照してください。

Oracle固有の機能

この項では、OC4JのWebコンテナがサポートするOracle固有のプログラミング拡張機能の概要を説明します。

OC4Jの構成可能なJSP拡張機能

JSP仕様2.0準拠に加え、OC4J Webコンテナには、注目すべき次の機能があります。

「JSPのためのOracleの付加価値機能」も参照してください。

次の機能もサポートされています。

グローバル・インクルード

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パフォーマンス・ガイド』を参照してください。

OC4Jが提供するJSPユーティリティとタグ・ライブラリ

この項では、標準準拠のカスタム・タグ・ライブラリ、カスタムJavaBeansおよびその他のクラスを介して実装される、OC4J JSP拡張機能の概要について説明します。これらの機能の詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。

キャッシング・サポートに関するタグとAPI

Webでのパフォーマンスの問題に対応するために、E-Businessでは、コスト効率の高いテクノロジとサービスを導入して、インターネット・サイトのパフォーマンスを改善する必要があります。Webキャッシングは、この問題を解決するための主要なテクノロジで、静的および動的なWebコンテンツをキャッシングします。Webキャッシングの利点には、パフォーマンス、スケーラビリティ、高可用性、コスト削減およびネットワークの通信量の軽減があります。

OC4Jは、Webキャッシング・テクノロジに対して、次のサポートを提供します。

これらの機能の詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。

JavaServer Pages標準タグ・ライブラリ(JSTL)のサポート

OC4J JSP実装は、Sun社のJSTL仕様で指定されているとおり、JavaServer Pages標準タグ・ライブラリ(JSTL)をサポートしています。


注意

JSTLは、OC4J内のORACLE_HOME/j2ee/home/jsp/lib/taglibディレクトリにインストールされません。

デプロイされたWebアプリケーション間でタグ・ライブラリを共有する手順は、「Webアプリケーション間でのタグ・ライブラリの共有」を参照してください。 


JSTLは、Javaなどのスクリプト言語に不慣れなJSPページの作成者を対象にしています。以前は、JSPページで動的データを処理するには、スクリプトレットが使用されていました。JSTLタグを使用すると、スクリプトレットが不要になります。

JSTLの主な機能は、次のとおりです。

タグのサポートは、前述の機能に基づいて4つのJSTLサブライブラリに編成されています。

JSTLサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。JSTLの詳細は、次のWebサイト上の仕様を参照してください。

http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.html


注意

OC4Jが提供するJML、XML、データ・アクセス(SQL)およびその他のカスタム・タグ・ライブラリはJavaServer Pages標準タグ・ライブラリ(JSTL)以前のライブラリで、重複した機能があります。

標準に準拠するには、カスタム・ライブラリではなく、原則としてJSTLを使用することをお薦めします。

JSTLではまだ使用できないカスタム・ライブラリの機能のうち、有用と考えられる機能については、必要に応じてJSTL標準に採用される予定です。 


Oracle JDeveloperのJSPサポート

現在の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タグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。


注意

他の主要なIDEベンダーが、OC4Jとシームレスに統合できるプラグイン・モジュールを構築しています。これにより、開発者は、IDE内から直接、OC4Jで実行中のJ2EEアプリケーションをビルド、デプロイおよびデバッグできます。  


OracleのJSPリソース管理機能

次の各項では、リソース管理に関する標準機能とOracleの付加価値機能について説明します。

標準セッションのリソース管理: HttpSessionBindingListener

JSPページでは、実行中に取得したリソース(JDBC接続、文、結果セット・オブジェクトなど)の適切な管理が必要です。標準のjavax.servlet.httpパッケージには、sessionスコープのリソースを管理するために、HttpSessionBindingListenerインタフェースとHttpSessionBindingEventクラスが用意されています。たとえば、sessionスコープの問合せBeanはこの機能を使用して、Beanがインスタンス化されるときにデータベース・カーソルを取得し、HTTPセッションが終了するときにそのカーソルをクローズできます。

この項では、HttpSessionBindingListenervalueBound()メソッドとvalueUnbound()メソッドの使用方法について説明します。


注意

Beanインスタンスは、HTTPセッション・オブジェクトのイベント通知リストに登録する必要がありますが、jsp:useBean文によって自動的に登録されます。 


valueBound()メソッドとvalueUnbound()メソッド

HttpSessionBindingListenerインタフェースを実装するオブジェクトは、valueBound()メソッドとvalueUnbound()メソッドを実装できます。いずれのメソッドも、HttpSessionBindingEventインスタンスを入力として取得します。これらのメソッドは、サーブレット・コンテナによってコールされます。valueBound()メソッドは、オブジェクトがセッションに格納されるときにコールされ、valueUnbound()メソッドは、オブジェクトがセッションから削除されるか、あるいはセッションがタイムアウトまたは無効になるとコールされます。開発者は通常、オブジェクトが保持するリソースを解放するためにvalueUnbound()メソッドを使用します(後述の例では、データベース接続の解放で使用します)。

次の「JDBCQueryBean JavaBeanコード」の項では、HttpSessionBindingListenerを実装するJavaBeanのサンプルとそのBeanをコールするJSPページのサンプルを示します。

JDBCQueryBean JavaBeanコード

次に、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) {}
  }
}


注意

前述のコードは、サンプル用です。大規模なWebアプリケーションでデータベース接続のプーリングを処理する方法としては、必ずしもお薦めできません。 


UseJDBCQueryBean JSPページ

次の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のメリット

前述の例では、HttpSessionBindingListener機能のかわりに、JavaBeanのfinalize()メソッドで接続をクローズできます。finalize()メソッドは、セッションのクローズ後にBeanのガベージ・コレクションが実行されるとコールされます。ただし、HttpSessionBindingListenerインタフェースの動作は、finalize()メソッドよりも確実に予測できます。ガベージ・コレクションの頻度は、アプリケーションのメモリー消費パターンによって異なります。これに対して、HttpSessionBindingListenerインタフェースのvalueUnbound()メソッドは、セッションの停止時に確実にコールされます。

リソース管理のためのOracleの付加価値機能の概要

OC4Jでは、OC4J JSPはJspScopeListenerインタフェースを提供し、applicationスコープ、sessionスコープ、requestスコープまたはpageスコープのリソースを管理します。

この機能は、サーブレットとJSP標準に従って、pagerequestsessionまたはapplicationスコープのオブジェクトをサポートします。他のスコープとともにsessionスコープをサポートするクラスを作成するために、クラスにJspScopeListenerインタフェースとHttpSessionBindingListenerインタフェースを実装して、両方のインタフェースを統合できます。OC4JまたはJServ環境でのpageスコープの場合は、Oracle固有の実行時実装を使用することもできます。

HttpSessionBindingListenerの構成と統合方法については、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。


戻る 次へ
Oracle
Copyright © 2007 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引