|
この章では、Oracle Jolt のコンフィグレーション方法を説明します。Jolt を既に使用したことがある場合は「簡易コンフィグレーション」をご覧ください。それ以外の節では、さらに詳しい内容を説明しています。この章は、Oracle Jolt のコンフィグレーション先のオペレーティング システムやワークステーション プラットフォームでの作業を経験したことのあるシステム管理者またはアプリケーション開発者を対象としています。
Oracle Jolt および Oracle Tuxedo を既に使用したことがある場合は、この「簡易コンフィグレーション」で説明する、Oracle Jolt のコンフィグレーション方法に関するガイドラインを参照してください。Jolt を初めて使用する場合は、「Jolt に関する背景情報」を読んでからコンフィグレーションを始めてください。
「簡易コンフィグレーション」では、Oracle Tuxedo で Jolt サーバ リスナ (JSL) をコンフィグレーションするために必要な次の手順について説明します。
| 注意 : | MAXWSCLIENTS が設定されていないと、JSL は起動しません。 |
GROUPS セクションで、GROUPNAME に必須パラメータとオプション パラメータを設定します。SERVERS セクションを設定します (必須)。JSL必須パラメータ[オプション パラメータ]
JSL は、tmboot(1) で実行されるファイル (string_value) を指定します。
JSL の必須パラメータを設定します。JSL にその他のパラメータを設定します。
JSL には次のパラメータを使用できますが、これらのパラメータを設定するとアプリケーションにどのような影響が及ぶかを考慮してください。詳細については、「JSL で使用できるパラメータ」を参照してください。
以下のセクションを使用して、Jolt リポジトリをコンフィグレーションします。
Oracle Jolt リポジトリ サーバ (JREPSVR) には、リポジトリにアクセスしたり、リポジトリを編集するためのサービスが格納されています。JREPSVR インスタンスが複数ある場合は、共有ファイルにより、リポジトリの情報が共有されます。UBBCONFIG ファイルの SERVERS セクションには、JREPSVR を指定してください。
SRVID パラメータを使用して、新しいサーバの識別子を指定します。JREPSVR に -W フラグを指定し、リポジトリを編集可能にしておきます (この設定は 1 つの JREPSVR だけに対して行います)。このフラグを設定しないと、リポジトリは読み取り専用になります。-P フラグを指定して、リポジトリ ファイルへのパスを設定します。-P フラグに対する引数が指定されていないと、Oracle Tuxedo の ULOG ファイルにエラー メッセージが表示されます。/app/jrepository)。tmloadcf コマンドと tmboot コマンドを使用して、Oracle Tuxedo システムを起動します。
Oracle Tuxedo および Oracle Jolt を使用する Oracle Tuxedo サービスを定義し、クライアントが Jolt サービスを利用できるようにします。
リポジトリ エディタを起動する前に、必要な Oracle Jolt ソフトウェアがすべてインストールされているかどうかを確認してください。
| 注意 : | JREPSVR と JSL が実行されていないと、リポジトリ エディタは使用できません。 |
CLASSPATH に、Jolt クラスのディレクトリか、または *.jar ファイルが置かれたディレクトリを指定します。appletviewer full-pathname/RE.html
Web サーバからアプレットをロードする場合は、URL に次のように入力してください。
http://www.server/URL path/RE.html
「Oracle Jolt リポジトリ エディタの [Logon] ウィンドウ」の図に示すようなウィンドウが表示されます。
次のいずれかの方法を使用して、Web ブラウザからリポジトリ エディタを起動してください。
CLASSPATH に Jolt クラスのディレクトリを指定します。file:full-pathname/RE.html
「Oracle Jolt リポジトリ エディタの [Logon] ウィンドウ」の図に示すようなウィンドウが表示されます。
CLASSPATH に Jolt クラスのディレクトリが含まれていないことを確認します。CLASSPATH から Jolt クラスを削除します。http://www.server/URL path/RE.html
| 注意 : | jolt.jar および admin.jar が RE.html と同じディレクトリに置かれている場合は、Web サーバ側がクラスを作成します。RE.html とは異なるディレクトリに置かれている場合は、アプレットのコードを変更します。 |
「Oracle Jolt リポジトリ エディタの [Logon] ウィンドウ」の図に示すようなリポジトリ エディタのログオン ウィンドウが表示されます。
Jolt リポジトリ エディタを起動したら、以下の手順に従ってログオンします。
| 注意 : | ログオンする前に、Oracle Jolt リポジトリ エディタの [Logon] ウィンドウが表示されている必要があります。この画面が表示されたことを確認してから以下の手順に進んでください。 |
| 注意 : | Jolt リレー経由でログオンしない限り、ここで指定したポート番号と同じ番号が Jolt リスナのコンフィグレーション時に使用されます。詳細については、UBBCONFIG ファイルを参照してください。 |
[Packages] ボタンと [Services] ボタンが有効になります。
| 注意 : | Oracle Jolt のリポジトリ エディタでは、ユーザ ロールにハードコーディングされた joltadmin が使用されます。 |
次表の「リポジトリ エディタの [Logon] ウィンドウの説明」では、このウィンドウにあるフィールドとボタンについて説明します。
|
|||
パッケージ、サービス、およびパラメータの追加、編集、テスト、削除が完了したらリポジトリ エディタを終了します。終了する前に、下図の「Oracle Jolt リポジトリ エディタを終了する前の [Logon] ウィンドウ」に示すようなウィンドウが表示されます。
使用できるのは、[Packages]、[Services]、および [Log Off] のみです。文字入力フィールドは利用できません。
Jolt のイベント サブスクリプション機能では、Oracle Tuxedo サービスまたは別の Oracle Tuxedo クライアントからイベント通知を受信します。Oracle Tuxedo の TMUSREVT サーバをコンフィグレーションし、アプリケーションの UBBCONFIG ファイルを編集してください。次の「UBBCONFIG ファイル内の TMUSREVT パラメータ」は、UBBCONFIG ファイル内の TMUSREVT パラメータを示しています。
TMUSREVT SRVGRP=EVBGRP1 SRVID=40 GRACE=3600
ENVFILE="/usr/tuxedo/bankapp/TMUSREVT.ENV"
CLOPT="-e tmusrevt.out -o tmusrevt.out -A --
-f /usr/tuxedo/bankapp/tmusrevt.dat"
SEQUENCE=11
UBBCONFIG ファイルの SERVERS セクションで、SRVGRP および SRVID を指定してください。
システム プロンプトで次のコマンドを入力し、UNIX での JRLY プロセスを開始します。
jrly -f <config_file_path>
コンフィグレーション ファイルが存在しないか開けない場合、JRLY は標準エラーにメッセージを書き込み、起動時のエラーをエラー ログに記録してから終了します。
コンフィグレーション ファイルは、「タグ=値」の形式で記述されています。空白行または「#」で始まる行は無視されます。次の「正式なコンフィグレーション ファイルの形式の例」を参照してください。
LOGDIR=<LOG_DIRECTORY_PATH>
ACCESS_LOG=<ACCESS_FILE_NAME in LOGDIR>
ERROR_LOG=<ERROR_FILE_NAME in LOGDIR>
LISTEN=<IP:Port combination where JRLY will accept comma-separated connections>
CONNECT=<IP:Port1, IP:Port2...IP:PortN:Port(List of IP:Port combinations associated with JRADs: can be 1...N)>
SOCKETTIMEOUT は、JRLY の Windows 2003 サービスが、ネットワーク アクティビティ (新しい接続、読み込み対象のデータ、クローズされた接続など) を実現するためにソケット接続をブロックする期間を示す時間 (秒単位) を指定します。SOCKETTIMEOUT の値はサービス コントロール マネージャ (SCM: Service Control Manager) にも影響します。サービス コントロール マネージャは、Windows 2003 サービスの停止を要求する場合には少なくとも SOCKETTIMEOUT で指定した秒数を待つ必要があります。
| 注意 : | ディレクトリ名とファイル名の形式は、オペレーティング システムによって異なります。UNIX システムではフォワードスラッシュ (/) を使用します。Windows 2003 システムではバックスラッシュ (\) を使用します。LOGDIR、ACCESS_LOG、または ERROR_LOG で指定されたファイルを開けない場合、JRLY は stderr にエラー メッセージを記録してから終了します。 |
| 注意 : | 次の表は、ホスト名とポート番号の形式を示しています。 |
1 つの JRLY に接続できる JRAD プロセスは 1 つだけです。JRAD は、1 つの JSL および関連する JSH とだけ通信するようにコンフィグレーションできます。複数の JRAD を 1 つの JSL と通信するようにコンフィグレーションすることもできます。UBBCONFIG ファイルには、Oracle Tuxedo サービス用の CLOPT パラメータを含める必要があります。
この節では、Jolt コンポーネントに関するその他の情報を説明します。
Jolt サーバは、1 つまたは複数のハンドラを扱うリスナです。
Jolt サーバ リスナ (JSL) - JSL は、IP/ポートの組み合わせでコンフィグレーションし、クライアントをサポートします。JSL は、Jolt サーバ ハンドラ (JSH: Jolt Server Handler) と動作して、クライアントが Oracle Jolt システムのバックエンドへ接続できるようにします。JSL は Oracle Tuxedo サーバとして実行されます。
Jolt サーバ ハンドラ (JSH) - Tuxedo サーバ マシンで実行されるプログラム。リモート クライアント用のネットワーク接続ポイントを提供します。JSH は、JSL と動作し、クライアントが Oracle Jolt システムのバックエンドに接続できるようにします。JSL に対し、最大 32,767 までの JSH を利用できます。詳細については、「JSL のコマンドライン オプション」の -M コマンドライン オプションの説明を参照してください。
システム管理者の作業 - システム管理者は、Oracle Jolt のサーバ コンポーネントに関して、以下の作業を行う必要があります。
UBBCONFIG ファイルにあるすべての管理プロセスとサーバ プロセスを開始するには、次の手順に従います。
tmloadcf と tmboot については、『Oracle Tuxedo アプリケーション実行時の管理』および『Tuxedo コマンド リファレンス』を参照してください。
Jolt サーバに対して停止を要求するには、Oracle Tuxedo の次のコマンドを入力します。
tmshutdown -y
Oracle Tuxedo は JSL をモニタし、障害が発生した場合は JSL を再起動します。Oracle Tuxedo がリスナ プロセスを再起動すると、次のイベントが発生します。
JSL は、Jolt から JSH へ接続要求を分散する Oracle Tuxedo サーバです。Oracle Tuxedo は、JSL と JREPSVR が置かれているホスト マシンで実行されていなければなりません。
| 注意 : | JSH に対する JSL のポートの選択方法は、Oracle Tuxedo ワークステーション リスナ (WSL: Workstation Server Listener) の場合のプロセスとは異なります。JSL ポートを正しくコンフィグレーションする方法については、「UBBCONFIG ファイルを作成する」の「SERVERS セクション」を参照してください。 |
サーバ側では、コマンドラインからの情報の取得が必要な場合があります。CLOPT パラメータを使用すると、コマンドライン オプションを指定して、サーバに設定されたデフォルト値を変更することができます。次の表では、JSL のコマンドライン オプションを説明します。
|
|||
0x0002MMMMdddddddd で、JSH のネットワーク アドレスが 0x00021111ffffffff の場合、結果 (外部) のネットワーク アドレスは 0x00021111dddddddd になる。先頭に「//」が付いたネットワーク アドレスは、IP ベースであることを示し、JSH ネットワーク アドレスから TCP/IP ポート番号がコピーされて、新しいネットワーク アドレスを構成する。
|
|||
|
|||
|
|||
-s オプションは ISL(5) および WSL(5) の -S オプションと同じ。詳細については、「セクション 5 - ファイル形式、データ記述方法、MIB、およびシステム プロセスのリファレンス」を参照。
|
|||
Jolt のセキュリティと暗号化に LLE を使用する場合、認証データと鍵交換データは Diffie-Hellman 鍵交換を使用して Jolt クライアントと JSL/JSH の間を転送されます。以降のすべての交換は、RC4 形式で暗号化されます。国際版のパッケージでは、DES 鍵交換と 128 ビット キーを使用します。128 ビットのうち、40 ビットが暗号化され、88 ビットがエクスポーズされます。
Jolt のセキュリティと暗号化に SSL を使用する場合、認証、鍵交換、およびデータ交換には SSL プロトコルが使用されます。
Jolt リレー (JRLY) と Jolt リレー アダプタ (JRAD) 間の動作を、通常インターネット リレーと呼びます。Jolt リレーは、Jolt クライアントから JSL や JSH にメッセージをルーティングします。これにより、JSH と Oracle Tuxedo を、(安全性に問題があると見なされている) Web サーバと同じマシンで実行する必要がなくなります。Jolt リレーは、「Jolt インターネット リレーのパス」で示すように 2 つのコンポーネントで構成されています。
| 注意 : | Jolt リレーは、Jolt クライアントおよび Jolt サーバからは見えません。Jolt サーバは、複数のイントラネット クライアントに同時に直接接続したり、Jolt リレーを介してインターネット クライアントに接続できます。 |
| 注意 : | Tuxedo 10 では Jolt クライアントと JSL/JSH で SSL をサポートしていますが、JRAD と JRLY については SSL のサポートが実装されていません。そのため、SSL を使用する Tuxedo 10 Jolt コンフィグレーションでは JRAD および JRLY プロセスを利用できません。 |

この図では、ブラウザから Web サーバ ソフトウェアに接続し、Oracle Jolt アプレットをダウンロードする様子を示しています。まず、Jolt のアプレットまたはクライアントは、Web サーバ マシン上の JRLY に接続します。次に、JRLY は、ファイアウォールを越えて Jolt メッセージを JRAD に転送します。さらに、JRAD はメッセージを JSL または適切な JSH に転送します。
1 つのサーバ アドレスがセッションで失敗すると、フェイルオーバ機能がはたらきます。この機能により、Jolt クライアントの API は、次に接続可能な (まだ接続されていない) JRLY を API の引数一覧から検索して接続します。Windows 2003 環境でこのフェイルオーバ機能を有効にするには、複数の Windows 2003 JRLY サービスを実行します。Windows 2003 以外の環境では、JRLY プロセスが複数実行されています。各 JRLY (サービスまたはプロセス) には、固有のコンフィグレーション ファイルが用意されています。この種のフェイルオーバ処理は、Oracle Jolt のクライアント API 機能により行われ、ユーザは Jolt サーバ アドレス (JSL または JRLY) の一覧を指定することができます。
各 JRLY のコンフィグレーション ファイルには、JRAD アドレスの一覧が用意されています。JRAD が利用できない場合、JRLY は次に利用可能な (接続されていない) JRAD をラウンドロビン方式で検索して接続しようとします。2 つの JRLY から同じ JRAD に接続することはできません。これらの条件を利用し、JRAD アドレスの順序を変えて効率的に接続を確立することができます。つまり、予備の JRAD を待機させておき、JRLY から JRAD への最初の接続が切断されたら、予備の JRAD に接続されるようにします。この種のフェイルオーバ処理は、JRLY のみで行われます。
JRLY の起動時に一覧内の JRAD がどれも実行されていない場合、最初の接続は失敗します。Jolt クライアントが JRLY に接続しようとすると、JRLY は、再び JRAD に接続しようとします。
フェイルオーバ機能を有効にするには、UBBCONFIG ファイルで JRAD を設定し、複数の JRAD を起動する必要があります。
JRLY (フロントエンド リレー) のプロセスは、JRAD の起動前または起動後のどちらかの時点で始まります。JRLY の起動時に JRAD が利用できない場合、JRLY はクライアントからの要求を受信する時点で JRAD に接続を試みます。クライアントからの要求受信時にも JRAD に接続できない場合、クライアントはアクセスを拒否され、JRLY のエラー ログ ファイルに警告メッセージが書き込まれます。
システム プロンプトで次のコマンドを入力し、JRLY プロセスを開始します。
jrly -fconfig_file_path
コンフィグレーション ファイルが存在しないか、または開けない場合、JRLY はエラー メッセージを出力します。
JRLY を起動できない場合、JRLY は標準エラーにメッセージを書き込み、起動時のエラーをエラー ログに記録してから終了します。
この節では、JRLY.exe の Windows 2003 バージョンで利用できるコマンドライン オプションについて説明します。次のような制限事項があります。
[display_suffix] が表示されている場合)、すべての操作はデフォルトの JRLY Windows 2003 サービス インスタンスで実行されます。jrly -command です。-start と -stop 以外は、Windows 2003 レジストリに対する書き込み権が必要です。-start と -stop を使用する場合は、Windows 2003 サービスの制御権が必要です。これらの制限は、Windows 2003 でのユーザ制限に基づいています。
JRLY のコマンドライン オプションを次の表で詳しく説明します。
|
|
|
UNIX 用の JRLY のコマンドライン オプションは、次の 1 つだけです。
コンフィグレーション ファイルは、「タグ=値」の形式で記述されています。空白行または「#」で始まる行は無視されます。次のリストは、正式なコンフィグレーション ファイルの形式を示しています。
LOGDIR=<LOG_DIRECTORY_PATH>
ACCESS_LOG=<ACCESS_FILE_NAME in LOGDIR>
ERROR_LOG=<ERROR_FILE_NAME in LOGDIR>
LISTEN=<IP:Port combination where JRLY will accept connections>
CONNECT=<IP:Port combination associated with JRAD>
SOCKETTIMEOUT=<Seconds for socket accept()function>
| 注意 : | SOCKETTIMEOUT は、リレー Windows 2003 サービスがネットワーク アクティビティ (新しい接続、読み込み対象のデータ、クローズされた接続など) を実現するために、新しいソケット接続の確立をブロックする期間を示す時間 (秒単位) です。これは、Windows 2003 マシンでのみ有効です。SOCKETTIMEOUT の値は、SCM にも影響します。SCM からサービスの停止が要求されると、SCM は少なくとも SOCKETTIMEOUT で指定した秒数を待つ必要があります。 |
次のコード リストは、JRLY のコンフィグレーション ファイルの例です。CONNECT で始まる行は、JRAD マシンの IP アドレスとポート番号を指定します。
LOGDIR=/usr/log/relay
ACCESS_LOG=access_log
ERROR_LOG=errorlog
# jrly はポート 4444 でリスンします。
LISTEN=200.100.10.100:4444
CONNECT=machine1:port1CONNECT=machine2:port2
SOCKETTIMEOUT=30 //コード リストの下のテキストを参照
ディレクトリ名とファイル名の形式は、オペレーティング システムによって異なります。UNIX システムではフォワードスラッシュ (/) を使用します。Windows 2003 システムではバックスラッシュ (\) を使用します。LOGDIR、ACCESS_LOG、または ERROR_LOG で指定されたファイルを開けない場合、JRLY は stderr にエラー メッセージを記録してから終了します。
表 3-6 は、ホスト名とポート番号の形式を示しています。
| 注意 : | JRLY では IPv6 はサポートされません。 |
Jolt リレー サーバ アダプタ (バックエンド リレー) は、Oracle Tuxedo システム サーバです。Jolt リレー アダプタ (JRAD) の配置場所は、JSL サーバの接続先である Oracle Tuxedo のホスト マシン (シングル ホスト モード (SHM)) およびサーバ グループでなくてもかまいません。
JRAD は、関連する JRLY とは独立して起動できます。JRAD は、起動および停止のアクティビティを Oracle Tuxedo ログ ファイルから追跡します。
1 つの JRLY に接続できる JRAD プロセスは 1 つだけです。JRAD は、1 つの JSL および関連する JSH とだけ通信するようにコンフィグレーションできます。複数の JRAD を 1 つの JSL と通信するようにコンフィグレーションすることもできます。UBBCONFIG ファイルには、Oracle Tuxedo サーバ用の CLOPT パラメータを含める必要があります。「UBBCONFIG ファイル内の JRAD エントリの例」に示すコンフィグレーション ファイルの例を参照してください。
次の表では、CLOPT パラメータに関する追加情報を示します。
JRAD CLOPT パラメータのアドレスは、次のいずれかの形式で指定できます。
0x0002pppphhhhhhhh pppp はポート番号、hhhhhhhh は 16 進数の IP アドレスを示します。
# JRAD host 200.100.100.10 listens at port 2000, connects to JSL port 8000 on the same host
JRAD SRVGRP=JSLGRP SRVID=60
CLOPT="-A -- -l 0x000207D0C864640A – c 0x00021f40C864640A"
Jolt インターネット リレーをコンフィグレーションするには、ネットワーク接続されたいくつかのコンポーネントを動作させる必要があります。コンフィグレーションを行う前に次の表に示す条件を確認し、情報を書き留め、間違ったコンフィグレーションを行わないようにしてください。
Jolt リポジトリには、Oracle Tuxedo サービスの定義が格納されています。この定義情報により、Jolt クライアントは Oracle Tuxedo サービスにアクセスすることができます。インストール時にダウンロードされる Jolt リポジトリのファイル群には、Oracle Jolt で内部的に使用されるサービス定義が含まれています。アプリケーション サービスに定義を追加する方法の詳細については、「Jolt リポジトリ エディタを使う」を参照してください。
Oracle Jolt リポジトリをコンフィグレーションするには、アプリケーションの UBBCONFIG ファイルを編集してください。UBBCONFIG ファイルは、ASCII 形式の Oracle Tuxedo コンフィグレーション ファイルです。アプリケーションごとに別の UBBCONFIG ファイルを作成してください。ファイル内のエントリの構文については、『Tuxedo コマンド リファレンス』を参照してください。次のコード リストは、UBBCONFIG ファイルの一部を示しています。
*GROUPS
JREPGRP GRPNO=94 LMID=SITE1
*SERVERS
JREPSVR SRVGRP=JREPGRP SRVID=98
RESTART=Y GRACE=0 CLOPT="-A -- -W -P /app/jrepository"
JREPSVR SRVGRP=JREPGRP SRVID=97
RESTART=Y RQADDR=JREPQ GRACE=0 CLOPT="-A -- -P /app/jrepository"
JREPSVR SRVGRP=JREPGRP SRVID=96
RESTART=Y RQADDR=JREPQ REPLYQ=Y GRACE=0 CLOPT="-A -- -P /app/jrepository"
| 注意 : | UNIX システムで jrepository ファイルのパスを設定する場合は、スラッシュ (/) を使用してください (例 : app/repository)。Windows 2003 システムの場合は円記号 (\) を使用し、ドライブ名を指定してください (例 : c:\app\repository)。 |
次の表に従って、UBBCONFIG ファイル内のセクションを変更してください。
GROUPS エントリを使用して、Oracle Jolt リポジトリを含むグループを設定します。グループ名のパラメータには、アプリケーション側で選択された名前が使用されます。
Jolt リポジトリ サーバである JREPSVR には、リポジトリにアクセスしたり、リポジトリを編集するためのサービスが格納されています。JREPSVR インスタンスが複数ある場合は、共有ファイルにより、リポジトリの情報が共有されます。UBBCONFIG ファイルの SERVERS セクションには、JREPSVR を指定してください。
SRVID パラメータに新しいサーバの識別子を指定します (例 : 98 など)。JREPSVR に対して -W フラグを設定し、リポジトリを編集可能にします。このフラグを設定しないと、リポジトリは読み取り専用になります。 | 注意 : | インストールする必要があるのは、書き込み可能な 1 つの JREPSVR (-W フラグを指定した JREPSVR) だけです。読み取り専用に設定された複数の JREPSVR を同じホストにインストールすることもできます。 |
-P フラグを指定して、リポジトリ ファイルへのパスを設定します。-P フラグに対する引数が指定されていないと、Oracle Tuxedo の ULOG ファイルにエラー メッセージが表示されます。/app/jrepository)。 tmloadcf コマンド (例 : tmloadcf -y ubbconfig) や tmboot コマンドを使用して、Oracle Tuxedo システムを起動します。tmloadcf および tmboot については、『Oracle Tuxedo アプリケーション実行時の管理』を参照してください。
リポジトリ ファイル jrepository は、Oracle Jolt で利用可能です。このファイルには bankapp のサービスとリポジトリ サービスが含まれています。これらのサービスは、リポジトリ エディタを使って編集したり、テストを行ったり、削除することができます。
| 注意 : | Oracle Jolt バージョン 1.x からアップグレードする場合、現在のバージョンとの互換性を保つために、バルク ローダを使って jrepository ファイルを作成し直す必要があります。 |
Oracle Jolt で bankapp アプリケーションのテストを行わない場合も、インストール時に提供される jrepository ファイルから始めてください。bankapp のパッケージまたはサービスが必要でない場合は削除してください。
ファイルのパス名は、-P オプションの引数と一致していなければなりません。
| 警告 : |
jrepository ファイルの変更はどんなテキスト エディタでも行うことができますが、Oracle Jolt システムでは整合性チェック (ファイルが正しい形式かどうかを確認) は行われません。jrepository ファイルが手動で変更されたかどうかは、実行時までわかりません。その他の情報については、「Jolt リポジトリ エディタを使う」を参照してください。 |
Oracle Tuxedo および Oracle Jolt リポジトリ エディタを使用して次の手順で Oracle Tuxedo サービスを定義し、クライアントが Jolt サービスを利用できるようにします。
Jolt のイベント サブスクリプション機能では、Oracle Tuxedo サービスまたは別の Oracle Tuxedo クライアントからイベント通知を受信します。
tpbroadcast() を使用するか、または tpnotify() ATMI 呼び出しを使用して直接目的のメッセージを送信) です。非請求通知には、TMUSREVT サーバは不要です。tppost() を使用してイベントをポストするときにのみ受信されます。ブローカ経由のイベント通知には、TMUSREVT サーバが必要です。
Oracle Tuxedo の TMUSREVT サーバをコンフィグレーションし、アプリケーションの UBBCONFIG ファイルを編集してください。次のコード リストは、UBBCONFIG ファイル内の TMUSREVT パラメータの内容を示しています。コンフィグレーション ファイル内のエントリの構文については、『C 言語を使用した Oracle Tuxedo アプリケーションのプログラミング』を参照してください。
TMUSREVT SRVGRP=EVBGRP1 SRVID=40 GRACE=3600
ENVFILE="/usr/tuxedo/bankapp/TMUSREVT.ENV"
CLOPT="-e tmusrevt.out -o tmusrevt.out -A --
-f /usr/tuxedo/bankapp/tmusrevt.dat"
SEQUENCE=11
UBBCONFIG ファイルの SERVERS セクションで、SRVGRP パラメータと SRVID パラメータを必要に応じて変更してください。
フィルタ処理を行うと、サブスクリプションをカスタマイズできます。Oracle Tuxedo のイベント ブローカ、イベントのサブスクライブ方法、またはフィルタ処理に関する追加情報については、『C 言語を使用した Oracle Tuxedo アプリケーションのプログラミング』を参照してください。
Oracle Tuxedo の FML バッファまたは VIEW バッファをフィルタ処理するには、Oracle Tuxedo の実行時にフィールド定義ファイルが必要です。
| 注意 : | STRING バッファをフィルタ処理する場合の条件は特にありません。 |
「TMUSREVT.ENV ファイルの FIELDTBLS 変数」のリストは、FML バッファの使用例を示しています。FIELDTBLS 変数と FLDTBLDIR 変数を設定することにより、Oracle Tuxedo で FML フィールドの定義テーブルを利用できるようになります。
my.flds ファイルのフィールドをフィルタ処理するには、次の手順に従います。
UBBCONFIG ファイルで ENVFILE="/usr/me/bankapp/TMUSREVT.ENV" と定義されている場合 (「UBBCONFIG ファイル」を参照)、FIELDTBLS と FLDTBLDIR の定義は、設定されている環境変数の代わりに TMUSREVT.ENV ファイルから取得されます。
ENVFILE="/usr/me/bankapp/TMUSREVT.ENV" の定義を削除すると、FIELDTBLS と FLDTBLDIR の定義は、設定されている環境変数から取得されます。Oracle Tuxedo システムを起動する前には、FIELDTBLS と FLDTBLDIR の定義に適切な値が設定されていなければなりません。
イベント サブスクリプションと Oracle Jolt クラス ライブラリの詳細については「Jolt クラス ライブラリを使う」を参照してください。
次の節では、コンフィグレーションに関する情報を詳しく説明します。Oracle Tuxedo について理解している場合でも、Jolt サービス ハンドラ (JSL: Jolt Service Handler) のコンフィグレーションについてこの節で確認してください。
Oracle Tuxedo のコンフィグレーション ファイルには、ASCII 形式の UBBCONFIG と、コンパイル済みの TUXCONFIG の 2 種類があります。TUXCONFIG ファイルを作成したら、UBBCONFIG はバックアップとして保存してください。
UBBCONFIG ファイルは、使い慣れたテキスト エディタを使用して変更することができます。MASTER マシンにログインしているときにアプリケーションが動作しなくなったら、tmloadcf(1) を実行して TUXCONFIG を再コンパイルします。Tuxedo からは、TUXCONFIG ファイルを上書きしてもよいかどうかを確認するプロンプトが表示されます。-y オプションを指定してコマンドを実行すると、このプロンプトは表示されません。
バイナリ形式のコンフィグレーション ファイル、TUXCONFIG には、tmboot(1) の実行時に使用される情報が含まれています。これにより、サーバの起動と Oracle Tuxedo システムの掲示板の初期化が順番に行われます。バイナリ形式の TUXCONFIG ファイルを直接作成することはできません。まず、UBBCONFIG ファイルを作成する必要があります。tmloadcf(1) を実行すると、このファイルが解析され、TUXCONFIG に読み込まれます。次に、tmadmin(1) により、コンフィグレーション ファイルまたはそのコピーを使ったシステムのモニタが行われます。tmshutdown(1) は、アプリケーションの停止時に必要な情報をコンフィグレーション ファイルから参照します。
UBBCONFIG ファイルには、最大 9 つまでのセクションを指定することができます。セクションは、アスタリスク (*) が先頭に付いた行から始まります。アスタリスク (*) の直後にはセクション名が表示されます。使用可能なセクションは、RESOURCES、MACHINES、GROUPS、NETGROUPS、NETWORK、SERVERS、SERVICES、INTERFACES、および ROUTING です。
| 注意 : | RESOURCES セクション (使用する場合) と MACHINES セクションは、この順序で最初に指定しなければなりません。GROUPS セクションは、SERVERS セクション、SERVICES セクション、および ROUTING セクションより前に指定しなければなりません。 |
JSL をコンフィグレーションするには、UBBCONFIG ファイルを変更する必要があります。Oracle Tuxedo のコンフィグレーションに関するさらに詳しい情報については、『Oracle Tuxedo アプリケーション実行時の管理』を参照してください。
次のコード リストは、UBBCONFIG ファイルの一部を示しています。
*MACHINES
MACH1 LMID=SITE1
MAXWSCLIENTS=40
*GROUPS
JSLGRP GRPNO=95 LMID=SITE1
*SERVERS
JSL SRVGRP=JSLGRP SRVID=30 CLOPT= “ -- -n 0x0002PPPPNNNNNNNN -d
/dev/tcp -m2 -M4 -x10”
次の表では、Jolt サーバ グループと Jolt サーバに対して指定できるパラメータを示しています。これら以外のパラメータを指定する必要はありません。
次の表に従って、UBBCONFIG ファイル内のセクションを変更してください。
MACHINES セクションでは、物理マシンの論理名を指定します。また、このセクションではマシン固有のパラメータも指定します。MACHINES セクションには、アプリケーションで使用される物理プロセッサごとのエントリが必要です。エントリの形式は次のとおりです。
ADDRESSまたはNAME必須パラメータ [オプション パラメータ]
ADDRESS はプロセッサの物理名です。たとえば、UNIX システムの uname -n コマンドの実行結果として返される値などです。
LMID=string_value
このパラメータは、ADDRESS のシンボリック名として、ほかのセクションで string_value が使用されることを指定します。この名前にはカンマを指定できません。名前は 30 文字以内で指定します。これは必須パラメータです。コンフィグレーションで使用されるすべてのマシンには、LMID 行を指定する必要があります。
MAXWSCLIENTS=number
コンフィグレーション ファイルの MACHINES セクションには、MAXWSCLIENTS パラメータを指定する必要があります。これは、プロセッサにおけるアクセサ数を指定する、Jolt クライアントと Workstation クライアント専用のパラメータです。このパラメータには、0 ~ 32,768 の範囲の値を指定します。
Jolt サーバと Workstation では、同じ要領で MAXWSCLIENTS が使用されます。たとえば、MAXWSCLIENTS に 200 スロットがコンフィグレーションされると、Jolt と Workstation で使用されるリモート クライアントの総数が決まります。
コンフィグレーション ファイルの MAXWSCLIENTS は必ず指定してください。指定しない場合は、デフォルトで 0 が設定されます。
| 注意 : | MAXWSCLIENTS が設定されていないと、JSL は起動しません。 |
このセクションでは、サーバ グループに関する情報を定義します。サーバ グループは少なくとも 1 つ定義しなければなりません。サーバ グループのエントリには、サーバ群およびマシン上のサービス群に対して、論理名を指定します。論理名は、SERVERS セクションの SRVGRP パラメータの値に使用されます。この値により、サーバはグループ内のサーバとして識別されます。SRVGRP は、SERVICES セクションで、グループ内の特定のサービス インスタンスのオカレンスを識別する場合にも使用されます。GROUPS セクションのその他のパラメータは、このグループを特定のリソース管理インスタンスに関連付けます (社員データベースなど)。GROUPS セクション内にある各行の形式は次のとおりです。
GROUPNAME必須パラメータ[オプション パラメータ]
GROUPNAME は、グループの論理名 (string_value) を指定します。グループ名は、GROUPS セクションのグループ名と MACHINES セクションの LMID の中でユニークでなければなりません。このグループ名には、アスタリスク (*)、カンマ (,)、またはコロン (:) を指定できません。名前は 30 文字以内で指定します。
Jolt サーバ リスナ (JSL) を含むグループには、GROUPS エントリを指定する必要があります。次の手順に従って、GROUPS エントリを作成します。
| 注意 : | UBBCONFIG ファイルの GROUPS セクションに指定されているすべてのグループに対して、デフォルトでリソース マネージャが割り当てられないようにしてください。デフォルト値として指定されたリソース マネージャは、JSL に割り当てられ、tmboot の実行時にエラーが発生します。SERVERS セクションの RESTART、MAXGEN、その他に指定されているデフォルト値は、JSL に対して有効です。 |
このセクションでは、システムで起動されるサーバの初期状態に関する情報を定義します。常時実行中の状態にあり、受信したサーバ グループのサービス要求を処理するのがサーバである、という捉え方は、特定のリモート環境には当てはまらない場合があります。ほとんどの環境では、オペレーティング システムまたはリモート ゲートウェイは単にサービスの送信を行っています。このような場合は、リモート プログラムのエントリ ポイントに対して、SERVER テーブルのエントリではなく SERVICE エントリ ポイントを指定するだけで十分です。Oracle Tuxedo システムのゲートウェイ サーバは、リモート ドメインのサービス要求を宣言し、キューに入れます。ホスト固有のリファレンス ページでは、UBBCONFIG のサーバ テーブル エントリが特定の環境に適応しているかどうかを示し、適応している場合は対応するセマンティクスを明記する必要があります。SERVERS セクション内にある各行の形式は次のとおりです。
AOUT は、tmboot(1) によって実行されるファイル (string_value) を指定します。tmboot は、サーバ グループで指定されたマシン上で AOUT を実行します。tmboot は対象マシンで AOUT ファイルを検索するため、AOUT はそのマシンのファイルシステム内になければなりません (AOUT のパスには、ほかのマシン上にあるファイルシステムへの RFS 接続を含めることができます)。サーバの相対パス名が指定されている場合、AOUT の検索は、APPDIR、TUXDIR/bin、/bin、path、の順で行われます。<path> は、マシンの環境設定ファイル (ある場合) の最後の行 (PATH=) に指定されている値です。APPDIR および TUXDIR の値は、TUXCONFIG ファイル内の適切なマシン エントリから取得されます。
クライアントは、Jolt サーバ リスナ (JSL) を介して Oracle Jolt アプリケーションに接続します。サービスは、Jolt サーバ ハンドラ (JSH) を介してアクセスされます。JSL は複数のクライアントを扱うことができます。これらのクライアントは、唯一の通信ポイントである JSL を経由して特定のネットワーク アドレス (JSL コマンドラインで指定) のアプリケーションに接続します。JSL は、ハンドラ プロセスをスケジューリングします。ハンドラ プロセスは、アプリケーションの管理ドメインの範囲内にあるリモート ワークステーションで、クライアントの代わりに動作します。ハンドラは、1 つのポートで同時に複数のクライアントを扱うために、多重化スキーマを使用します。
JSL に指定されたネットワーク アドレスは、JSL および JSL に関連付けられた JSH プロセスの TCP/IP アドレスを決定します。ネットワーク アドレスにより決定されたポート番号は、JSL が新しい接続を受け付けるポート番号を指定します。JSL に関連付けられた各 JSH は、同じ TCP/IP アドレスで連続するポート番号を使用します。たとえば、JSL の最初のポート番号が 8000 であり、最大 3 つの JSH プロセスがある場合、これらの JSH プロセスは 8001、8002、8003 のポートを使用します。
| 注意 : | 後続の JSL を誤ってコンフィグレーションすると、ポート番号の衝突が発生します。 |
これまでに説明したセクションのパラメータのほか、JSL では次のパラメータを指定することができます。ただし、これらのパラメータを設定すると、アプリケーションにどのような影響が及ぶかを考慮してください。
SVRGRP=string_value
このパラメータは、実行するサーバが含まれるサーバ グループの名前を指定します。string_value は、*GROUPS セクションのサーバ グループを示す論理名でなければならず、名前は 30 文字以内で指定します。*GROUPS セクションのエントリと関連付けるということは、LMID が指定されたサーバ グループ内のマシンで AOUT が実行されることを意味します。また、この関連付けにより、サーバ グループの GRPNO と、関連するリソース マネージャがオープンされている場合に受け付けられるパラメータが指定されます。すべてのサーバ エントリには、サーバ グループのパラメータが指定されていなければなりません。
SRVID=number
このパラメータには、グループ内の特定のサーバを示す識別子 (1 ~ 30,000 の範囲の値) を指定します。このパラメータは、すべてのサーバ エントリに必要です (サーバ グループ内のサーバが 1 つの場合も必要)。複数のサーバのオカレンスを設定する場合は、連続する SRVID を指定しないでください。MAX で指定された数までのサーバ用に、SRVID を残しておいてください。
SERVERS セクションのオプション パラメータには、ブート パラメータとランタイム パラメータがあります。
ブート パラメータは、tmboot によってサーバが実行されるときに使用されるパラメータです。いったん実行されると、サーバはコンフィグレーション ファイルからエントリを読み込み、ランタイム オプションを決定します。正しいエントリが検索されるようにするため、ユニークなサーバ識別子が使用されます。次のパラメータがブート パラメータです。
CLOPT=string_value
CLOPT パラメータは、起動時に AOUT に渡すコマンドライン オプションの文字列を指定します。『Oracle Tuxedo のファイル形式とデータ記述方法』の servopts(5) ページには、有効なパラメータが一覧表示されています。
開発中のサーバに適用されるオプションもあります。たとえば、-r オプションは、サービス要求が開始または終了するたびに、標準のエラー ファイルにレコードを書き込むようサーバに指示します。
別のコマンドライン オプションを使用して、サーバの標準出力 (stdout) や標準エラー (stderr) を特定のファイルに書き込んだり、サーバの起動時に利用可能なサービスの種類を最初に宣言するように指定できます。
CLOPT パラメータのデフォルト値は -A であり、サーバの起動時に、利用可能なサービスがすべて宣言されることを示します。
CLOPT パラメータには最大 256 文字まで指定できます。パラメータは二重引用符で囲む必要があります。
SEQUENCE=number
このパラメータは、ほかのサーバとの関係において、いつサーバを停止または起動するかを指定します。SEQUENCE が指定されていない場合、サーバは SERVERS セクションで指定された順序で起動し、逆の順序で停止されます。シーケンス番号が指定されているサーバとそうでないサーバがある場合、シーケンス番号が指定されたサーバが低い番号から順に起動します。次に、シーケンス番号が指定されていないサーバが、コンフィグレーション ファイルに表示されている順序で起動します。シーケンス番号には 1 ~ 9999 の値を指定します。複数のサーバに同じシーケンス番号が割り当てられると、tmboot の実行時にこれらのサーバが同時に起動します。
MIN=number
MIN パラメータは、tmboot で起動されるサーバのオカレンスの最小数を指定します。RQADDR が指定されており、MIN が 1 より大きい数の場合、サーバは MSSQ (複数サーバ、単一キュー) になります。サーバの識別子は SRVID で指定します。SRVID の最大値は SRVID + (MAX -1) です。サーバのすべてのオカレンスには、同じサーバ パラメータのほか、同じシーケンス番号が付きます。MIN には 0 ~ 1000 までの範囲の値を指定できます。MIN を指定しないと、デフォルトで 1 が設定されます。
MAX=number
MAX パラメータは、起動するサーバのオカレンスの最大数を指定します。tmboot が実行されると、MIN で指定した数のサーバが起動します。次に、tmboot の -i オプションを使用して関連するサーバ識別子を指定し、その他のサーバ (MAX で指定した数まで) を起動します。MAX には 0 ~ 1000 の範囲の値を指定できます。MAX を指定しないと、デフォルトで MIN と同じ値かまたは 1 が設定されます。
tmboot によって起動したサーバは、ランタイム パラメータを使用します。既に説明したとおり、tmboot は、サーバの起動時に MACHINES セクションに対して TUXDIR、APPDIR、および ENVFILE の各パラメータの値を使用します。さらに、サーバの PATH を次のパスに設定します。
path は、ENVFILE ファイルの最後の行 (PATH=) に指定されている値です。次のパラメータはランタイム パラメータです。
ENVFILE=string_value
ENVFILE パラメータを使用して、サーバの初期化時に、tmboot によって作成された環境に対して値を追加することができます。tmboot の MACHINES ENVFILE で変数を指定した後、オプションとして、SERVERS ENVFILE パラメータで指定されたファイルの変数を設定することもできます。これらのファイルを使用して TUXDIR、APDIR、TUXCONFIG、または TUSOFFSET をオーバーライドすることはできません。最も良い方法は、アプリケーションを正しく実行するために必要な変数だけをサーバの ENVFILE に設定しておくことです。
サーバ側では、サーバの起動後に ENVFILE ファイルが処理されます。したがって、サーバの実行に必要な実行可能ファイルまたは動的にロードされたファイルを検索するためのパス名を、このファイルに設定することはできません。これらのタスクを実行する必要がある場合は、代わりにマシンの ENVFILE を使用してください。
ENVFILE では、各行を次の形式で指定する必要があります。
VARIABLE の先頭には、アンダースコア (_) または英文字を指定する必要があります。また、アンダースコアと英数字だけで構成することもできます。サーバ グループに属するサーバが別のマシンに移行される場合、ENVFILE はどちらのマシンでも同じ場所になければなりません。
CONV={Y | N}
CONV は、サーバが会話型サーバであるかどうかを指定します。会話型サーバが定義されている場合、CONV の値は Y になります。接続は会話型サーバに対してのみ行うことができます。受け取った要求に対して応答を行うサーバの場合は、CONV=N (デフォルト) を設定するか、またはパラメータを省略します。
RQADDR=string_value
RQADDR は、このサーバの要求キューにシンボリック名を割り当てます。複数のサーバに対して同じシンボリック名を使用し、MSSQ セットを作成します (1 より大きい MIN の値を指定)。MSSQ セットに属するすべてのメンバーは、同じサービスのセットを提供し、同じサーバ グループに属していなければなりません。
RQADDR を指定しないと、このサーバのキュー アドレスとなるユニークなキーが割り当てられます。ただし、キューにシンボリック名が設定されている場合は、キュー アドレスを引数として使用する tmadmin コマンドを使う方が簡単です。
RQPERM=number
このサーバの要求キューに UNIX 形式でパーミッションを割り当てる場合は、RQPERM パラメータを使用してください。number には、0001 ~ 0777 の範囲の値を指定します。パラメータが何も指定されていない場合は、掲示板に設定されたパーミッションの値 (RESOURCES セクションの PERM で指定) が使用されます。そこでもパーミッションが設定されていない場合は、デフォルトの 0666 が指定されます。ただし、この値が設定された状態では、システムにログインしたユーザであれば誰でもアプリケーションを使用できるため、注意が必要です。
REPLYQ={ Y | N }
REPLYQ パラメータは、応答キュー (要求キューとは別) を AOUT に対して作成する必要があるかどうかを指定します。N が指定されると、AOUT と同じ LMID に応答キューが作成されます。要求キューを使用するサーバが 1 つの場合、要求キューから応答を取り出す操作は問題なく行われます。しかし、サーバが MSSQ セットのメンバーであり、応答メッセージを受信するようにプログラミングされているサービスを含んでいる場合、REPLYQ を Y に設定して、このサーバに対して応答キューが個別に作成されるようにする必要があります。N に設定されると、応答は MSSQ セット内の全サーバが共有する要求キューに送信されてしまい、応答が要求元のサーバに返されるかどうかは保証されません。
応答を必ず受信するには、常に MSSQ セット内の全サーバに REPLYQ=Y を設定するべきです。MSSQ セット内のサーバでは、同じサービスが提供されなければなりません。つまり、セット内のあるサーバが応答を待機している場合は、セット内のほかのサーバでも応答を待機できます。
RPPERM=number
応答キューにパーミッションを割り当てるには、RPPERM パラメータを使用してください。number は、通常の UNIX 形式 (例 : 0600) で指定されます。指定できる値は、0001 ~ 0777 までの数値です。RPPERM を指定しない場合は、デフォルトで 0666 が指定されます。このパラメータは、REPLYQ=Y の場合のみ有効です。要求と応答が同じキューから読み出される場合、必要なのは RQPERM のみで、RPPERM は無視されます。
RESTART={ Y | N }
RESTART パラメータは、AOUT を再起動できるかどうかを示し、Y または N を指定できます。デフォルト値は N です。移行可能なサーバ グループにサーバが属している場合、RESTART には Y を指定しなければなりません。SIGTERM シグナルを指定して起動したサーバは再起動できません。このサーバはリブートする必要があります。
サーバの再起動に関するポリシーは、サーバの状態、つまりサーバが開発中であるかどうかによって異なります。アプリケーションがテスト過程の段階では、サーバに繰り返し障害が発生することも考えられます。しかし、アプリケーションがプロダクション段階に進んだら、サーバは、ほとんど障害が発生しない状態でなければなりません。アプリケーションがプロダクション段階に進んだら、サーバの再起動に関してさらに厳しい条件のパラメータを設定することもできます。
RCMD=string_value
AOUT が再起動できる場合、このパラメータは、AOUT が異常終了した場合に実行するコマンドを指定します。最初の空白またはタブまでの文字列には、実行可能な UNIX ファイルの名前 (絶対パス名または APPDIR への相対パス名) を指定します。コマンドの先頭に Shell の変数を設定しないでください。オプションで、コマンド名の後にコマンドライン引数を指定することもできます。コマンドラインには、GRPNO と SRVID という、サーバの再起動に関連する 2 つの引数が追加されます。string_value はサーバの再起動と並行して実行されます。
RCMD パラメータを使用すると、サーバの再起動時に並行して実行されるコマンドを指定することができます。このコマンドは、サーバの PATH のディレクトリにある実行可能な UNIX のシステム ファイルでなければなりません。たとえば、カスタマイズされたメッセージを userlog に送信し、再起動するサーバにマークを付けるコマンドです。
MAXGEN=number
このパラメータは、AOUT が再起動可能な場合、GRACE で指定された期間内に、最大「number - 1」回まで再起動されることを指定します。指定できる値は 0 より大きく、256 より小さい数値です。この値を指定しないと、デフォルトの 1 (サーバは一度起動できるが、再起動はできない) が設定されます。サーバが再起動可能な場合、MAXGEN には 2 以上の値を指定する必要があります。RESTART に Y を指定しないと、MAXGEN の値は無視されます。
GRACE=number
RESTART が Y の場合、GRACE パラメータを使用して、サーバの再起動を行える期間 (秒単位) を指定することができます。再起動は MAXGEN - 1 回行うことができます。秒数として 0 以上 2,147,483,648 未満 (または 68 年強) の値を指定します。GRACE を指定しない場合は、デフォルトの 86,400 秒 (24 時間) が指定されます。GRACE を 0 に設定すると、すべての制限が解除されます。つまり、サーバの再起動回数が制限されなくなります。
JSL には、Oracle Tuxedo のパラメータである RESTART、RQADDR、および REPLYQ を使用できます。ランタイム パラメータの詳細については、『Oracle Tuxedo アプリケーション実行時の管理』を参照してください。パラメータは次の要領で指定してください。
SRVGRP パラメータを指定するには、GROUPS セクションにある、定義済みのサーバ グループ名を示す値を入力します。 SRVID を指定するには、1 ~ 30,000 の数値を使用してグループ内のサーバを示す識別子を入力します。CLOPT パラメータが以下の構文になっていることを確認します。CLOPT= “-- -n 0x0002PPPPNNNNNNNN -d /dev/tcp -m2 -M4 -x10”
| 注意 : | CLOPT パラメータは数種類あります。該当するコマンドラインの説明については、「JSL のコマンドライン オプション」の表を参照してください。 |
以下の Oracle Jolt 製品の Web ページには、サンプル コードが用意されています。このサンプル コードは Oracle Jolt を使用して変更することができます。
http://www.bea.com/products/jolt/index.htm
これらのサンプルを使用すると、Oracle Jolt の機能を実際に試すことができます。
以下の Java 関連の Web サイトも参照してください。
|