Oracle製品群によるエンタープライズソリューション
Developer/2000,Web Application Serverによる
Oracleデータベースの活用
〜クライアント/サーバーからWebソリューションへ
今もっともホットなトピック,インターネット/イントラネット
中でもWebベースのシステムが面白い
Oracleが提供するネットワークコンピューティングの
ソリューションはどのようなものなのだろうか
Developer/2000 R1.5 Serverと
Web Application Server R3.0を探る
酒井法雄 SAKAI,Norio
RDBMSベンダーから脱皮を図るOracle Oracleといえば,Oracle7,そしてOracle8 ServerといったRDBMSを思い浮かべる.つまり,OracleはRDBMSベンダーだと思いがちである.たしかにそれも正しい.
Oracle7 Serverは,あらゆる処理をパラレルで実行していこうというものであり,折りからのダウンサイジングの波もあり,大きな支持を得た.そして,最近リリースされたOracle8では,オブジェクト指向を取り入れ,データハウジング的機能も取り込んだ方向に進化してきている.しかし,Oracle8の新機能と言えるようなものは比較的地味なもので,大量のデータに対応するためのしくみなどが売りである.
今のOracleはOracle8というRDBMSサーバーだけの会社ではなく,インターネットやイントラネットでのRDBMSソリューションをトータルに提供するために,Oracle8 Serverだけではなく,NCやツール,WWWまわりのしくみなどを強化している.つまり,RDBMSのベンダーから,ネットワークコンピューティングベンダーへ,Oracleは移行しようとしているのである.
NCAとは
このシナリオがOracleのNCA(Network Computing Architechture)である(図1).NCAは,WebベースでのRDBMSアクセスの限界を超え,さまざまなソリューションを展開する.Webベースの情報システムで重要なのは,Thinクライアントという考え方で,すべての処理をサーバーサイドに集中させ,クライアント側にはWebブラウザさえあれば,すべてのアクセスが可能になるという方法だ.これは,従来からあるCGIを使ったRDBMSアクセスでも可能である.
しかし,より柔軟性を持たせるためには,Javaアプレットなどの積極利用が重要になる.また,ステートレスなHTTPでは実現できないトランザクションの管理も必要だ.これらは,それに適したソフトウェアのしくみを用意すればよい.さらに,Thinクライアントをより低価格に実現するために,NCが提案されているわけだ.
このように,ネットワークコンピューティングを実現するために,Oracleはさまざまなソフトウェアを続々と発表している.そんな中に出てきたOracle8であるから,一見地味な印象を受けてしまうが,こういったネットワークコンピューティングの世界でも,Oracleの中心となるのは,やはりOracle Serverであることは間違いない.
分散オブジェクト環境
HTTPとHTMLベースの従来からのWebシステムでは,次のような問題があった.
これらの問題を解決するために,クライアントサイドでJavaアプレットなどのプログラムが動くようにするという解決法が考えられた.そのプログラムの中で,Webサーバーとは別にRDBMSにアクセスするセッションを維持し,従来のC/Sシステムと同様な柔軟性を持たせるのだ.
- ステートレスなためトランザクションができない
- ユーザーインターフェイスが貧弱
これは,すなわち従来から言われている分散オブジェクト技術なのである.Webに限ったソリューションではない.そして,この技術にも,Microsoft V.S. 反Microsoftという構図がある.
このための規格を吟味してきたOMG(Object Management Group)は,CORBA(Common Object Request Broker Architecture)ベースのIIOP(Internet Inter-ORB Protocol)を規定した.OMGは数多くのベンダーが話し合いで規格を決めているオープンなものだが,オープンなものはなかなかモノができないという欠点がある.一方,Microsoftはさっさと独自規格のDCOM(Distributed Component Object Model)を,Windows NT 4.0と同時に提供しはじめた.DCOMはOLEベースの分散オブジェクト技術で,実装はあくまでもMicrosoft独自である.MTS(Microsoft Transaction Server)などのトランザクションを可能にするサーバーや,Visual Basic 5.0などのツールを使えば,比較的簡単に分散オブジェクトを実装することができる.
いつもは,あくまでも独自に少々調子悪いものを作るが,それをいち早く提供してデファクトスタンダードにするMicrosoftに他のベンダーはやられてしまうが,今回は少々違っている.Oracleは,あくまでもオープンをベースにしているが,適材適所にMicrosoftのやり方も取り入れている.つまり,CORBA準拠の方法を取りながらも,DCOMともコンパチビリティーを持たせ,Oracle独自のプロトコルも実装してきた.それが,今回紹介する2つの製品である.
ここでは,Oracleの分散オブジェクト環境NCA構想を担う2製品,Developer/2000 R1.5 Serverと,Web Application Server R3.0を紹介することにしよう.
Developer/2000 R1.5 Server
―― HTTPと別セッションで通信するJavaベースのソリューションDeveloper/2000 R1.5は,Oracle独自のプロトコルを使った分散オブジェクト環境を構築するためのツールであり,従来のC/Sシステムを構築することも可能な柔軟性を持っている.
C/S時代を活躍してきたD/2000ファミリー
実は,Developer/2000は元々がC/S用のクライアントツールなのである.その起源を遡れば,UNIX用のCDE(Cooperative Development Environment) Toolsという製品に行き当たる.
従来のDeveloper/2000は,次の3つの製品を統合したものであった.さらにDeveloper/2000には,Designer/2000という兄弟ツールがある.これは,計画,分析,設計,構築といったシステム開発ライフサイクルを管理するもので,モデリングの機能を備え,Developer/2000などのソースコードを出力したり,逆にリバースエンジニアリングをしたりすることができる.Developer/2000とDesigner/2000を組み合わせて使うと,システム構築に強力なパワーを発揮するのである.
- Forms:フォームベースでのクライアントアプリケーションを作成するツール
- Graphics:グラフやチャートを表示するクライアントアプリケーションを作成するツール
- Reports:帳票を作成するクライアントアプリケーションツール
Developer/2000は,GUIベースでの開発ができるツールだが,スクリプトはPL/SQLが使われる.面白いのは,クライアントサイドで作成したPL/SQLプロシージャの動作を確認したら,ドラッグ&ドロップでサーバー側のストアードプロシージャにすることができる点だ.
このことに象徴されるように,Developer/2000は,Visual Basicなどの一般的な汎用ツールと比較すると,かなり特殊であり,APIの利用やActiveXコントロールの利用などの細かい制御には向かない.しかし,Oracle Serverへのアクセスを中心とした処理を目標にするのであれば,非常に効率よく開発をすることができる.
PCへのダウンサイジングが叫ばれた時期,実際にはマトモに使えるツールがほとんどなかったときにも,Developer/2000(CDE Tools)は,(一般的な知名度はともかくとして)実際にはかなりいろいろなところで使われてきたツールでなのである.
Formsでのアプリケーションの作成
Developer/2000のうち,入出力フォームなどを作るためのFormsの例を示そう.
Formsは,デザイナ,ジェネレータ,ランタイムの3つのモジュールからなる.
■Formsデザイナ
アプリケーションのデザインをする.具体的には,次のような手順でまったくコードを記述しなくても,アプリケーションを作成することも可能だ.
- Oracle Serverとのセッションを確立
- アクセスする表やビュー,シノニムの選択
- アクセスする列や画面への表示方法,条件などを指定(画面1)
- フォントや色などの指定
2〜3の手順を繰り返し,マスター/ディテイル関係を作成することも可能だ(画面2).そのままインタープリタで実行してデバッグをすることもできる.
■Formsジェネレータ
デバッグが終了したアプリケーションは,コンパイルして .fmxという拡張子のつく中間実行ファイル形式を作成できる.
■Formsランタイム
fmx形式ファイルを実行することができる(画面3).
このように,Developer/2000を使うと,非常に簡単に高度なクライアントアプリケーションを作成することができる.ここまでは,従来からDeveloper/2000の持っていた機能である.次に,R1.5から増えた,Webアプリケーションのしくみを説明していこう.
Developer/2000 for the Webのしくみ
C/SシステムでのDeveloper/2000の動作は,図2のように表わすことができる.これは,RDBMSサーバーにあるデータに対して,SQL*Net経由でクライアントアプリケーションがアクセスするものだ.ここで,クライアントアプリケーションにはさまざまな役割があることに注目してほしい.つまり,次の3つの部分である.
これを,Webアプリケーションにすることを考えてみよう.もちろん,Javaアプレットとしてこれらすべての部分をクライアント側に持ってくることも可能である.しかし,それだとクライアント側にかなり大きな負荷がかかることになる.加えて,SQL*Netがクライアント側にインストールされているという前提でないと,アプリケーションは動作しない.したがって,このまますべてのしくみをクライアント側に持ってくることは,Thinクライアントという視点からも現実的ではない.
- ユーザーインターフェイス部分
- アプリケーションロジック
- Data ManagerとPL/SQLエンジン
この手のn階層システムでは,クライアントをユーザーインターフェイスのみにするというのが,常套手段である.そこで,Oracleでは,ユーザーインターフェイス部分のみをJavaアプレットとしてダウンロードされるようにし,アプリケーションロジック部分とData ManagerとPL/SQLエンジンは,Developer/2000 Serverと呼ばれるサーバーで処理をさせることにした.これらには,Forms(図3),Graphics,Reportsの各サーバーがある.これならば,クライアント側の画面はそのままで,C/Sのクライアントアプリケーションと同じように柔軟な動作をさせることができる.図3:Developer/2000 for the WebではFormsサーバーを経由してRDBMSにアクセスする
![]()
しかも,通常のC/Sで使われるfmxファイルを自動的に分析して,ユーザーインターフェイスだけがJavaアプレットとして注目してほしい.つまり,これが“Developer/2000 for the Web”というコード名で呼ばれていた機能で,OracleはDeveloper/2000 Serverという製品を追加した.従来パッケージのDeveloper/2000にも,Serverと同じモジュールが含まれているが,これはテスト用である.実際には,Serverはライセンスを含めた実行環境なのである.
Formsを使ったときの動作について,順番にさらに詳しく説明しよう(図4).
- クライアントマシンからWebサーバーに,URLが指定されてリクエストがくる
- WebサーバーのFormsカートリッジハンドラから,HTMLおよび .fmxファイルを元にしたユーザーインターフェイスJavaアプレットがクライアントに送付
- クライアントにJavaアプレットがダウンロードされ,実行が開始される.このとき,Formsサーバーに接続して,必要なリクエストを行う
- Formsサーバーリスナーはランタイムエンジンに対して,リクエストに応じたクエリーを計画する
- Oracle Serverに対してクエリーの実行
- クエリーの結果をクライアントに送付
図4:Developer/2000 Serverでのアクセス
![]()
Formsサーバーは実際には次の2つのコンポーネントからなっている.
■リスナー
Formsサーバーリスナーは,Formsランタイムセッションを開始して,FormsクライアントとFormsランタイムエンジンとの間の接続を確立する.
■ランタイムエンジン
Formsサーバーランタイムエンジンは,Forms 4.5ランタイムエンジンのユーザーインターフェイス機能をFormsクライアントにリダイレクトし,残りのトリガーおよびコミットの処理,レコードの管理,および一般的なデータベース相互作用を含むすべてのフォーム機能を処理する.
Webアプリケーションとするには
では,実際にはどのような手順でこのようなWebアプリケーションとすることができるのだろうか.これは,簡単なようで少々ややこしいところがある.ここではFormsを例にとり,その方法を示すことにしよう.
■Web ServerとDeveloper/2000 Serverのインストール
Webアプリケーションとするためには,当然ながらWebサーバーが必要である.もちろん,Developer/2000 Serverも必要になる.ここで重要なのは,OracleのWeb Serverを使う必要があることだ.先に述べたようなメカニズムのため,Javaアプレットは動的に作られ,それに対応するアプリケーションロジックを実行するインスタンスも,動的に作られる.つまり,Web ServerとDeveloper/2000 Serverの密接な関係が必要であり,これらの2つのサーバーは同じマシンにインストールされている必要がある.
Webサーバー自体は,後に述べるようなカートリッジを使う方法でなければ,Oracleの提供するWeb Serverでなくてもかまわないことなっている.しかし,Oracle Serverと組み合わせたときの親和性を考えれば,Developer/2000 ServerにバンドルされているOracle Web Server 2.1あるいは,新しいOracle Web Application Server 3.0以降を使った方がよいだろう.このときには,OWS/WASとのORACLE_HOMEの共用が必須である.
また,Required Support Filesは7.3.2.xが必須である.Oracle7系の最新の7.3.3.xでは動作しないので,要注意.
ここでは,後ほど紹介するOracle Web Application Server 3.0を使ってみることにした.■fmxファイルの作成とサーバー側へのインストール
まずは,アプリケーションを作成する.これは,Formsデザイナでデザインしたものを,Formsジェネレータでfrmファイルにすればよい.まったく通常のC/Sと同じ方法である.ここでJavaアプレットを作るわけではないことに注目してほしい.
作成したfmxファイルは,サーバー側にある次のいずれかのディレクトリに配置する必要がある.
- ORACLE_HOME\bin\
- FORMS45_PATH環境変数で指定されたディレクトリ
■仮想ディレクトリの設定
実行時に動的にJavaアプレットを作成させるためには,いくつかのディレクトリをWebサーバーに設定する必要がある.これらのディレクトリはWebサーバーのデータディレクトリに設定してもよいが,自由度を高めるためには,仮想ディレクトリとした方がよい.表1に例を示す.
表1:仮想ディレクトリの設定例
実ディレクトリ 仮想ディレクトリ 用途 c:\orant\forms45\java\ /web_code/ アプレットのコードベース c:\web_forms\html\ /web_html/ HTMLページ c:\web_forms\jars\ /web_jars/ JARファイル アプレットのコードベースは,必ずORACLE_HOME\forms45\javaディレクトリにしなくてはならない.HTMLページには,後ほど説明するようなFormsクライアントアプレットをダウンロードするためのHTMLファイルを配置する.JARファイルはJavaのアーカイブファイルであり,アプレットの実行に必要なライブラリを配置する.仮想ディレクトリは,Webサーバーのアドミニストレーションページから指定することができる.
■カートリッジと非カートリッジ
クライアントからのリクエストによって,WebサーバーからはHTMLおよび適切なJavaアプレットが送付される.このHTMLファイルは,選択されたアプリケーションをWebブラウザ上で実行するのに必要なアプレットタグ,およびパラメータ,パラメータ値を含む必要がある.これらの必要な情報を含めるには,次の2つの方法がある.
- カートリッジ処理系
カートリッジ処理系では,初期のHTMLファイルはOracle Web (Application) Serverに実装されたFormsカートリッジハンドラによって作成される.利点は,一度一般的なアプリケーションカートリッジを作成すれば,それをベースにさまざまなアプリケーションに対応できることだ.別のアプリケーションでカートリッジを使用するには,アプリケーションのURLにパラメータを変更するだけで済む.
ただし,このためにはOracleのWRB(Web Request Broker)をアプリケーションサーバーにインストールしておく必要がある.Oracle WRBはカートリッジの枠組みを提供し,それに対するクライアント接続を管理する.
- 非カートリッジ処理系
非カートリッジ処理系では,各アプリケーションに対応するHTMLファイルを作成しておく必要がある.この方法の利点は,アプリケーションサーバーにOracleのWRBをインストールする必要がないことである.
ここでは,設定が簡単な非カートリッジ処理系とし,HTMLファイルを書くことにした.このHTMLファイルのテンプレートは,STATIC.HTMLとして用意されているので,これを改造して使う.ここでは,LIST1のようにしてみた.
LIST1:非カートリッジ処理系のHTMLファイル
<HTML>
<!-- FILE: static.html -->
<!-- Oracle Static (Non-Cartridge) HTML File Template (Windows NT) -->
<!-- Rename, and modify tags and parameter values as needed -->
<HEAD><TITLE>Developer/2000 for the Web Test</TITLE></HEAD>
<BODY><BR>Please wait while the Forms Client class files download and run.
<BR>This will take a second or two...
<P>
<!-- applet definition (start) -->
<APPLET CODEBASE="/d2k-code/"
CODE="oracle.forms.uiClient.v1_4.engine.Main"
ARCHIVE="/d2k-jars/f45web.jar"
HEIGHT=20
WIDTH=20>
<PARAM NAME="serverPort"
VALUE="9000">
<PARAM NAME="serverArgs"
VALUE="module=deptemp.fmx userid=scott/tiger@alpa">
</APPLET>
<!-- applet definition (end) -->
</BODY>
</HTML>
このHTMLでは,APPLETタグより下に注目してほしい.通常,APPLETタグにはJavaアプレットを指定する.しかし,ここでは先に仮想ディレクトリとして指定したコードベースを指定した後,これらをハンドリングするoracle.forms.uiClient.v1_4.engine.Mainを指定している.さらにアーカイブのJARファイルを指定している.さらに,パラメータとしてFormsサーバーのポートや,アプリケーションとなるfmxファイルの名前と引数も指定している.
このようにしておくと,動的にJavaアプレットが作成されて,クライアントに送られるしくみなのである.
なお,動的なカートリッジを作成したときには,CODEBASEやServerのポートといった決まりきったものはカートリッジに隠蔽し,アプリケーション固有の最低限の差分だけをHTML化する.後は,そのHTMLを表わすURLの引数として,アプリケーションを区別する値を送ってやるのである.つまり,実体はHTMLのように見えるが,カートリッジを使えばCGIのように引数を持たせることができるのである.
Formsサーバーリスナーの起動
次に,Formsサーバーリスナーを起動する.これには特に注意すべきことはない.これはサービスではないので,スタートメニューから選んで起動すればよい.起動しても,ウィンドウとしては何も表示されないので,タスクマネージャなどを起動して動作を確認する必要がある.終了するインターフェイスも持っていないので,やはりタスクマネージャから終了させる必要がある.
アプレットの実行
ここまで設定できたら,いよいよ実行してみよう.実行するのはもちろんクライアントマシンである.このマシンにはOracle製品がまったく入っていなくてもかまわない.まさにThinクライアントである.Javaが実行できるブラウザがあればよいだけである.
注意しなくてはならないのは,Developer/2000 Serverから送り込まれるJavaアプレットは,JDK 1.1.1相当のものである.したがって,もっとも確実に動作させるためには,Developer/2000に附属しているJDK 1.1.1をインストールし,その中のApplet Viewerをコマンドプロンプトから起動することだ.このとき,引数として次のようにURLを指定する.appletviewer http://alpa.int21.co.jp/d2k-html/test.html
少々時間がかかるが,アプレットがダウンロードされ,実行が開始される(画面4).このときの画面はほぼC/S用として作成したDeveloper/2000の画面と同じである.違っているのは,クエリーをしたときにもURLが変わらないことだ.Webブラウザはアプリケーションを実行するためだけのもので,その後のサーバーとの通信は,まったく別セッションで行われるのだ.
画面4:Formsで作成したアプリケーションをWeb経由で実行する
![]()
このようにして,サーバーと通信が始まると,サーバー側ではクライアントに対応するF45WEB32.EXEが起動される.これは,ユーザーインターフェイス以外のデータベースとの接続やアプリケーションルールを行う部分なのである.
先に紹介したように,Forms以外のReportsでも,少々構成は異なるものの,このようなn階層システムに対応している.
Webベースでは,印刷は大きな問題だ.Webブラウザからサーバー側に印刷をさせてしまうのは不可能ではないが,離れたサーバーに接続されたプリンタに印刷されるのは無意味である.そこで,HTMLやAdobe Acrobat ReaderのPDF形式の印刷イメージをクライアントに送らせて,Webブラウザから,クライアントマシンに設定してあるプリンタに印刷させてしまおうというのだ.
Develoer/2000 for the Webは新しいWebソリューションとなるのか
駆け足でDeveloper/2000 Serverの機能を説明してきた.といっても,これはまったく簡単な部分だけを説明したに過ぎない.実際のDeveloper/2000にはPL/SQLを駆使した高度なプログラミング機能や,さらにDesigner/2000と組み合わせたときに初めて発揮されるエンタープライズソリューションに適したパワーもある.
今回は,Webアプリケーションシステムを構築する上でのひとつのソリューションという観点から見たので,ほんの一部の機能しか紹介できなかった.また,私自身も納得行くまで調査する時間がなかったのは残念である.ざっと使った印象からではあるが,次に新しいDeveloper/2000の長所と短所をまとめてみた.
■長所
- C/Sで作成した資産をWebアプリケーションとして展開できる:アプリケーション自体の作成は,従来の方法とまったく同じであるから,特に新しいアーキテクチャーを意識する必要がない.
- アーキテクチャーに依存しないThinクライアントを活かせる:Javaベースのもっともオープンな形でのWebアプリケーションを作成することができるから,Thinクライアントの特徴を活かすことができる.
- ユーザーインターフェイスの向上:基本的には,通常のC/Sベースでのインターフェイスとまったく同じものが,Webアプリケーションとして動作する.ただし,C/Sでは可能だったVBXやOLEモジュールとの連携など,一部の機能は使うことはできない.
- セッションの継続やトランザクションが可能:ダウンロードされたJavaアプレットは,そのまま通常のクライアントアプリケーションのように,セッションの継続やトランザクション処理を実現することができる.
- Oracle Serverと高い親和性:Oracle7,8 ServerやOracle Web Serverと高い親和性がある.
■短所
- トリガーに注意:構造的に,ユーザーインターフェイスで発生したトリガー(イベント)は,Formsサーバー側に通信で送られる.このため,Timerやマウス関係のトリガーを多用すると,トラフィックが増大する.現実的には,このようなことを前提とした設計にする必要がある.
- サーバーのメモリに注意:処理内容にもよるが,サーバー側でのプロセスは1つのクライアントアプレットに対して,10MBytes以上のメモリを必要とする.ユーザー数の多いシステムに対応するためには,サーバー側メモリを多く用意する必要がある.
- 起動速度が遅い:構造上,Javaアプレットは動的に作成されるので,アプレットが動作しはじめるまでに時間がかかる.処理にもよるが,数十秒から1分程度起動に時間がかかるのは問題だ.
- クライアント側Java実行環境に難あり:現状の商用Webブラウザでは,JDK 1.1.1に完全に対応しているものが少なく,あるいは対応しているハズだがちゃんと動かないものが多い.Oracleのサポートも,基本的にはApplet Viewerのみとなっている.
このように,Developer/2000 R1.5の提供するソリューションは,現実的運用を考えると,まだまだ完全ではない.しかし,環境さえ整ってくれば,十分に使えるものである.何よりも複雑な設定や設計をしなおさなくても,C/Sそのままの設計(もちろん先に述べたようなトリガーは意識しなくてはならない)で,このような高度なWebアプリケーションを構築できることは大きな魅力である.
後は,このメカニズムをWeb Serverとは分散させて複数のFormsサーバーを実行できるようにすることができれば,Oracleはさらに一歩先に進むことができるだろう.
Web Application Server R3.0 Advance Edition
―― CORBAベースでトランザクション可能なWeb Application ServerOracleは,もう2年ほど前からOracle Web Serverを発売している.もちろん,OracleらしくOracle7 Serverに接続してクエリーが可能という,RDBMS指向のインターフェイスが装備されたものだ.
このたびリリースされたWeb Serverは,その名もWeb Application Server(以下,WAS)3.0となり,HTTPでは実現できなかったセッションの継続やトランザクションが可能となった.しかも,CORBAベースとなっているという.
ここでは,このWASについてレポートしよう.
WAS 3.0に要求されたもの
インターネット,イントラネットともに,Webを使ったソリューションが注目されている.単なるHTMLではなく,RDBMSとの連携を図り,さまざまな業務に対応させていこうというものである.この方法は,OSアーキテクチャーに依存しないThinクライアントを実現できるため,メンテナンスの管理がラクになり,コストを低減することができる.
現実にこのようなシステムは数多く実働していることは,ご存じの通りである.しかし,従来のシステムはCGI(Common Gateway Interface)ベースのものがほとんどだった.CGIはリクエストされたURLがHTMLファイルではなく,プログラムである.プログラムがHTML文を動的に作成する.
しかし,CGIはリクエストに応じてプロセスを起動するため,サーバー側にかなりの負担がかかり,速度も高速ではない.
そのため,NetscapeではNSAPI,MicrosoftではISAPIといったCGI相当のAPIを提供することになった.これは,CGIの代わりにDLLを使うもので,あらかじめライブラリとしてモジュールがロードされているので,プロセスがあらためて起動されることはないため,高速に動作する.
だが,もっとも問題なのは,ステートレスなHTTPに依存している従来のWebシステムでは,セッションの継続が困難であり,トランザクション処理をすることができなかったことだ.これでは,すべての業務をWebベースに移行することはできない.
これを解決するためには,HTTPをあきらめて,別セッションで通信をさせるという方向性が考えられた.先に説明したDeveloper/2000でのやり方がこれである.しかし,この方法では,クライアント側に別セッションで通信処理をするJavaアプレットなどのプログラムがダウンロードされる必要がある.このため,クライアント側での動作はどうしてもダウンロードの分遅くなるし,Javaのバージョンにも依存する.そもそもが,現状のJavaはブラウザによって,あるいはプラットホームによって動作がかなり異なることからも,汎用なソリューションとは言い難い部分が残っている.
Oracleでは,従来のOWS(Oracle Web Server) R2.1以前でも,セッションの継続をするしくみとしてCookieをサポートしてきた.しかし,CookieとはNetscapeの独自規格で,ブラウザ側の仕様だ.サーバーでCookieをサポートというのもヘンな話であると感じられるかもしれない.通常のHTTPD(Webサーバー)では,HTML,SSI(Server Side Include, HTML中に埋め込まれたコマンドをサーバーが処理する),CGIをサポートしており,Cookieは主にCGIを使って制御するものだからだ.
実は,OWSではこういった通常のしくみのWebサーバーではなかった.WRB(Web Request Borker)と呼ばれる機能があり,共通のAPIを装備している.そのAPIレベルでCookieがサポートされているのである.カートリッジと呼ばれるインプロセスモジュールからこのAPIをコールすることができるのである.カートリッジにはPL/SQLやJavaなどがあり,それぞれの言語でサーバーサイドのプログラミングをすることができる.
WAS 3.0では,これらのWebサーバー部分と,アプリケーションサーバー部分を分散して配置することが可能になっている.この分散のしくみのベースとなっているのがCORBA 2.0準拠のORBなのである.
ただし,このCORBAベースの機能を持つのは,単体製品として出荷されるAdvance Editionのみとなる.
WRBの動作
次に,WRBのメカニズムを説明しておこう.図5は,WAS 3.0でのWRBの動きを説明したものだ.
1.クライアントからHTTPD(OracleでWebリスナーという表記をする)にリクエストがくる
2.HTML以外のリクエストのときには,Dispatcherに制御が渡される
3b.初めて起動されるカートリッジのときには,WRBに制御が渡され,インスタンスが起動される
3a.すでにそのカートリッジのインスタンスがあったときには,Dispatcherが追加のインスタンスを起動する図5:WAS 3.0では,クライアント側からリスナーの他に,Dispatcherが適切に
インスタンスを判断しながらWRBにインスタンシングを依頼する
![]()
ここで注目してほしいのは,このインスタンスの作り方である.NSAPIやISAPIなどでは,インプロセスで動作するため高速であると述べたが,一方ではインプロセスではそこから起動されるサーバー側アプリケーションが万が一不正な処理をしたとき,サーバーごと落ちてしまうという問題がある.ところが,WASではこのようにWebサーバーとWRBを分散し,さらにカートリッジごとにプロセスを起動する方法を取っているため,最悪でも1つのカートリッジが死ぬだけで済む.
WASの特徴
以上の知識を前提として,次に,WASの仕様の特徴を示す.
- CORBA準拠のORB:WRBはおよびカートリッジはCORBA準拠であり,WRBとHTTPDは別のマシンで実行することができる.
- HTTPD非依存:Netscapeの各種サーバーあるいはMicrosoft IISをHTTPDとすることが可能.
- トランザクションサービス:X/Openが定義したXAインターフェイスをモデルとした,トランザクションAPIセットを用意.
- 各種カートリッジの装備:PL/SQL,LiveHTML(SSI),Java,Perl,ODBC,VRMLのカートリッジを装備.
- ICX(Inter Cartridge Exchange):各カートリッジはCORBAベースの通信機能をもっている.これを利用して,他のカートリッジと通信するICXを装備している.
- パーシステントストレージサービス:データベース中のコンテンツを格納,管理,検索できるAPIセットを装備.
- 認証サービス:データベースに格納されているユーザー名とパスワードを使った認証情報をつかった認証管理が可能.
アドミニストレーター用環境とDADの設定
WASのインストールは,ここまでのことを理解していれば,さほど難しいことはない.ただし,WASの環境設定などは,アドミニストレーターモードでWebブラウザを通して行う必要がある.これは通常のボート80以外のポート(デフォルトでは8888)を使ってアクセスする.つまり,HTTPDは2つ起動する必要がある.アドミニストレーターモードでアクセスするためのポートやパスワードなどをインストール時に指定する必要がある.
インストールが終了したら,アドミニストレータとしてWebサーバーに接続し,データベースへの接続を指定し,DAD(Data Access Descriptor)の設定をする.つまり,Oracle7または8 Serverへの接続の指定をするのだ.ここで使用できるOracle Serverは,7.2.2以降に対応している.ただし,Workgroup Serverではトランザクションをサポートしない.また,Oracle8使用時は,SIDを指定しての直接接続はできず,必ずSQL*Netを経由しての接続となる.ここでは,Oracle 8 Server Enterprise Editionに接続してテストした.
指定を完了して実行すると,Oracle Serverに接続し,サンプルのデータベースなどがインストールされる.この間,20分以上の時間がかかるのだが,ブラウザのStopボタンを押しても当然のことながら作業は継続されてしまうので注意が必要だ.
DADの設定は,もちろん後から修正することもできる.仮想ディレクトリなどの詳細な設定も,同様にWebのアドミニストレータのページから実行することができる.
ただし,これらの設定は内部的には単なるテキストファイルに書き込まれるだけのようである.慣れてくれば,テキストファイルの中身を直接書き換えて,HTTPDを再起動した方が早いかもしれない.
DADの設定が終わったら,正常にインストールされているかを確かめてみるため,サンプルプログラムを動かしてみる.PL/SQLを使ったサンプルなどで,Oracle Server内のテーブルの中身を見ることができればOKだ.
カートリッジとは
サンプルプログラムページでは,実行だけでなく,そのソースコードを見ることもできる.このソースコードは,PL/SQLやJavaなどで記述されている.前にも述べた,カートリッジを使ってサーバーサイドのプログラミングすることができるというのは,このことである.
つまり,WRBには基本的なWRB APIセットがあり,そのAPIセットを呼び出す言語エンジンが複数用意されており,これをカートリッジと呼んでいるのである.APIセットをうまく使えば,Cベースでのアプリケーションが作れるほか,独自のカートリッジも作成することができる.
WAS3.0には,次の7つのカートリッジが付属している.
- PL/SQLカートリッジ:データベース内部に置かれて実行されるデータ駆動Webアプリケーションを開発する
- Javaカートリッジ:JavaSoft JDK 1.0.2から派生したもので,サーバーサイドJavaを使ったダイナミックWebアプリケーションを開発する
- LiveHTMLカートリッジ:解析されたHTMLページ(Server Side Includes)を処理する
- ODBCカートリッジ:ODBCを使ってSQL文からHTML出力を生成する
- Perlカートリッジ:Perl 5.0スクリプトを実行する
- VRMLカートリッジ:データベース駆動のVRMLアプリケーションを構築する
- JDBCカートリッジ:Javaを通してデータベースにアクセスする
誤解のないように断っておくと,ここでいうJavaカートリッジで作成するアプリケーションは,基本的にサーバーサイドのものである.つまり,Javaアプレットを作るわけではない.たとえば,「Hello World. Hello World.」と表示するためだけのコードをJavaで書くこともできるわけだ.実際にそのコードをLIST2に示す.
LIST2:Javaカートリッジのコード例
class HelloWorld {
public static void main(String args[]) {
System.out.println("Content-type: text/html\n\n");
System.out.println("Hello World.\n");
System.out.println("Hello World.\n");
}
}
CGIを書いたことがあればわかるが,これはまさにCGIを書くのと内容的には同じなのである.つまり,言語がJavaになっているに過ぎないのだ.
もちろん,こんな単純なことをするならばHTMLだけ書けば済む.しかし,PL/SQLやJavaを使って,RDBMSへのアクセスを記述することができるのは大きなメリットだ.従来のようにさまざまなサードパーティのライブラリや,複数の言語(少なくともHTMLとCGI用の2つ以上)を使って開発していたこの手の開発が,1つの言語だけで可能になるという点は評価すべき点であろう.
トランザクションの実現
WAS 3.0でもっとも注目すべきは,トランザクション処理が可能になったことだろう.ただし,WAS 3.0での方法は,今まで私たちがDCOMやIIOPといったもので描いていた「別セッションでの通信」で実現されているわけではなさそうだ.
つまり,WASではあくまでもステートレスなWebサーバーをベースとしながらも,アプリケーションサーバー内部で,複数のURLに対応したトランザクションの範囲を設定するという方式なのである.
実際には,トランザクションを使用するカートリッジのコンフィギュレーションで,TRANSACTIONSサービスを選択できる.トランザクションを行うには,この設定をしておく必要がある.また,同時にORBプロトコルも選択できる.
さらに,トランザクションの設定ページを開いて,トランザクションに関する情報をWASに設定する.
- アプリケーション:関連付けられるアプリケーション名
- トランザクション名:使用するトランザクションの名前.新しい名前を追加して,1つのカートリッジに複数のトランザクションを指定できる
- トランザクション開始のURI:トランザクションを開始するURI.たとえば,/dba/mycartridge/txn_shop.enter_urlなどのように指定する.dbaはPL/SQLAgent名,txn_shopはパッケージ名,enter_urlはプロシージャ名
- トランザクションコミットのURI:処理中のトランザクションをコミットするURI
- トランザクション・ロールバックのURI:処理中のトランザクションをロールバックするURI
- トランザクションのタイムアウト:トランザクションが終了されるまでの経過時間(秒単位)
- トランザクションの境界:そのトランザクションに属するURIのリスト.たとえば,/dba/mycartridge/txn_shop.*
このように,トランザクションに関連する一連のURLを指定することができる.
残念ながら,トランザクションを実現するサンプルは附属していなかった(少なくともカートリッジにそのような設定がされているものはなかった).また,今回はあまり時間がなかったこともあり,独自にサンプルを作ることができなかったため,この機能を詳細にテストすることはできなかった.
このようにURLごとにトランザクションの各処理に分ける考え方は,MicrosoftのTransaction Serverのオブジェクトごとに設定できるものと,ある意味でよく似ている.サーバーサイドでのトランザクション管理は,今後このような比較的容易に設定できる方向にいくのかもしれない.
WASはWebベースのRDBMSシステムを変えるか
駆け足でWASについて解説してきたが,もっともっとたくさんのトピックがある.たとえば,トランザクションなどの新しいWRB APIセットが追加されたことや,WRB APIの仕様変更などもある.
今回レポートに使ったWASは,当初はUS版,その後日本語版の製品版相当のもので,マニュアルがなかったこともあって,設定には意外に苦闘してしまった.また,Oracle8やDeveloper/2000 Serverなど新しいものと組み合わせたこともあり,バージョンの問題などさまざまな困難があり,思ったより時間がとれなかったのは残念だった.
WASは,PL/SQLやJava,さらには既存のCGIをうまく活かすことのできるPerlカートリッジなども装備しており,さらにICXにより別カートリッジとの通信も可能である.これは非常に柔軟性の高いシステムと言えるだろう.さらに,トランザクションをこのような形,ある意味でコロンブスの卵的な解決法で実現したのも興味深い.
少々残念だったのは,CORBAがHTTPDから先に使われており,クライアントとHTTP以外で通信するタイプの分散環境は構築できないことだ.これを高レベルにしかも簡単な設定でこれを実現しているのがDeveloper/2000 Serverであるが,それだけに制限事項もあるのは前に述べたとおりである.私は個人的には,より汎用的な分散オブジェクト環境を構築できるサーバーあるいはツールが必要だと感じる.HTTPDと組み合わせて使うこともできるからだ.今後Oracleがこのような製品を作ってくれることを期待したい.
VB Magazine ライブラリ | Visual Basicコースホームページ
int21 ホームページ | PCDN ホームページ
![]()
Copyright (c) 1997 int21 Corporation All Rights Reserved.
For questions or comments, please send mail to: pcdn@int21.co.jp