この例では、Oracle Joltを使用してWebLogicサーブレットからOracle Tuxedoに接続する方法を示します。また、WebLogic Serverを使用して、標準的なWebブラウザにHTMLフォームのフロント・エンドを表示します。
ユーザーがフォームに入力したテキストは、登録済のWebLogic HTTPサーブレットで処理されるHTTP POSTメソッドによってWebLogic Serverに返されます。このサーブレットは、Oracle Joltを使用してTuxedoサービスを呼び出します。サーブレットが受信したテキストはTuxedoサービスに送信され、サーブレットに返される前に大文字に変換されます。フォームは、サーブレットによって動的に生成されるHTMLページにコンパイルされ、Webブラウザに返されて、オリジナルのテキストが大文字で表示されます。
Jolt for WebLogic Serverのサンプル・プログラムsimpapp
は、次の2つの要素で構成されています。
Joltサーブレットのサンプル・プログラムsimpapp
のソース・コードは、Tuxedoの/samples/jolt/wls/servlet/
ディレクトリにあります。
simpapp
サンプル・ディレクトリには、次のファイルが置かれています。
simpapp
アプリケーション・サービスのTuxedoサーバー側のソース・コードの一覧は、UNIXシステムでは$TUXDIR/samples/atmi/simpapp
、Windows 2003システムでは%TUXDIR%¥samples¥atmi¥simpapp
(TUXDIR
はTuxedoのホーム・ディレクトリ)にあります。
このサンプル・プログラムを実行するには、以下の事項に精通している必要があります。
simpapp
サンプル・プログラムは簡単に設定できます。WebLogic Serverからsimpapp.html
ページを起動するだけです。simpapp.html
ページは、文字列入力用のテキスト・フィールドを含むHTMLフォームをロードします。文字列を入力して「POST」ボタンをクリックし、この文字列をPOSTリクエストとして送信します。SimpAppServlet
は、ユーザーが入力した文字列をJolt for WebLogicクラス・ライブラリで使用可能な形式に変換し、TuxedoのTOUPPER
サービスへのリクエストをディスパッチします。このサービスは、文字列を大文字に変換してブラウザに表示します。
サーブレット・サンプル・プログラムsimpapp
を設定するには、次の手順に従います。
simpapp
を設定して起動します。 TOUPPER
サービスが使用可能であることを確認します。 TOUPPER
サービスが定義されていることを確認します。 simpapp
サンプル・ディレクトリには、TOUPPER
サービス定義を含むsimpapp.rep
ファイルがあります。システム管理者は、Joltリポジトリのバルク・ローダーを使用して、このサービス定義をTuxedoサーバー上の既存のJoltリポジトリに追加する必要があります。Joltリポジトリのバルク・ローダー・パッケージは、TuxedoのJoltコンポーネントに同梱されています。インストール方法の詳細は、『Oracle Joltの使用』を参照してください。
次のサンプル・コードでは、Tuxedoサーバー上でJoltのバルク・ローダーを使用してTOUPPER
サービス定義を追加します。
$ java bea.jolt.admin.jbld //host:port simpapp.rep
host
とport
は、Joltサーバー・リスナー(JSL)のホスト名とポート番号です。simpapp.rep
は、Oracle Joltによって提供されるバルク・ローダー・ファイルで、次のいずれかの場所にあります。
CLASSPATH
が適切に設定されていることを確認します。WebLogic Serverのクラス・ライブラリには、このサンプル・プログラムを実行するために必要な次の3つの.jar
ファイルがあります。 Windows 2003システムを使用している場合、「スタート」メニューからWebLogic Serverを起動できます。それ以外の場合は、WebLogic Serverのルート・ディレクトリのコマンド行でstartWebLogic
スクリプトを使用します。
WebLogic Serverの起動方法の詳細は、『Oracle WebLogic Server管理者ガイド』のWebLogic Serverの起動と停止に関する項を参照してください。
Jolt接続プールと、WebLogic Server 6.0以降のスタートアップ・クラスの設定は、管理コンソールで行います。
simpapp.html
ページをコピーします。 デフォルトでは、WebLogic Serverの\config\mydomain\applications\simpapp
ディレクトリになります。WebLogicに組み込まれたHTTPサーバーは、このディレクトリでHTMLページとその他のMIMEの種類を検索します。
http://hostname:listenport#/console
simpapp
サーブレットをWebアプリケーションとして登録します。simpapp
サーブレットのインストール先としてデフォルトのディレクトリを使用するか、別のディレクトリを選択します。simpapp
サーブレットへのパスを入力するか、「参照」を使用して選択し、「アップロード」ボタンをクリックします。 simpapp
サーブレットがWebLogicにWebアプリケーションとして登録され、Deployments¥Web Applicationsフォルダの下にアイコンが表示されます。
Joltセッション・プールを起動するには、WebLogic Serverを停止して再起動する必要があります。WebLogic Serverの再起動方法については、『Oracle WebLogic Server管理者ガイド』のWebLogic Serverの起動と停止に関する項を参照してください。
WebLogic Serverを再起動したら、次の手順を実行してSimpAppServlet
ファイルをコンパイルします。
\config\mydomain\applications\simpapp
に、新しいWEB-INF
ディレクトリを作成します。\samples\jolt\wls\servlet\
から新しいWEB-INF
ディレクトリにweb.xml
ファイルをコピーします。SimpAppServlet.java
ファイルをコンパイルします。javac -d %WL.HOME%\config\mydomain\applications\simpapp\WEB-INF\classes SimpAppServlet.java
simpapp.html
ファイルのURLを入力します。たとえば、デフォルトのURLは次のとおりです。 http://localhost:port/simpapp/simpapp.html
localhost
はWebLogic Serverのホスト名、port
はWebLogic Serverがログイン・リクエストをリスニングするポートです。
図B-1に示すようなページが表示されます。
フォームが正しく表示されない場合は、simpapp.html
ファイルがWebLogicドキュメントのルート・ディレクトリにあることを確認してください。
HTMLページのテキスト・フィールドにデータを入力したら、「POST」ボタンをクリックして送信します。入力したデータとともに、その他のパラメータもWebLogic Serverで実行されているsimpapp
サーブレット・クラスに送信されます。
simpapp.html
ファイルのHTMLフォームに関する部分を以下に示します。
<form name="simpapp" action="simpapp" method="post">
<input type="hidden" name="SVCNAME" value="TOUPPER">
<table bgcolor=#dddddd border=1>
<tr>
<td>Type some text here and click the Post button:
<input type="text" name="string">
</td></tr>
<tr>
<td align=center><input type="submit" value="Post!">
</td></tr>
</table>
</form>
このHTMLフォームでは、ユーザー入力フィールドと非表示フィールドの2つの入力フィールドが指定されています。この例では、非表示フィールドの値により、起動するTuxedoサービスの名前が指定されます。Tuxedoサービスの名前をHTMLページに入れておくと便利ですが、セキュリティ上の理由から実運用環境では推奨できません。このHTMLページでは、非表示フィールドで別のサービス名を指定するHTTPリクエストを送信できます。
注: | Tuxedoサービス名の大文字と小文字は区別されます。 |
WebLogic ServerがHTTPフォーム・リクエストを受信すると、WebLogic Serverによってsimpapp
サーブレットのdoPost()
メソッドが起動し、フォームのデータがHttpServletRequest
に渡されます。
最初のリクエストをsimpapp
サーブレットに送信する前に、WebLogicがinit()
メソッドを呼び出してサーブレットを初期化します。次の形式でJoltセッション・プールが確立されます。
ServletSessionPoolManager b_mgr =
(ServletSessionPoolManager).SessionPoolManager.poolmanager;
次に、サーブレットのdoPost()
メソッドが実行されます。このメソッドには、WebLogic Serverの起動時に作成されたsimpapp
セッション・プールからの接続を取得するコードが含まれます。次に示すコードの抜粋は、simpapp
セッション・プールの取得方法を示しています。
// Get the "simpapp" session pool
ServletSessionPool session =
(ServletSessionPool) b_mgr.getSessionPool("simpapp");
呼び出されるTuxedoサービスは非表示フィールドで識別され、リクエスト・オブジェクトから取得されます。次のコードでサービス名パラメータを取得します。
String svcnm[] = req.getParameterValues("SVCNAME");
単一の値を含む文字列配列のSVCNAME
フィールドの値を取得します。ここでは、配列の最初の要素のみを使用します。フォームのSVCNAME
隠し表示に設定された値は、TOUPPER
です。これは、サーブレットが呼出すTuxedoサービス名で、次のようにcall()
メソッドに渡されます。
// Invoke a service and get the result.
result = session.call(svcnm[0], req);
サンプル・プログラムのsession
オブジェクトは、HttpServletRequest
オブジェクトを直接受け入れることが可能なServletSessionPool
です。このオブジェクトは、内部でデータを変換し、TOUPPER
サービスのパラメータを含むJolt DataSetオブジェクトにします。
注: | TOUPPER サービスでは、"STRING" というパラメータの大文字と小文字を区別する必要があります。そのため、HTMLフォーム内のテキスト・フィールドのラベルを"STRING" とまったく同一にする必要があります。SVCNAME, などのその他のデータ・フィールドは、パラメータとしては関連性がありませんが、Tuxedoサービスを中断しません。 |
フォーム・パラメータを使用してサービスに名前を付けると、サービス・パラメータとして渡す必要がありません。サービス名はHttpServletRequest
オブジェクトに含まれるので、自動的に渡されます。
TOUPPER
サービスは、"STRING"
パラメータのテキストを大文字に変換し、実行される呼出しの結果を含むServletResult
オブジェクトを使用してサーブレットに返します。また、サービス呼出し時に例外がスローされた場合は、例外の詳細情報も送信します。
最後の手順では、サービス呼出しの結果を含むHTMLページを作成して送信し、HttpResponse出力ストリームによってクライアントに返します。大文字で表示される結果は、result.getValue()
メソッドを使用してServletResult
オブジェクトから取得されます。
次の例は、ブラウザで表示可能なHTMLページでデータを戻す単純な方法を示しています。
out.println("<p><center><font size=+1><b>"+
result.getValue("STRING", "")+
"</b></font></center><p><hr
width=80%>");
出力ストリームによって、図B-2に示すようなページが生成されます。