bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Jolt > Jolt ASP Connectivity for BEA Tuxedo を使う |
Jolt
|
Jolt ASP Connectivity for BEA Tuxedo を使う
Jolt ASP (Active Server Pages) Connectivity for BEA Tuxedo は、動的な HTML ページを処理したり、作成したりするための使いやすいインターフェイスを提供します。BEA Tuxedo サービスにアクセスするために Common Gateway Interface (CGI) トランザクション・プログラムの書き方を学ぶ必要はありません。
ここでは、次の内容について説明します。
主な特徴
Jolt ASP Connectivity for BEA Tuxedo は、Jolt クラス・ライブラリを拡張したものです。また、スクリプト言語を使って BEA Tuxedo のサービスやトランザクションを Web サーバから呼び出すことができます。
このアーキテクチャには、以下のような利点があります。
注記 ASP Connectivity for BEA Tuxedo では、非同期通知は利用できません。非同期通知をサポートしたい場合は、RETAINED モードの接続を使用する Jolt 対応 Java クライアント (アプレット) を開発することをお勧めします。
Jolt ASP Connectivity for BEA Tuxedo の仕組み
Jolt ASP Connectivity for BEA Tuxedo のアーキテクチャには、セッション、セッション・プール、セッション・プール・マネージャという 3 つの主要なコンポーネントがあります。セッション・オブジェクトは、BEA Tuxedo システムとの接続を表します。セッション・プールは、Web サーバと BEA Tuxedo システム間の物理的な接続を表します。また、セッション・プールは、セッションと HTTP リクエストを関連付けます。
セッション・プール・マネージャは、セッション・オブジェクトを管理します。各セッション・オブジェクトは、一意なセッション識別子を持ちます。
Jolt ASP Connectivity for Tuxedo は以下のように動作します。
次の図に、ASP Connectivity for BEA Tuxedo のアーキテクチャを示します。
図 8-1 Jolt ASP Connectivity for BEA Tuxedo のアーキテクチャ
SessionPool およびSessionPoolManager クラスの詳細については、オンライン・マニュアルの『BEA Jolt API リファレンス』を参照してください。
ASP Connectivity for BEA Tuxedo ツールキット
ASP Connectivity for BEA Tuxedo ツールキットは、Jolt の Java クラス・ライブラリを拡張したものです。このツールキットにより、Microsoft Active Server などの Web サーバで Jolt クライアント・クラス・ライブラリが使用できるようになります。また、HTML のクライアントまたはブラウザと BEA Tuxedo アプリケーションをつなぐインターフェイスが提供されます。
このソフトウェアに付属するサンプルは、INQUIRY、WITHDRAWAL、DEPOSIT、TRANSFER の 4 つのサービスをサポートします。この節では、BEA Tuxedo BankApp アプリケーションの TRANSFER サービスを利用する場合の HTML クライアント・インターフェイスの使用手順を説明します。TRANSFER サービスは、複数のオカレンスを持つパラメータの使い方を示します。この章では、TRANSFER サービスの使い方のみを説明します。
Jolt ASP Connectivity for BEA Tuxedo の使い方
この章で説明するすべてのサンプルは、Jolt ソフトウェアに含まれています。この節では、これらのサンプルのコードの一部を使用してツールキットの使い方を説明します。
このソフトウェアに付属するサンプルは、INQUIRY、WITHDRAWAL、DEPOSIT、TRANSFER の 4 つのサービスをサポートします。この章では、BEA Tuxedo BankApp アプリケーションの TRANSFER サービスを利用する場合の HTML クライアント・インターフェイスの使用手順を説明します。TRANSFER サービスは、複数のオカレンスを持つパラメータの使い方を示します。この章では、TRANSFER サービスの使い方のみを説明します。
注記 この章では、Microsoft IIS および VBScript と共に ASP Connectivity for BEA Tuxedo を使用する方法について説明します。
以降の節で示す情報を活用するためには、以下の知識が必要です。
ASP for BEA Tuxedo の使い方についての概要
ASP Connectivity for BEA Tuxedo の使い方を学ぶには、以下の手順に従ってください。
準備チェックリスト
「TRANSFER リクエストの呼び出し方」を始める前に、このチェックリストの内容を確認します。
注記 この準備チェックリストは、Microsoft Active Server Pages 用です。また、BEA Tuxedo と Jolt Server がホスト・マシンにインストールされていること、および Microsoft IIS がインストールされているマシンに BEA Jolt クライアントがインストールされていることが前提となっています。
Jolt サーバを実行する Tuxedo ホスト
Jolt クライアントと Microsoft IIS を実行するマシン
Windows NT 4.0 プラットフォームでは、Microsoft NT Option Pack 4.0 の標準のインストールを選択した場合、この SDK はインストールされません。インストーラで [SHOW SUBCOMPONENTS] オプションを選択して、IIS の追加のオプションを表示します。SDK を参照してインストールします。
Windows NT または 2000 では、Microsoft SDK for Java の Microsoft Java Component Framework クラスを入手することもできます。Microsoft Java Component Framework ファイルをダウンロードするには、次の手順に従います。
...¥Program Files¥Microsoft SDK for Java 4.0¥Samples¥ASP¥aspcomp> copy *.class C:¥WINNT¥java¥TrustLib¥aspcomp
TRANSFER サービスの概要
BankApp の TRANSFER サービスは、2 つの口座の間で資金を移動します。このサービスは 2 つの口座番号と入力金額をとり、2 つの残高 (各口座に 1 つ) を返します。さらに、アプリケーションまたはシステムのエラーが発生した場合は、エラー・メッセージを返します。
TRANSFER は、WITHDRAWAL と DEPOSIT を単一のトランザクションとして実行します。このトランザクションはサーバ上で生成されるため、クライアントはトランザクションを生成する必要はありません。
クライアント・インターフェイスは、必要なデータ (口座番号とドル金額) を入力するフォームが表示された HTML ページです。このデータは、POST リクエストとして Web サーバに送信されます。
Web サーバでは、このリクエストは VBScript Active Server Page を使用して処理されます。このプログラムは、リクエストから入力データ・フィールドを抽出し、Jolt ASP Connectivity for BEA Tuxedo クラス・ライブラリで使用できるようにフォーマットし、BankApp アプリケーションの TRANSFER サービスにリクエストを送信します。TRANSFER サービスは、トランザクションの結果を返します。結果はプログラムに返され、動的に作成された HTML ページにマージされます。このページは、Web サーバのインフラストラクチャを介してクライアントに返されます。
この章を読み終えたら、必要な HTML ページとサーバ・サイド VBScript ロジックを実行して TRANSFER を実行してみてください。
TRANSFER リクエストの呼び出し方
この節では、TRANSFER リクエストの実行時の状況について説明します。ただし、必要な手順のみを説明しており、すべての手順は説明していません。
Jolt セッション・プール・マネージャを初期化する
まず、クライアントのブラウザを使用して、Jolt ASP Connectivity for BEA Tuxedo のクラスがインストールされている Web サーバに接続します。ダウンロードする最初のページは、tellerForm.asp (次の図の tellerForm.asp ページの例を参照) です。準備チェックリストで、この teller サンプルがすでにインストールされている場合、このページの URL は次のようになっています。
http://<web-server:port>/teller/tellerForm.asp
注記 Web サーバの構成によっては、ポート番号の使用は必要ありません。ほとんどの場合、URL に「:port」を追加する必要はありません。
図 8-2 tellerForm.asp ページの例
tellerForm.asp ページには、Jolt セッション・プール・マネージャを初期化する際に必要な VBScript プロシージャが含まれています。初期化コードは、ASP Script ブロックに入っています。このコードは、このコード・ブロックを、クライアントに送信するのではなくサーバ上で実行するよう Web サーバに命令します。 コード リスト8-1 tellerForm.asp :Jolt セッション・プール・マネージャを初期化する VBScript プロシージャの web_initSessionMgr() は、Jolt セッション・プールを確立する別の VBScript プロシージャを呼び出します。この Jolt セッションは、Web サーバ内の Jolt ASP Connectivity for BEA Tuxedo と BEA Tuxedo アプリケーション内に常駐する Jolt サーバの間に確立されます。呼び出されるプロシージャの 1 つは、web_start() です。web_start.inc ファイルにあるこのプロシージャは、準備チェックリストの teller アプリケーションのインストールの際に編集されている必要があります。 web_cacheTemplates() プロシージャは、さまざまな HTML テンプレートをメモリ・キャッシュに読み込みます。この手順は必須ではありませんが、この操作によってパフォーマンスが向上します。 コード リスト8-2 tellerForm.asp :ユーザが TRANSFER サービスを選択できるようにする 上記の HTML セグメントは、「Transfer」という名前のボタンを表示します。このボタンが選択されると、ブラウザは transferForm.htm ページをロードします。このページは、TRANSFER サービスで必要なデータを入力するためのフォームを表示します。 クライアントから TRANSFER リクエストを送信する 次の図のフォームは、transferForm.htm によって生成されます。このページは、入力用のフォームを表示します。このページは、3 つのテキスト・フィールド (2 つの口座番号の入力フィールドとドル金額の入力フィールド) と、TRANSFER サービスを呼び出すときに使用するボタンで構成されています。 図 8-3 transferForm.htm の例
<%
'// テンプレートを初期化しテンプレートをキャッシュします。
Call web_initSessionMgr(Null)
Call web_cacheTemplates()
%><INPUT TYPE="button" VALUE="Transfer"
onClick="window.location='transferForm.htm'">
次のコード・セグメントは、このページの主要な HTML エレメントを示しています。次のコード例で強調表示されているエレメントは、主要な HTML エレメントとその説明のエレメントに対応しています。 コード リスト8-3 transferForm.htm:TRANSFER フォーム
<FORM NAME="teller" ACTION="tlr.asp" METHOD="POST">
<TABLE>
<TR><TD ALIGN=RIGHT>From Account Number: </TD>
<TD><INPUT TYPE="text" NAME="ACCOUNT_ID_0"></TD></TR>
<TR><TD ALIGN=RIGHT>To Account Number: </TD>
<TD><INPUT TYPE="text" NAME="ACCOUNT_ID_1"></TD></TR>
<TR><TD ALIGN=RIGHT>Amount: $</TD>
<TD><INPUT TYPE="text" NAME="SAMOUNT"></TD></TR>
</TABLE>
<CENTER>
<INPUT TYPE="hidden" NAME="SVCNAME" VALUE="TRANSFER">
<INPUT TYPE="submit" VALUE="Transfer">
<INPUT TYPE="reset" VALUE="Clear">
</CENTER>
</FORM>
この例で使用されている HTML フォームのフィールド名は、TRANSFER サービスで使用される BEA Tuxedo のフィールド名と完全に一致しています。これは必須ではありませんが、このように BEA Tuxedo と同じフィールド名を使用すると、入力項目を BEA Tuxedo フィールド名にマッピングする必要がなくなるため、サーバ上の処理が簡単になります。これは、Jolt ASP Connectivity for BEA Tuxedo クラスによって実行されます。 非表示の SVCNAME フィールドには、「TRANSFER」という値が指定されます。このフィールドはクライアント・フォームには表示されませんが、リクエストの一部として Web サーバに送信されます。VBScript プログラムは、どの BEA Tuxedo サービスを呼び出すか (この場合は TRANSFER サービス) を決定するために、このフィールドの値を取得します。 [From Account Number]、[To Account Number]、および [Amount] フィールドに入力します。BankApp では、10000 および 10001 が口座番号として有効です。[Transfer] ボタンを押します。フォームで入力されたデータは、Web サーバに送信され、このフォームの ACTION フィールドで指定されている tlr.asp で処理されます。 リクエストを処理する Web サーバは、TRANSFER リクエストを受信すると tlr.asp プログラムを実行します。クライアント・リクエストは Web サーバで Request オブジェクトに変換されます。Request オブジェクトは、このフォームに入力されたすべてのデータと非表示フィールドなどのほかのフォーム・データを含むメンバを持っています。Web サーバは、この Request オブジェクトを実行プログラムで使用できるようにします。 tlr.asp プログラムは、VBScript のみを含みます。このプログラムは、最初に Jolt セッション・プール・マネージャが初期化されているかどうかを確認します。 次のリスト内のコード例は、この初期化チェックの実行と、セッション・プールが初期化されていない場合に HTML のエラー・ページを返すことを示しています。 コード リスト8-4 tlr.asp:Jolt セッション・プール・マネージャが初期化されているかどうかを確認する セッション・プールが初期化されている場合、このプログラムはリクエストの処理を続行します。プログラムは、次のリストで示すように、セッション・プール・マネージャからセッションを探し出します。 コード リスト8-5 tlr.asp:セッションを探し出す 有効なセッションを探し出すと、プログラムは、結果をクライアントに返すために使用する HTML テンプレートを取得します。この例では、テンプレートは初期化セクションでキャッシュされています。取り出されるテンプレートは、呼び出されているサービスの名前である Request("SVCNAME") によって識別されます (次のリストを参照)。 コード リスト8-6 tlr.asp:キャッシュされている HTML テンプレートを取り出す 次のリストに示すような BEA Tuxedo サービスを呼び出します。この例では、request オブジェクトからの入力データが、セッションの call() メソッドに渡されます。call() メソッドは、ASP 組み込みの Request オブジェクトを入力として使用します。call() メソッドの結果は、output オブジェクトと iodata 配列に格納されます。 コード リスト8-7 tlr.asp:BEA Tuxedo サービスの呼び出し BEA Tuxedo サービスを呼び出した後、output オブジェクトと iodata 配列の第 2 要素に、このサービス呼び出しの結果が入っています。 注記 フォームで最初に指定されるフィールド名と BEA Tuxedo サービスのパラメータ名が一致しているため、Request オブジェクトをそのまま call() メソッドで使用することができます。これらの名前が一致しない場合は、call() メソッドを呼び出す前に、各サービス・パラメータに対して「名前 = 値」の形式で入力配列を作成します。 クライアントへ結果を返す この段階では、クライアントに結果は返されていません。最後の手順では、このサービス呼び出しの結果を含む HTML ページをクライアントに返します。この HTML ページは、テンプレートにサービス呼び出しが返すデータをマージしたものです (リスト8-7を参照)。 テンプレート・ファイルには、呼び出しに固有なさまざまなデータのプレースホルダが入っています。これらのプレースホルダは、<%=NAME%> という特殊なタグによって識別されます。次のリスト内に示すコード例は、インデックスを使用しているパラメータ名のどのオカレンスが使用されているかを示します。たとえば、 ACCOUNT_ID[0] は、ACCOUNT_ID フィールドの最初のオカレンスを指定します。 コード リスト8-8 transfer.temp:TRANSFER の結果のプレースホルダ テンプレートの中のプレースホルダを、サービス呼び出しが返したデータの実際の値に置換する場合は、次のリストに示す Template オブジェクトの eval() メソッドを使用します。このメソッドは、テンプレート・ファイルのプレースホルダと結果データの同名のフィールドを比較し、一致するデータでプレースホルダを置換します。結果 (output オブジェクト) の有効性チェックは、次のリスト内に示す方法で実行されます。output オブジェクトがない場合は、エラー・テンプレート・ページが返されます。 コード リスト8-9 tlr.asp:テンプレートの処理 注記 iodata 配列には、入力リクエストとサービス呼び出しの結果が含まれています。iodata 配列は、結果ページに入力データを含ませたい場合に便利です。 テンプレートが処理されると、次の図のような HTML の結果ページがクライアントに返されます。 図 8-4 tlr.asp 結果ページ
<%
If Not IsObject(Application("mgr")) Then
%>
<HTML>
<HEAD><TITLE>Error</TITLE></HEAD>
<BODY><CENTER>
<H2>Session Manager is not initialized</H2>
<P>Make sure that you access the correct HTML
</CENTER></BODY>
</HTML>
<%
End If
%>Set pool = Application("mgr").getSessionPool(Null)
'// レスポンス・テンプレートを選択します
If IsEmpty(Application("templates")) Then
Set template = Server.CreateObject("BEAWEB.Template")
Else
Select Case Request("SVCNAME")
Case "INQUIRY"
Set template = Application("templates")(INQUIRY)
Case "DEPOSIT"
Set template = Application("templates")(DEPOSIT)
Case "WITHDRAWAL"
Set template = Application("templates")(WITHDRAWAL)
Case "TRANSFER"
Set template = Application("templates")(TRANSFER)
End Select
End IfSet output = pool.call(Request("SVCNAME"), Null, Nothing)
Set iodata(1) = output<TABLE BORDER=1>
<TR><TD></TD><TD ALIGN=CENTER><B>Account #</B></TD>
<TD ALIGN=CENTER><B>Balance</B></TR>
<TR><TD ALIGN=RIGHT><B>From:</B></TD><TD><%=ACCOUNT_ID[0]%></TD>
<TD><%=SBALANCE[0]%></TR>
<TR><TD ALIGN=RIGHT><B>To:</B></TD><TD><%=ACCOUNT_ID[1]%></TD>
<TD><%=SBALANCE[1]%></TR>
</TABLE>path = Application("templatedir")
If (Not IsObject(output)) Or (output is Nothing) Then
Call template.evalFile(path & "¥nosession.temp", Null)
Elseif output.noError() Then
Call template.eval(iodata)
Elseif output.applicationError() Then
Call template.evalFile(path & "¥error.temp", iodata)
Else
'// System error
Dim errdata(0)
Set errdata(0) = Server.CreateObject("BEAWEB.TemplateData")
Call errdata(0).setValue("ERRNO", output.getError())
Call errdata(0).setValue("ERRMSG", output.getStringError())
Call template.evalFile(path & "¥syserror.temp", errdata)
End If
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |