従来のクライアント/サーバー・アプリケーションや2層アプリケーションのみでなく、マルチ階層のアプリケーションを開発できます。どちらの場合でも、Webアプリケーションを配置してアプリケーション・サーバー層で実行し、Oracle Databaseと密接に統合できます。ユーザーは、Webブラウザを介してデスクトップからそのアプリケーションにアクセスできます。
クラス・ライブラリ・インタフェースでサポートされている完全な開発フレームワークを使用して、本番環境で使用するための高機能なOracle Multimediaアプリケーションを作成できます。本番環境では、ユーザーがスタンドアロンのクライアント・インタフェースまたはWebブラウザを介して、アプリケーションと相互運用します。TCP/IP、HTTP、HTML、XML、XHTMLなどの標準に基づくWebアプリケーションの開発は、基礎となるテクノロジの急速な発展によって容易になっています。主要なソフトウェア・コンポーネントが密接に統合されるにつれて、管理者はWebアプリケーションの設計、作成および管理タスクをより短期間かつ簡単に実行できます。
Oracle Multimediaでは、オブジェクト型インタフェースまたはリレーショナル・インタフェースのいずれかを介して、Oracle Application ServerとOracle Databaseおよびオーサリング・ツールのインターネット・サポートが実現されます。これによって、Webブラウザに配信するマルチメディア・データをデータベースにアップロードしたり、データベースから取得したり、操作することができる、Webベースのアプリケーションを短期間で開発できます。
Oracle Multimediaは、次の方法でアプリケーション開発をサポートしています。
データベースに格納されているマルチメディア・データへのアクセス(挿入、更新および検索)および操作(処理)を可能にするクラス・ライブラリの提供。クラス・ライブラリは、次の方法によるデータベースに格納されているマルチメディア・データへのアクセスを可能にします。
Oracle Multimedia Java APIの使用。Java Database Connectivity(JDBC)インタフェースを使用すると、すべての層(クライアント、アプリケーション・サーバーまたはデータベース)で使用可能な、データベースに格納されたオーディオ、イメージおよびビデオ・データまたは異機種間メディア・データを操作および変更できるアプリケーションを短期間で開発することができます。Oracle Multimedia Java APIは、JDBC結果セットに従来のリレーショナル・データとOracle Multimediaのオブジェクト型メディア・データの列の両方を含めることができます。これによって、結果セットに対する選択および操作、オブジェクト属性へのアクセスおよびオブジェクト・メソッドの起動を簡単に実行できます。詳細は、『Oracle Multimedia Java API Reference』を参照してください。概要は、1.9.1項を参照してください。Javaクラスを使用した、様々なメディアを利用するJavaクライアント・アプリケーションの開発の詳細は、2.3項を参照してください。
Oracle Multimedia Servlets and JSP Java APIの使用。これらの追加のJavaクラスによって、Webテクノロジがサポートされます。 詳細は、『Oracle Multimedia Servlets and JSP Java API Reference』を参照してください。概要は、1.9.3項を参照してください。Javaクラスを使用した、様々なメディアを利用するJavaベースのWebアプリケーションの開発の詳細は、2.4項を参照してください。Javaサーブレット・アプリケーションの例については、3.2項を参照してください。JavaServer Pages(JSP)アプリケーションの例については、3.3項を参照してください。
Oracle Multimediaのドメイン・クラスおよび一連のユーティリティを含む、Oracle Multimedia/Oracle Application Development Framework Business Components(ADF Business Components)の統合パッケージの使用。これらのクラスは、Oracle JDeveloperで使用します。Oracleは、コンポーネント・ベースのマルチ階層インターネット・アプリケーションを作成可能なアプリケーション・フレームワーク(ADF Business Components)をサポートする、Java統合開発環境(IDE)ツールです。詳細は、1.9.3項およびOracle JDeveloper 10g のヘルプを参照してください。
Oracle Multimedia Custom DataSource and DataSinkクラスの使用。これらのクラスは、JMFバージョン2.0および2.1の拡張機能です。JMFバージョン2.0および2.1を使用すると、JMFアプリケーションから、Oracle MultimediaのORDAudioおよびORDVideoオブジェクト型を使用して、データベースに格納された時間ベースのメディア・データをアップロードおよび取得できます。詳細は、1.9.4項を参照してください。
Java Advanced Imaging(JAI)クラスの使用。Oracle Multimedia Java APIは、JAIで使用可能なBLOBおよびBFILEデータへのインタフェースを提供する、3つの型のストリーム・オブジェクトを記述します。これらのクラスを使用すると、Oracle MultimediaのORDImageオブジェクトを使用してデータベースに格納されたイメージ・データ、またはBLOBかBFILEに格納されたイメージ・データをJAIアプリケーションで読取りおよび書込みできます。詳細は、1.9.5項を参照してください。
Oracle Application Server Multimedia Tag Library for JSPの使用。このタグ・ライブラリは、Oracle Multimedia Servlets and JSP Java APIの拡張です。このタグ・ライブラリが提供するJSPタグを使用すると、マルチメディアのJSP Webアプリケーションで、Oracle Databaseとの間で行うメディア・データの検索およびアップロードが簡単になります。詳細は、Oracle Application Server JP Documentation Libraryの『Oracle Application Server Multimedia Tag Library for JSPユーザーズ・ガイドおよびリファレンス』を参照してください。
最新のクラス・ライブラリ・インタフェースを介したC++および従来の3GLの使用。
Oracle HTTP ServerのPL/SQL Gateway(mod_plsql)機能およびOracle Application ServerとOracle DatabaseのPL/SQL Web Toolkit機能の使用。これらの機能を使用すると、ブラウザのリクエストをリスニングしたり、Oracle NetおよびOracle Call Interface(OCI)を使用してデータベース内のPL/SQLストアド・プロシージャを実行したり、Webブラウザに表示するために戻すレスポンスのデータおよびコードを含むHTMLページを生成することができます。Webアプリケーション開発者は、Oracle Net接続およびOCIを介してデータベースに格納されたPL/SQLプロシージャを起動するPL/SQLサーブレットおよびPL/SQL Server Pages(PSP)を記述できます。詳細は、2.2項を参照してください。
Oracle開発ツール コンポーネントの密接な統合。これによって、Webブラウザおよびクライアント・アプリケーションに配信する、データベースに格納されたマルチメディア・データにアクセス(挿入、更新および検索)したり、操作(処理)することができるアプリケーションを短期間かつ簡単に開発できます。Oracle開発ツールには、次のツールが含まれます。
Oracle Application Server Portal: 企業情報ポータル(EIP)を構築および配置するための単純なブラウザ・ベースの環境です。企業ポータルは、ポートレットへのアクセスを提供します。ポートレットとは、Webページの定義済領域に配置されたアプリケーションおよびWebコンテンツを要約したものです。Oracle Application Server Portalのポートレットでは、データベース内に存在するPL/SQLストアド・プロシージャが実行され、生成済HTMLページの形式でHTTPレスポンスが生成されます。Oracle Application Server Portalには、FormsおよびReportsの2つのコンポーネントが事前定義されています。いずれのコンポーネントも、データベースとポータル・フレームワークのフォームやレポート間でのリッチ・メディア・コンテンツのアップロードまたはダウンロードをサポートします。詳細は、1.9.3項を参照してください。
Oracle JDeveloper: アプリケーション・フレームワーク(Oracle Application Development Business Components)をサポートするIDEツールで、100% Javaで記述されています。Oracle Multimedia/ADF Business Components統合パッケージには、Oracle Multimediaのドメイン・クラスおよび一連のユーティリティが含まれています。ドメイン・クラスは、Oracle Multimedia Java APIのラッパーで、基礎となるマルチメディアの検索、アップロードおよび操作のすべてのメソッドを継承しています。ドメイン・クラスはADF Business Components APIをサポートし、組込み済の統合マルチメディア機能を提供します。一方、ユーティリティ・クラスはマルチメディア・コンテンツの検索、レンダリングおよびアップロードをサポートします。詳細は、1.9.3項を参照してください。
Oracle Designer: コンポーネントの識別から、着手、評価、認可、開発および実装に渡って、アプリケーションの開発を制御するソフトウェア構成管理に使用するツールです。Oracle DesignerはC++クラスを生成できます。このクラスを使用すると、クライアント、Oracle Application ServerまたはOracle Database上で実行されるアプリケーションからOracle Multimediaメソッドをコールできます。
Oracle Content Management SDK: データベースの機能を使用するXMLとJava、およびJavaサーブレットやJSPページなどの様々なWebベースのインタフェースを使用するか、SQLを実行するか、またはデータベースのトランザクション・コンテキストで実行するPL/SQLストアド・プロシージャをコールして、カスタム・ファイル・システム・アプリケーションを作成できます。
サード・パーティのストリーミング・メディア・サーバーとの統合。これによって、データベースに格納されたマルチメディア・データをメディア・プレーヤ・クライアントに動的に直接配信できます。サード・パーティのストリーミング・サーバーには、次のものが含まれます。
RealNetworksサーバー用のOracle Multimediaプラグイン。このコンポーネントは、RealNetworksサーバーがOracle Databaseのメディア・データをメディア・プレーヤ・クライアントに直接配信できるデータ・ソース・プラグインです。このプラグインは、RealNetworksサーバーとともインストールされ、ストリーミング・サーバー用の管理ツールで構成および管理されます。プラグインはフォーマットに依存しません。Oracle Databaseには、ストリーミング・サーバーがサポートしているものであればどのフォーマットのデータでも置くことができます。詳細は、1.9.2項を参照してください。
Microsoft Windowsメディア・サービス用のOracle Multimediaプラグイン。このツールを使用すると、Microsoft Windows Mediaサーバーは、Oracle Databaseからクライアントにマルチメディア・コンテンツを直接配信できます。このプラグインは、Windows 2003サーバーにインストールされ、Windows Media Servicesで構成されます。詳細は、1.9.2項を参照してください。
2.2項では、PL/SQL GatewayおよびPL/SQL Web Toolkitを使用して、PL/SQLのWebアプリケーションを開発する方法について説明しています。2.3項では、JavaおよびJDBCを使用して、Oracle Multimedia Java Classesを使用するメディア・リッチJavaクライアント・アプリケーションを開発する方法について説明しています。2.4項では、Oracle Multimedia Java APIおよびOracle Multimedia Servlets and JSP Java APIを使用して、JavaベースのWebアプリケーションを開発する方法について説明しています。
第3章の3.1項では、Webアプリケーションの例としてOracle Multimedia Photo Albumについて説明しています。この実装には、PL/SQL、Javaサーブレット、JavaServer Pages(JSP)およびMicrosoft Active Server Pages(ASP)/Visual Basic(VB)といった様々な技術が使用されています。このサンプル・アプリケーションでは、実際のWebアプリケーションに対して2.2項および2.4項で説明されている手順を使用し、データベースに格納されたメディア・データをアップロードおよび取得する方法を示しています。
第4章では、Oracle Multimedia Code Wizardアプリケーションについて説明します。このアプリケーションを使用すると、Oracle Multimediaのオブジェクト型を使用してデータベースに格納されたメディア・データをアップロードおよび取得するPL/SQL GatewayのPL/SQLストアド・プロシージャを作成できます。
第5章では、Java、JDBCおよびOracle Multimedia Java Classesを使用して実装するJavaサンプル・アプリケーション(IMExample)について説明しています。このサンプル・アプリケーションでは、実際のJavaアプリケーションに対して2.3項で説明されている手順を使用し、データベースに格納されたメディア・データをアップロードおよび取得する方法を示しています。
PL/SQLは、SQLのデータ操作能力とプロシージャ言語のデータ処理能力が組み合された、完全に移植可能で高パフォーマンスのトランザクション処理言語です。
この項では、PL/SQL Application Programming Interface(API)を使用したOracle Multimediaデータベース・オブジェクトの操作方法を簡単に説明します。データベースにメディアを格納する際に使用可能なOracle Multimediaオブジェクト型は、次のとおりです。
ORDAudio
ORDDoc
ORDImage
ORDVideo
2.1.1項では、PL/SQLでOracle Multimediaを使用するための環境設定について説明します。2.1.2項では、Oracle Multimediaオブジェクトに対する標準のSQL問合せについて説明します。2.1.3項では、PL/SQLアプリケーションでOracle Multimediaオブジェクトからメディア・データを取得する方法について説明します。2.1.4項では、PL/SQLアプリケーションでOracle Multimediaデータベース・オブジェクトへメディア・データをアップロードする方法について説明します。2.1.5項では、PL/SQLアプリケーションで例外を処理する方法について説明します。
この項に示すすべての例では、Oracleのインストール時に、デフォルトでインストールされるサンプル・スキーマが使用されています。これらのスキーマの作成方法および使用方法の詳細は、『Oracle Databaseサンプル・スキーマ』を参照してください。
Oracle Multimediaオブジェクト型およびPL/SQL APIで使用可能なメソッドの詳細は、『Oracle Multimediaリファレンス』を参照してください。
PL/SQLを使用してファイルにアクセスするには、データベース・サーバーがアクセス可能なディレクトリを指すディレクトリ・オブジェクトをデータベース上に作成する必要があります。たとえば、次のコマンドで、サンプル・スキーマにMEDIA_DIR
ディレクトリを作成します。
CREATE DIRECTORY MEDIA_DIR AS 'c:\oracle\product\10.2.0\db_1\demo\schema\product_media';
データベースから取得したメディア・データをファイルに書き込むには、適切なユーザーに、指定したディレクトリへの書込み権限を付与する必要があります。次に例を示します。
GRANT WRITE ON DIRECTORY MEDIA_DIR TO SCOTT;
ファイルからデータベースにメディア・データをアップロードするには、適切なユーザーに、指定したディレクトリへの読取り権限を付与する必要があります。次に例を示します。
GRANT READ ON DIRECTORY MEDIA_DIR TO SCOTT;
警告: Oracleが提供するOracle Multimediaデータ型は、データベース・ユーザーORDSYS、ORDPLUGINSおよびSI_INFORMTN_SCHEMAの下にインストールされます。これらはデータベースのインストール中に作成されるユーザーで、将来のリリースで変更される可能性があります。 Oracle Multimediaが提供するファンクション、パッケージ、型およびビューは、Oracleによって予約されており、将来のリリースで変更される可能性があります。ORDSYSおよびSI_INFORMTN_SCHEMAユーザーとその内容を変更しないでください。これらのユーザーに接続したり、独自の表、ファンクション、パッケージ、型またはビューをこれらのユーザーに追加しないでください。また、Oracle Multimediaが提供するORDPLUGINSユーザーのパッケージを変更しないでください。これを変更すると、データベース管理システムで内部エラーおよびセキュリティ違反が発生することがあります。 |
アクセッサ・メソッド(getHeight、getWidth、getMimeTypeなど)を使用することにより、標準のSQL問合せにメディア属性(高さ、幅、MIMEタイプなど)を含めることができます。これらのアクセッサ・メソッドを使用して、イメージ、オーディオおよびビデオ・オブジェクトに対して1つ以上の属性を問い合せる方法を、それぞれ例2-1、例2-2および例2-3に示します。
例2-1 イメージ問合せ(高さ、幅およびMimeType属性)
SELECT t.product_id id, t.product_photo.getHeight() height, t.product_photo.getWidth() width, t.product_photo.getMimeType() mimetype FROM pm.online_media t;
データベースからファイル・システムのファイルへメディアをダウンロードするには、Oracle Multimediaオブジェクトのエクスポート・メソッドをコールします。次のコード例では、product_idが3117である行のイメージを、MEDIA_DIRディレクトリのファイル3117.jpgにエクスポートします。このコード例で、エクスポート操作を実行する部分を太字で強調表示しています。
DECLARE img ORDImage; ctx RAW(64) := NULL; BEGIN SELECT product_photo INTO img FROM pm.online_media WHEREproduct_id = 3117
;img.export(ctx, 'FILE', 'MEDIA_DIR', '3117.jpg');
END; /
メディアのアップロードは、メディア・データをファイル・システムからデータベースの表領域にインポートすることを指します。次に、一般的な手順を示します。
表に新しい行を挿入し、Oracle Multimediaオブジェクト型のinitメソッドで新しいオブジェクトを作成します。
Oracle Multimediaオブジェクトのインポート・メソッドをコールし、ファイル・システムのデータをデータベースにインポートします。
Oracle MultimediaオブジェクトのsetPropertiesメソッドをコールし、オブジェクトの属性を判別および移入します。
表を更新し、前述の手順で抽出した属性値を表のOracle Multimediaオブジェクトに反映します。
次に、PM.ONLINE_MEDIA
表に新しい行を挿入するPL/SQLコードの例を示します。
DECLARE img ORDImage; aud ORDAudio; vid ORDVideo; ctx RAW(64) := NULL; BEGIN -- Insert a new row into the pm.online_media table. DELETE FROM pm.online_media WHERE product_id = 3003; INSERT INTO pm.online_media (product_id, product_photo, product_audio, product_video) VALUES (3003, ORDImage.init('FILE', 'MEDIA_DIR', 'laptop.jpg'), ORDAudio.init('FILE', 'MEDIA_DIR', 'laptop.mpa'), ORDVideo.init('FILE', 'MEDIA_DIR', 'laptop.rm')) RETURNING product_photo, product_audio, product_video INTO img, aud, vid; -- Bring the media into the database and populate the attributes. img.import(ctx); -- ORDImage.import also calls ORDImage.setProperties. aud.import(ctx); aud.setProperties(ctx); vid.import(ctx); vid.setProperties(ctx); -- Update the table with the properties we have extracted. UPDATE pm.online_media SET product_photo = img, product_audio = aud, product_video = vid WHERE product_id = 3003; COMMIT; END; /
実行時に発生する可能性があるエラーを、常にアプリケーションで処理する必要があります。これにより、実行時エラーが発生してもプログラムの動作を継続できます。また、プログラムの動作中に、ユーザーがエラーの原因を認識することもできるようになります。エラーを適切に処理することによって、可能であれば、アプリケーションの実行中に常にエラーからリカバリできるようになります。さらに、適切にエラーを処理することで、必要な情報が提供されるため、常にエラーの原因を認識できるようになります。
この項では、コード例を使用して適切なエラー処理について説明します。これらの例では、いくつかの一般的なOracle Multimediaエラーおよびその他のタイプのエラーをPL/SQLプログラムで処理する方法を示します。これらの例は、第3章および第4章に示すPL/SQLサンプル・アプリケーションから抜粋したものです。他の例については、『Oracle Multimediaリファレンス』を参照してください。
例外を処理する場合、PL/SQLでは例外ブロックを使用します。たとえば、PL/SQLの場合、次のように例外を処理します。
BEGIN <some program logic> EXCEPTION WHEN OTHERS THEN <some exception logic> END;
独自に設計、コーディングおよびデバッグしたアプリケーションであれば、プログラム内のどの箇所でエラーが発生してプログラムの処理が停止する可能性があるかがわかります。そのような箇所に対しては、発生する可能性のあるエラーを処理するための例外処理ブロックを追加する必要があります。PL/SQL例外の処理の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
次の例では、Oracle Multimedia PL/SQL Web Toolkitフォト・アルバム・サンプル・アプリケーションでの例外処理について説明します。
プログラムで、(イメージ・データを読み取って、適切な属性フィールドに格納できるようにオブジェクト属性の値を取得するために)アップロードされたイメージのプロパティを設定する際にイメージ・フォーマットを認識できない場合、setProperties( )メソッドが正常に実行されない場合があります。この例外を捕捉して潜在的な問題を回避するには、アプリケーションで、次の例外ブロックを使用します。
BEGIN new_image.setProperties(); EXCEPTION WHEN OTHERS THEN new_image.contentLength := upload_size; new_image.mimeType := upload_mime_type; END;
この例では、例外ハンドラによって、insert_new_photo
プロシージャの先頭に記述されているアップロード済の表から値が取得され、その値に基づいて、イメージのMIMEタイプおよびコンテンツ長が設定されます。ファイルがアップロードされると、ブラウザによってMIMEタイプ・ヘッダーが設定されます。アプリケーションは、このヘッダーを読み取り、ORDImageフィールドに設定します。
プログラムでイメージを処理する際にイメージ・フォーマットが不明な場合、processCopy( )メソッドは正常に実行されません。この潜在的な問題を回避するには、アプリケーションで、次の例外ブロックを使用します。
BEGIN new_image.processCopy( 'maxScale=50,50', new_thumb); EXCEPTION WHEN OTHERS THEN new_thumb.deleteContent(); new_thumb.contentLength := 0; END;
このOracle Multimedia PL/SQL Web Toolkitフォト・アルバム・アプリケーションの例では、イメージ・フォーマットが不明で縮小イメージを作成できない場合に、例外ハンドラによって、縮小イメージのコンテンツが削除され、コンテンツ長が0(ゼロ)に設定されます。
データベースに精通したSQL開発者は、PL/SQL開発環境を使用して、Oracle Application ServerとOracle Databaseのみを使用するWebアプリケーションを開発できます。開発者は、PL/SQL開発環境を使用すると迅速にPL/SQLベースのWebアプリケーションを開発できます。
PL/SQLを使用してWebアプリケーションを開発するには、HTTPを介してWebブラウザと対話する一連のストアド・プロシージャで構成されるPL/SQLパッケージを開発します。ストアド・プロシージャは次の方法で実行できます。
クリックされるとストアド・プロシージャをコールするハイパーテキスト・リンクをクリックする。
HTMLページに表示されたフォームへの記入などのタスクの完了を示す、HTMLフォーム上の「Submit」をクリックする。
リストからのユーザーの選択に基づいて、ストアド・プロシージャにパラメータを渡す。
タグ付けされたHTMLテキストなどのストアド・プロシージャの情報は、WebページとしてWebブラウザに表示されます。これらの動的なWebページは、データベース・コンテンツおよびストアド・プロシージャに渡された入力パラメータに基づいて、データベースで生成されます。PL/SQLストアド・プロシージャは、特に動的なWebページ・コンテンツの生成に使用すると効率的かつ強力です。
PL/SQLからHTML出力を生成するには、次の2つの方法があります。
ファンクション・コールを使用して、Oracle Application ServerおよびOracle Databaseに付属しているPL/SQL Web Toolkitパッケージで、出力用の各HTMLタグを生成します。owa
パッケージは、すべてのユーザーがアクセス可能な共通スキーマにロードされています。
Webページ(PL/SQL Server Pages)にPL/SQLコードを埋め込みます。
イメージ、オーディオ、ビデオ、これら3つの組合せなどのメディア・データを、Oracle Multimediaオブジェクト型およびそれぞれの一連のメソッドを使用してデータベース表にアップロードしたりデータベース表から取得する場合に、Oracle Multimediaを使用します。
最初に、メディアをアップロードするプロシージャによってSQL INSERT操作が実行され、メディア表にデータの行が挿入されます。これと同時に、空のBLOBを持つそれぞれのOracle Multimediaオブジェクト列のインスタンスが初期化されます。次に、SQL SELECT FOR UPDATE操作で更新するオブジェクト列が選択されます。最後に、SQL UPDATE操作でそれぞれの列のメディア・オブジェクトが更新されます。Oracle Multimediaメソッドがコールされ、次の操作が実行されます。
空のBLOBを持つオブジェクト列の初期化。
メディア・データがBLOBで内部に格納されることを示す属性の設定。
オブジェクト属性の値の取得、およびオブジェクト属性への取得した値の格納。
BLOBのコンテンツ長およびそのMIMEタイプの判断(例外が発生した場合)。
データベースからローカル・オブジェクトへのオブジェクトの取得。
キャッシュの更新時刻とHTTPヘッダーのキャッシュ時間の比較に基づく、オブジェクトのキャッシュの有効性の確認。
メディア・オブジェクトが配置されている(データベース内、BFILE内またはURL位置での)場所の判断、メディアの取得、およびHTMLページに表示するメディアのダウンロード。
Oracle Multimediaメソッドをコールすると、メディア・オブジェクトの最終更新時刻が取得され、メディアがデータベース、BFILEまたはURL位置のどこにローカルに格納されているかが判断され、メディア・オブジェクトのMIMEタイプが取得されて、最後にメディア・データが取得されます。
Oracle Application ServerおよびOracle Databaseでは、クライアントのWebブラウザと直接通信するPL/SQL Gatewayを含むApache HTTPサーバーによって動作するOracle HTTP Serverがインストールされます。
Oracle HTTP Serverは、Webアプリケーションで使用される静的なHTMLファイルやイメージなどを主に提供します。Oracle HTTP Serverは通常、インストール先のファイル・システムに配置されます。Oracle HTTP Serverには、機能を拡張するモジュールまたはプラグインが含まれます。Oracleが提供するこれらのモジュールの1つに、mod_plsqlモジュールがあります。これはPL/SQL Gatewayとも呼ばれます。PL/SQL Gatewayは、PL/SQLストアド・プロシージャをコールして、データベースからWebブラウザにデータを動的に提供します。PL/SQL Gatewayは、Webブラウザからのリクエストを、PL/SQLストアド・プロシージャのコールにマップされたPL/SQLサーブレットまたはPL/SQL Server Pagesのフォームで受信します。PL/SQLストアド・プロシージャがデータベースからデータを取得し、PL/SQL Web Toolkitからのデータおよびコードを含むHTTPレスポンスを生成して、生成したWebページをWebブラウザに表示します。PL/SQL Web Toolkitには、htp
、htf
およびowa
という一連のパッケージが含まれています。これらのパッケージをストアド・プロシージャで使用すると、リクエストに関する情報を取得し、HTMLタグを構成して、クライアントのWebブラウザにヘッダー情報を戻すことができます。
図2-1に、PL/SQL開発環境の主要コンポーネントであるOracle HTTP Server(Oracle Application ServerおよびOracle Databaseのコンポーネント)、Webブラウザおよびデータベースを示します。クライアントのWebブラウザからのリクエストが、PL/SQLプロシージャの実行によってWebページのレスポンスに変わる手順を次に説明します。
クライアントのWebブラウザが、PL/SQL Server PagesまたはサーブレットのリクエストをOracle HTTP Serverに送信します。
Oracle HTTP Serverは、リクエストをPL/SQL Gateway(mod_plsql)にルーティングします。
PL/SQL Gatewayが、データベース・アクセス記述子(DAD)に格納された構成情報を使用してデータベースにそのリクエストを転送し、データベースに接続します。
PL/SQL Gatewayがコール・パラメータを準備し、アプリケーションのPL/SQLパッケージおよびPL/SQLストアド・プロシージャを起動します。
PL/SQLプロシージャが、データベースのデータおよびデータベースからアクセスしたPL/SQL Web Toolkitの特殊なパッケージを使用してHTMLページを生成します。PL/SQL Web Toolkitには、htp
、htf
およびowa
という一連のパッケージが含まれます。これらのパッケージをストアド・プロシージャで使用すると、リクエストに関する情報を取得し、HTMLタグを構成して、PL/SQL Gatewayに戻すレスポンスとしてクライアントのWebブラウザにヘッダー情報を戻します。
PL/SQL GatewayがOracle HTTP Serverにレスポンスを送信します。
Oracle HTTP Serverが、クライアントのWebブラウザに、フォーマットされたWebページとして表示するレスポンスを送信します。
通常、フォーマットして戻されたWebページには1つ以上の追加リンクが含まれ、各リンクが選択されると、PL/SQL Gatewayを介して別のリクエストがデータベースに送信され、1つ以上のストアド・プロシージャが実行されます。生成されたレスポンスによって、クライアントのWebページのデータ(通常、追加リンクを含む)が表示されます。この追加リンクが選択されると、別のフォーマットされたWebページとして表示する生成済レスポンスを戻す多くのストアド・プロシージャが実行されます。PL/SQL開発環境のPL/SQLアプリケーションは、このように動作するように設計されています。
PL/SQL開発環境を使用するWebアプリケーション開発者は、アプリケーションを構成するプロシージャとファンクションを記述するPL/SQLパッケージの仕様部および本体を作成します。パッケージ仕様部では、アプリケーションで使用するプロシージャとファンクションを定義します。パッケージ本体は、各プロシージャとファンクションの実装です。すべてのパッケージはコンパイルされ、データベースに格納されて、データベース内のデータにアクセスしたり、Webページ表示用のHTML出力をフォーマットするための特定の操作を実行します。これらのPL/SQLストアド・プロシージャを起動するには、Webアプリケーション開発者は、リクエスト/レスポンス型のPL/SQLサーブレットおよびPL/SQL Server Pages(PSP)を使用して、Webブラウザのクライアントによるリクエストの送信およびHTTPを使用したレスポンスの取得を許可する必要があります。
Oracle HTTP Serverは、ブラウザに入力されたURLを、データベースに格納された特定のPL/SQLプロシージャにマップします。Oracle HTTP Serverは、各ストアド・プロシージャのDADを使用して固有の構成情報を格納することでこれを行います。そのため、各DADには、Webサーバーがデータベース接続に入力されたURLを変換してストアド・プロシージャをコールするために必要なデータベース接続情報が含まれます。
Oracle HTTP Serverがリクエストをリスニングし、そのリクエストをPL/SQL Gatewayにルーティングすると、PL/SQL Gatewayがデータベースにそのリクエストを転送します。DADに格納された構成情報の値によって、使用するデータベース別名、リモート・アクセスに使用する接続文字列、ドキュメントのアップロードまたはダウンロードに使用するプロシージャ、およびデータベースへのアクセスを許可するユーザー名とパスワード情報が決まります。ユーザーは、WebブラウザからPL/SQL Gatewayを起動するURLを指定します。URLには、すべての必須およびオプションのパラメータを指定するフォーマットが定義されており、DADの場所および実行するPL/SQLストアド・プロシージャの名前を含める必要があります(例2-4を参照)。
例2-4 Webブラウザでのmod_plsqlの起動に必要なURLフォーマット
protocol://hostname[:port number]/DAD-name/[[!][schema name.][package name.]procedure_name[?query_string]]
使用可能な各パラメータおよびオプションの詳細は、『Oracle HTTP Server mod_plsqlユーザーズ・ガイド』を参照してください。ただし、3.1項で説明されているOracle MultimediaおよびPL/SQL Web Toolkitでフォト・アルバム・アプリケーションを使用する場合は、例2-5に示す形式にURLを簡略化できます。
図2-5 フォト・アルバム・アプリケーションのWebブラウザでのmod_plsqlの起動に必要なURLフォーマット
protocol://<hostname>
[:<port-number>
]/DAD-name/]procedure_name
WebブラウザにURLを入力する際は、プロトコル(HTTPまたはHTTPS)、ホストWebサーバー名およびホストWebサーバーがリクエストをリスニングして処理するポート番号を含めます。次に、指定する仮想パスに/pls/<DAD-name>
を含めてWebサーバーがmod_plsqlを起動するように構成されていること、およびWebサーバー上のDADの場所を示します。
例2-4の最後の5つのパラメータには、感嘆符(!)、スキーマ名、パッケージ名、プロシージャ名および問合せ文字列が含まれています。構文の感嘆符、スキーマ名、パッケージ名および問合せ文字列のパラメータはオプションです。プロシージャ名のみが必須のパラメータです。
感嘆符は、柔軟なパラメータの引渡しが使用されていることを示します。スキーマ名を省略した場合、ユーザー名に基づいて解決されます。パッケージ名を省略した場合、プロシージャがスタンドアロンであることを意味します。問合せ文字列のパラメータはストアド・プロシージャ用であり、特殊なフォーマットで指定します。これらの5つのパラメータのうち、プロシージャ名はDADとURLの両方に指定する必要があります。他の4つのパラメータは、アプリケーションに応じてDADまたはURLのいずれか一方に指定します(あるいはどちらにも指定しません)。
URLを入力すると、指定したDADのホームページが表示されます。Webブラウザ・ページのアドレス・フィールドにURLを入力すると、指定したDADの場所のみ、指定したDADの場所とプロシージャ名、または指定したDADの場所とschema.package.procedure
名のいずれかが起動されます。レスポンスはHTMLページとして戻されます。HTMLページには、リクエストされたデータおよびクライアントのWebブラウザに表示される他の指定コードが含まれます。動作方法については、第4章のCode Wizardの説明を参照してください。たとえば、Code Wizardの管理URLを起動するには、第4章に示すURLを次のように入力します。
http://<hostname>
:<port-number>
/pls/ordcwadmin
仮想パスにpls
を含めてWebサーバーがmod_plsqlを起動するように構成されていることを示し、続けてCode Wizard管理者が使用するDADの名前ordcwadmin
を含めます。
HTMLページが表示されると、次のCode Wizard管理者のURLに解決されます。
http://<hostname>
:<port-number>
/pls/ordcwadmin/ORDCWPKG.menu
ORDCWPKG.menu
はpackage.procedure
名を表します。この名前はordcwadmin
DADのデフォルトのホームページとして指定されています。
起動したPL/SQL Gatewayではステートレス・モデルが使用され、複数のHTTPリクエスト間をトランザクションがまたがることはできません。このステートレス・モデルでは通常、HTTP Cookieを使用するか、HTML FormパッケージのHTML form要素としてhidden HTMLフィールドを使用するか、または問合せ用にデータベース表の重要な情報のストレージを使用することによって、アプリケーションが状態を保持するセッションを作成できます。詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。
JavaおよびJava Database Connectivity(JDBC)に精通した開発者は、Oracle Multimedia Java APIを使用するメディア・リッチJavaアプリケーションを記述できます。Oracle Multimedia Java APIに含まれるクラスは、Oracle Multimediaデータベース・オブジェクト用のJavaプロキシ・クラスです。Javaアプリケーションでは、これらのJavaクラスでJDBCを介して、Oracle Multimediaデータベース・オブジェクトにアクセスします。
Oracle Multimedia Java APIのJavaクラスは、oracle.ord.im.*
パッケージに含まれています。これらのJavaクラスの名前は、Oracle Multimediaデータベース・オブジェクトの名前と似ています。また、Javaの標準ネーミング規則にも従っています。
OrdAudio
OrdDoc
OrdImage
OrdVideo
2.3.1項では、Oracle Multimedia Java APIを使用するための環境設定について説明します。2.3.2項では、JavaアプリケーションでOracle Multimediaオブジェクトからメディア・データを取得する方法について説明します。2.3.3項では、JavaアプリケーションでOracle Multimediaデータベース・オブジェクトへメディア・データをアップロードする方法について説明します。2.3.4項では、Javaアプリケーションで例外を処理する方法について説明します。
この項に示すすべての例では、Oracleのインストール時に、デフォルトでインストールされるサンプル・スキーマが使用されています。これらのスキーマの作成方法および使用方法の詳細は、『Oracle Databaseサンプル・スキーマ』を参照してください。
これらのクラスで使用可能なメソッドの詳細は、『Oracle Multimedia Java API Reference』を参照してください。
Oracle Multimedia Java APIを使用するには、Javaプログラムをコンパイルおよび実行するための環境を設定する必要があります。次の手順を実行します。
環境変数CLASSPATHを指定し、この環境変数に、Oracle Multimediaとその他の必要な機能に適したOracle Javaライブラリが含まれていることを確認します。
次の表に、Javaライブラリの名前、そのライブラリを必要とするOracle Multimedia機能またはその他の機能、そのライブラリをサポートするJDKのバージョン、プラットフォーム、およびライブラリのJARファイルを取得できる<ORACLE_HOME>
ディレクトリ下のパス名を、Javaライブラリごとに示します。
Oracle Javaライブラリの名前 | 関連する機能 | JDKバージョン、プラットフォームおよび場所 |
---|---|---|
Oracle JDBCライブラリ | すべてのOracle Multimedia機能 | JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
Oracle Multimedia Java Classesライブラリ | すべてのOracle Multimedia機能 | JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
Oracle Multimedia DICOM Java Classesライブラリ | DICOM機能 | JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
Oracle XDB Java Classesライブラリ | DICOM機能
Oracle Multimediaメタデータ抽出 |
JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
Oracle Multimedia Java Classes for Servlets and JSPライブラリ | JavaサーブレットおよびJSPアプリケーション | JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
NLSキャラクタ・セット変換ライブラリ(オプション)<ORACLEHOME> /jlib/orai18n.jar |
NLSキャラクタ・セット変換が必要脚注 1 | JDK 5以降、LinuxおよびUNIX上:
JDK 5以降、Windows上:
|
脚注 1 クライアント・アプリケーションとデータベースとの間でNLSキャラクタ・セット変換が必要な場合は、CLASSPATH変数にorai18n.jar
ファイルを含める必要があります。NLSキャラクタ・セット変換が必要であるのに適切なライブラリが指定されていないと、Oracle Multimediaオブジェクト型のキャラクタ・ベースの属性が16進にエンコードされた文字列として戻されることがあります。NLSキャラクタ・セット変換の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
注意: JDBC OCIドライバを使用している場合は、LD_LIBRARY_PATH(LinuxまたはUNIXの場合)またはPATH(Windowsの場合)のいずれかの変数に、JDBC OCI共有ライブラリの場所を指定する必要があります。使用するプラットフォームに応じて、次に示す <ORACLE_HOME> /lib (LinuxおよびUNIXのlibocijdbc11.so の場合)<ORACLE_HOME> \bin (Windowsのocijdbc11.dll の場合)このライブラリ・パスは共有されるため、SQL*Plusなどの他のクライアント・アプリケーションを使用可能にするために、すでに設定されている場合があります。 |
Javaプログラムに、次のインポート文を1つ以上追加します。
java.sql
パッケージに含まれている標準のJDBCクラスの他に、Oracle JDBC拡張クラスoracle.jdbc.OracleResultSet
を次の手順でインポートする必要があります。
import oracle.jdbc.OracleResultSet;
Javaアプリケーションで処理するメディアによって、次のインポート文を1つ以上追加する必要があります。
import oracle.ord.im.OrdAudio; import oracle.ord.im.OrdDoc; import oracle.ord.im.OrdImage; import oracle.ord.im.OrdVideo;
Oracle Multimediaオブジェクトは、Oracle Multimediaデータベース・オブジェクトに対するJavaプロキシ・オブジェクトとしてJavaアプリケーションに取得できます。この場合、そのままの名前(OrdAudio、OrdDoc、OrdImageおよびOrdVideo)を使用できます。JDBC接続の確立後、次の手順でOracle Multimedia Javaオブジェクトを取得します。
データベースからOracle Multimediaオブジェクトを選択するためのJDBC文を作成します。
String query = "select product_photo, product_audio,"+ " product_video, product_testimonials from" + " pm.online_media where product_id=3117"; PreparedStatement pstmt = conn.prepareStatement(query);
問合せを実行し、結果セットを取得します。
OracleResultSet rset = (OracleResultSet)pstmt.executeQuery();
結果セットから、Oracle Multimedia Javaオブジェクトを取得します。
if ( rset.next() ) { OrdImage imgProxy = (OrdImage)rset.getORAData( "product_photo", OrdImage.getORADataFactory()); OrdAudio audProxy = (OrdAudio)rset.getORAData( "product_audio", OrdAudio.getORADataFactory()); OrdVideo vidProxy = (OrdVideo)rset.getORAData( "product_video", OrdVideo.getORADataFactory()); OrdDoc docProxy = (OrdDoc)rset.getORAData( "product_testimonials", OrdDoc.getORADataFactory()); }
注意: Oracle Multimediaリリース8i およびリリース9i では、getCustomDatumメソッドでOracle Multimedia Javaオブジェクトを取得します。Oracle JDBCリリース10g では、getCustomDatumメソッドは廃止され、getORADataメソッドに変更されました。Javaプログラム環境で、同一バージョンのOracle Multimedia Javaクライアント・ライブラリ( |
メディア属性の取得メディア属性は、Oracle Multimedia Javaオブジェクトから、直接取得できます。次に例を示します。
int height = imgProxy.getHeight(); int width = imgProxy.getWidth(); String audFormat = audProxy.getFormat(); String vidMimetype = vidProxy.getMimeType();
次に、Javaアプリケーションで、メディア・データをOracle Multimediaデータベース・オブジェクトへアップロードするための手順を示します。
次の文を入力し、JDBC接続オブジェクトで自動コミット・フラグをfalse
に設定可能にします。
conn.setAutoCommit(false);
更新するOracle Multimedia Javaオブジェクトをデータベースから取得します。メディア・データは、表の既存のOracle Multimediaオブジェクトにロードしたり、または表に新しい行を作成することで、存在しないOracle Multimediaオブジェクトにロードすることができます。
次に、表の既存のOracle Multimediaオブジェクトにメディア・データをロードするための問合せの例を示します。
//"for update" is required in the query string //since we will update the row later. String query1 = "select product_photo," + " product_audio, product_video," + " product_testimonials from" + " pm.online_media where product_id=3106" + " for update"; PreparedStatement pstmt = conn.prepareStatement(query1); OracleResultSet rset = (OracleResultSet)pstmt.executeQuery(); if ( rset.next() ) { OrdImage imgProxy = (OrdImage)rset.getORAData( "product_photo", OrdImage.getORADataFactory()); OrdAudio audProxy = (OrdAudio)rset.getORAData( "product_audio", OrdAudio.getORADataFactory()); OrdVideo vidProxy = (OrdVideo)rset.getORAData( "product_video", OrdVideo.getORADataFactory()); OrdDoc docProxy = (OrdDoc)rset.getORAData( "product_testimonials", OrdDoc.getORADataFactory()); } rset.close(); pstmt.close();
次に、表に新しい行を作成することで、存在しないOracle Multimediaオブジェクトにメディア・データをロードするための問合せの例を示します。
注意: このコード部分では、pm.online_media 表には、product_id=3106 という行は存在しないと想定しています。 |
String query2 = "begin insert into pm.online_media " + " (product_id, product_photo, product_audio," + " product_video, product_testimonials) values" + " (3106, ordimage.init()," + " ordaudio.init(), ordvideo.init()," + " orddoc.init()) returning product_photo," + " product_audio, product_video," + " product_testimonials into ?, ?, ?, ?;end;"; OracleCallableStatement cstmt = (OracleCallableStatement) conn.prepareCall(query2); cstmt.registerOutParameter(1, OrdImage._SQL_TYPECODE, OrdImage._SQL_NAME); cstmt.registerOutParameter(2, OrdAudio._SQL_TYPECODE, OrdAudio._SQL_NAME); cstmt.registerOutParameter(3, OrdVideo._SQL_TYPECODE, OrdVideo._SQL_NAME); cstmt.registerOutParameter(4, OrdDoc._SQL_TYPECODE, OrdDoc._SQL_NAME); cstmt.execute(); OrdImage imgProxy = (OrdImage)cstmt.getORAData(1, OrdImage.getORADataFactory()); OrdAudio audProxy = (OrdAudio)cstmt.getORAData(2, OrdAudio.getORADataFactory()); OrdVideo vidProxy = (OrdVideo)cstmt.getORAData(3, OrdVideo.getORADataFactory()); OrdDoc docProxy = (OrdDoc)cstmt.getORAData(4, OrdDoc.getORADataFactory()); cstmt.close();
loadDataFromFileメソッドをコールし、メディア・データをファイルからOracle Multimedia Javaオブジェクトにロードします。
String imageFileName = "laptop.jpg"; String audioFileName = "laptop.mpa"; String videoFileName = "laptop.rm"; String docFileName = "laptop.jpg"; imgProxy.loadDataFromFile(imageFileName); audProxy.loadDataFromFile(audioFileName); vidProxy.loadDataFromFile(videoFileName); docProxy.loadDataFromFile(docFileName);
Javaオブジェクト・フィールドにメディア属性を移入し、Oracle Multimediaオブジェクトのプロパティを設定します(オプション)。
imgProxy.setProperties(); audProxy.setProperties(new byte[1][64]); vidProxy.setProperties(new byte[1][64]); docProxy.setProperties(new byte[1][64], true);
注意: setPropertiesメソッドは、メディアのフォーマットを認識し、オブジェクト・フィールドにメディア情報(イメージの高さや幅、フォーマット、MIMEタイプなど)の移入を試みます。メディアのフォーマットが認識できない場合、java.sql.SQLExceptionエラーが発生します。 |
すでにデータをロードしたOracle Multimedia Javaオブジェクトでデータベース表を更新します。
String query3 = "update pm.online_media set" + " product_photo=?, product_audio=?," + " product_video=?, product_testimonials=?" + " where product_id=3106"; OraclePreparedStatement pstmt = (OraclePreparedStatement)conn.prepareStatement(query3); pstmt.setORAData(1, imgProxy); pstmt.setORAData(2, audProxy); pstmt.setORAData(3, vidProxy); pstmt.setORAData(4, docProxy); pstmt.execute(); pstmt.close();
トランザクションをコミットします。
conn.commit();
実行時に発生する可能性があるエラーを、常にアプリケーションで処理する必要があります。これにより、実行時エラーが発生してもプログラムの動作を継続できます。また、プログラムの動作中に、ユーザーがエラーの原因を認識することもできるようになります。エラーを適切に処理することによって、可能であれば、アプリケーションの実行中に常にエラーからリカバリできるようになります。さらに、適切にエラーを処理することで、必要な情報が提供されるため、常にエラーの原因を認識できるようになります。
この項では、コード例を使用して適切なエラー処理について説明します。これらの例では、いくつかの一般的なOracle Multimediaエラーおよびその他のタイプのエラーをJavaプログラムで処理する方法を示します。これらの例は、第3章および第5章に示すJavaサンプル・アプリケーションから抜粋したものです。 他の例については、『Oracle Multimediaリファレンス』を参照してください。
例外を処理する場合、Javaではtry/catchブロックを使用します。たとえば、Javaの場合、次のように例外を処理します。
try { //<some program logic>) } catch (exceptionName a) { //Exception logic } finally { //Execute logic if try block is executed even if an exception is caught }
独自に設計、コーディングおよびデバッグしたアプリケーションであれば、プログラム内のどの箇所でエラーが発生してプログラムの処理が停止する可能性があるかがわかります。そのような箇所に対しては、発生する可能性のあるエラーを処理するための例外処理ブロックを追加する必要があります。 Java例外の処理の詳細は、『Oracle Database Java開発者ガイド』および『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
次の例では、try/catchブロックを使用した例外処理について説明します。これらの例は、Oracle Multimedia IMExampleアプリケーションまたはOracle Multimedia Javaサーブレット・フォト・アルバム・アプリケーション(Oracle Multimedia JavaServer Pagesフォト・アルバム・アプリケーション)、あるいはその両方のアプリケーションにあります。
IMExampleと呼ばれるOracle Multimedia Javaサンプル・アプリケーションのIMUtil
クラスには、一般的なイメージ機能用のユーティリティ・メソッドが含まれています。そのうちの1つが、setProperties( )メソッドです。このスタティック・メソッドは、入力パラメータとしてOrdImageオブジェクトをとり、そのオブジェクトに対しsetProperties( )メソッドをコールします。
static boolean setProperties(OrdImage img) { try { img.setProperties(); return true; } catch (SQLException e) { return false; } }
例外が発生した場合、setProperties( )メソッドはfalseを戻します。それ以外の場合は、trueを戻します。
IMExampleアプリケーションの詳細およびJavaアプリケーションでのsetProperties( )メソッドの使用方法の詳細は、第5章を参照してください。
Oracle Multimedia Javaサーブレット・フォト・アルバム・アプリケーションのPhotoAlbumServlet
クラスと、Oracle Multimedia JavaServer Pagesフォト・アルバム・アプリケーションのPhotoAlbumBean
クラスの両方で使用されているinsertNewPhoto( )メソッドは、新しい写真をフォト・アルバムに挿入し、同時に縮小イメージを作成します。アプリケーションでイメージを処理する際にイメージ・フォーマットが不明な場合、processCopy( )メソッドがコールされると、アプリケーションは正常に実行されません。この潜在的な問題を回避するには、アプリケーションで、次のtry
ブロックおよびcatch
ブロックを使用して、SQLのすべての例外を捕捉します。
try { image.processCopy( "maxScale=50,50", thumb ); } catch ( SQLException e ) { thumb.deleteContent(); thumb.setContentLength( 0 ); }
この例では、イメージ・フォーマットが不明で縮小イメージを作成できない場合に、アプリケーションによってSQL例外が捕捉され、deleteContent( )メソッドがコールされて縮小イメージのコンテンツが削除されます。次に、setContentLength( )メソッドがコールされて、コンテンツ長が0(ゼロ)に設定されます。
Javaプラットフォームでは、Webアプリケーションは、Webサーバーの動的拡張です。JavaベースのWebアプリケーションは、JavaサーブレットまたはJSPページ(あるいはその両方)で構成されます。Javaサーブレットは、動的にHTTPリクエストを処理し、HTTPレスポンスを構築するJavaクラスです。JSPページは、サーブレットとして実行されるテキスト・ベースのドキュメントですが、より自然な形で静的コンテンツを作成できます。
Oracle Multimedia Servlets and JSP Java APIは、Oracle Multimedia Java APIに基づいています。Oracle Multimedia Servlets and JSP Java APIのクラスによって、JavaベースのWebアプリケーションにおけるOracle Databaseとの間でメディア・データの取得およびアップロードが容易になります。
Oracle Multimedia Servlets and JSP Java APIのJavaクラスは、oracle.ord.im.*
パッケージに含まれています。含まれているクラスは、次のとおりです。
OrdHttpResponseHandler
OrdHttpJspResponseHandler
OrdHttpUploadFormData
OrdHttpUploadFile
OrdMultipartFilter
OrdMultipartWrapper
OrdHttpResponseHandlerクラスによって、Oracle Databaseからのメディア・データの取得、およびJavaサーブレットからHTTPクライアントへのメディア・データの配信が容易になります。OrdHttpJspResponseHandlerクラスによって、JSPページに同じ機能が提供されます。OrdHttpUploadFormData、OrdHttpUploadFile、OrdMultipartFilterおよびOrdMultipartWrapperクラスによっては、WebクライアントからOracle Databaseへのメディア・データのアップロードが容易になります。
2.4.1項では、JavaベースのWebアプリケーションでOracle Multimediaオブジェクトからメディア・データを取得する方法について説明します。2.4.2項では、JavaベースのWebアプリケーションで、データベースのOracle Multimediaオブジェクトへメディア・データをアップロードする方法について説明します。
Oracle Multimedia Servlets and JSP Java APIを使用するには、2.3.1項の手順1に従って、適切なJavaライブラリで環境を設定する必要があります。そのリストの項目に加え、CLASSPATH環境変数にOracle Multimedia Java Webライブラリ(<ORACLE_HOME>
/ord/jlib/ordhttp.jar
)を追加する必要があります。
これらのクラスで使用可能なメソッドの詳細は、『Oracle Multimedia Servlets and JSP Java API Reference』を参照してください。
通常、イメージを含むWebページをWebブラウザに表示するには、2回のHTTPラウンド・トリップが必要です。
1回目のラウンド・トリップでは、Webブラウザは、イメージを含むWebページのURLに対しHTTPリクエストを送信します。それに対し、Webサーバーからは、Webページのテキスト・コンテンツとメディア・コンテンツのURLが返されます。URLは、Webページの<img>
タグのsrc
属性です。
2回目のラウンド・トリップでは、Webブラウザは、<img>
タグのURLに対し、イメージのバイナリ・データを取得するために別のHTTPリクエストを送信します。その後、ブラウザにイメージを表示します。
JavaベースのWebアプリケーションで、データベースからHTTPクライアント(Webブラウザ)にメディア・データを送信するには、適切なメディアのURL(1回目のHTTPレスポンスで生成)および適切なメディア配信コンポーネント(2回目のHTTPレスポンスのためのサーブレットまたはJSP)が必要です。
メディア・データがWebサーバー上に静的ファイルとして格納されている場合、メディアのURLは、ファイル・システム上のメディア・ファイルへの相対パスまたは絶対パスになります。メディア・データがデータベースに格納されている場合、通常、メディアのURLはメディア配信コンポーネント(サーブレットまたはJSP)とメディア配信コンポーネントのパラメータで構成されます。メディア配信コンポーネントは、メディア・データを取得する2回目のHTTPリクエストのターゲットになります。メディア配信コンポーネントのパラメータは、メディア配信コンポーネントが、データベースにおけるメディア・データの位置を問い合せるために使用します。次に例を示します。
<img src="OrdGetMedia.jsp?id=1"/>
ここで、メディアURL("OrdGetMedia.jsp?id=1"
)内のOrdGetMedia.jsp
はメディア配信コンポーネントを示し、id=1
はメディア配信コンポーネントに対するパラメータを示します。
メディア・データはOracle Multimediaオブジェクトとしてデータベースに格納されているため、メディア配信コンポーネントは、特定の問合せ条件に基づいて、メディア・データをJavaオブジェクト(2.3.2項を参照)として動的に取得する必要があります。これによって、Oracle Multimedia Servlets and JSP Java APIのOrdHttpResponseHandlerまたはOrdHttpJspResponsehandlerクラスを使用して、データをHTTPクライアント(Webブラウザ)に配信できます。
次に、メディア配信コンポーネントとしてJavaサーブレットを使用する例を示します。SQL文およびこの操作を実行しているコードの主な部分は、太字で強調表示しています。
import oracle.ord.im.OrdHttpResponseHandler; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // obtain oracle.ord.im.OrdImage object // imgProxy follows the Section "Media Retrieval in Java" . . . // deliver the image data to the browser OrdHttpResponseHandler handler = new OrdHttpResponseHandler( request, response); handler.sendImage(imgProxy); . . . }
次に、メディア配信コンポーネントとしてJSPページを使用する例を示します。SQL文およびこの操作を実行しているコードの主な部分は、太字で強調表示しています。
<%@ page import="oracle.ord.im.OrdHttpJspResponseHandler" %> <jsp:useBean id = "handler" scope="page" class = "oracle.ord.im.OrdHttpJspResponseHandler" /> <% // obtain oracle.ord.im.OrdImage object // imgProxy follows the Section "Media Retrieval in Java" . . . // deliver the image data to the browser handler.setPageContext( pageContext ); handler.sendImage(imgProxy); return; %>
HTMLフォームによって、WebブラウザとWebサーバー間でデータの入力およびアップロードが可能になります。次に、ファイルをアップロードするHTMLフォームの例を示します。SQL文およびこの操作を実行しているコードの部分は、太字で強調表示しています。
<form action="uploadAction.jsp" method="post" enctype="multipart/form-data"> id: <input type="text" name="id"/> description: <input type="text" name="description"/> Photo: <input type="file" name="photo"/> </form>
前述のコード例で、<form>
タグのenctype
属性の値に「multipart/form-data
」を設定した場合、アップロード・データに対し、multipart/form-dataフォーマットのエンコーディングが指定されます。<form>
タグのaction
属性の値は、アップロード・データを処理するJSPの名前を表します。
アップロード・データをJSPまたはサーブレットで処理するには、次の手順を実行します。
アップロード・ファイルをデコードします。このファイルは、multipart/form-dataフォーマットでエンコードされているため、データの処理を続行するには、デコードする必要があります。エンコードされたHTTPリクエスト・データは、OrdHttpUploadFormDataクラスでデコードできます。この場合、アップロード・ファイルはOrdHttpUploadFileオブジェクトのインスタンスとして取得されます。デコードされたアップロード・ファイルを取得する場合、このクラスは、明示的または暗黙的に使用できます。
次に、OrdHttpUploadFormDataクラスを明示的に使用してアップロード・ファイルを取得する例を示します。SQL文およびこの操作を実行しているコードの主な部分は、太字で強調表示しています。このメソッドは、アップロードのHTTPリクエストを処理するサーブレットまたはJSP内で使用します。
// // Import OrdHttpUploadFormData and OrdHttpUploadFile class: // In a servlet: // import oracle.ord.im.OrdHttpUploadFormData; // import oracle.ord.im.OrdHttpUploadFile; // In a JSP: // <%@ page import="oracle.ord.im.OrdHttpUploadFormData" %> // <%@ page import="oracle.ord.im.OrdHttpUploadFile" %> // // // Following code snippets should be within <% %> if in a JSP. // // Create an OrdHttpUploadFormData object and use it to parse // the multipart/form-data message. // OrdHttpUploadFormData formData = new OrdHttpUploadFormData( request ); formData.parseFormData(); // // Get the description, location, and photo. // String id = formData.getParameter( "id" ); String description = formData.getParameter( "description" ); OrdHttpUploadFile photo = formData.getFileParameter( "photo" ); // // Process the uploaded file. // ... // // Release the resources. // formData.release();
アップロード・データを処理する各JSPまたはサーブレットで明示的にOrdHttpUploadFormDataクラスがインスタンス化または解放されるのを回避するには、OrdMultipartFilterクラスでWebアプリケーションを構成し、OrdHttpUploadFormDataクラスを暗黙的に使用します。OrdMultipartFilterクラスを使用すると、multipart/form-dataフォーマットでエンコードされているHTTPリクエストは、デコードされてから、そのリクエストを処理するJSPまたはサーブレットに渡されます。
次の手順および例は、OrdHttpUploadFormDataクラスを暗黙的に使用してアップロード・ファイルを取得する方法を示します。このコード例では、SQL文およびこの操作を実行しているコードの部分は、太字で強調表示しています。
Webアプリケーションのweb.xml
ファイルに次のコードを追加し、フィルタを構成します。
<filter> <filter-name>OrdMultipartFilter</filter-name> <filter-class> oracle.ord.im.OrdMultipartFilter </filter-class> </filter> <filter-mapping> <filter-name>OrdMultipartFilter</filter-name> <servlet-name>*.jsp</servlet-name> </filter-mapping>
フィルタの構成後、JSPまたはサーブレットにあるフォーム・データおよびアップロード・ファイルを取得します。
// // Get the id, description, and photo. // String id = request.getParameter( "id" ); String description = request.getParameter( "description" ); oracle.ord.im.OrdHttpUploadFile photoFile = request.getFileParameter("photo");
ここで、request
はJSPまたはサーブレットに渡されたHttpServletRequestオブジェクトを示します。
データベースにアップロード・ファイルを保存します。OrdHttpUploadFormDataクラスを明示的または暗黙的に使用してOrdHttpUploadFileオブジェクトが取得された後、次の文を使用して、アップロード・ファイルをOracle Multimediaオブジェクトとしてデータベースにロードできるようになります。
photoFile.loadImage(imgProxy);
ここで、photoFile
はOrdHttpUploadFileオブジェクトを示し、imgProxy
は2.3.3項の手順1で取得したOrdImageオブジェクトを示します。
loadImageメソッドは、setPropertiesメソッドを暗黙的にコールし、オブジェクト・フィールドへの移入を実行します。
Oracle Multimedia Javaオブジェクトへデータをロードした後、2.3.3項の手順4および5に従って、データベース表で対応するOracle Multimediaオブジェクトを更新できます。