コミット・モードの処理の概要

コミット・モードとは、IMS™ によって 実行されるコミット処理のタイプのことをいいます。 Java™ クライアントは、 トランザクション要求を IMS に 送信する際に、使用されるコミット・モード・プロトコルを指定します。

IMS Connect および IMS によって サポートされているコミット・モード処理には、2 つのタイプがあります。コミット・モード 0 (コミット後に送信) では、IMS は IMS データベースの変更をコミットしてから出力をクライアントに送信し、コミット・モード 1 (送信後にコミット) では、IMS は、 クライアントに出力を送信してからデータベースの変更をコミットします。

コミット・モード・プロトコルに関連して、IMS Connect および IMS は、3 つの 同期レベル (Synch Level)、NONE、CONFIRM、および SYNCPT もサポートしています。コミット・モード 1 では、3 つの Synch Level のどれでも使用可能です。コミット・モード 0 では、CONFIRM のみ使用可能です。しかし、IMS Connector for Java は、コミット・モード 1 では Synch Level CONFIRM を現在サポートしていません。

現在、Java クライアントでは、 同期レベルは設定されません。 IMS Connector for Java は、IMS Connect と通信するときに、自動的に 同期レベルを設定します。

IMS Connector for Java は、以下の組み合わせをサポートします。

Java クライアントでは、同期レベルは 設定されません。 IMS Connector for Java は、IMS Connect と通信するときに、自動的に 同期レベルを設定します。

Java クライアントが、コミット・モード 1 Synch Level NONE を指定したトランザクション要求を送信すると、IMS Connector for Java は、IMS Connect を介してその要求を IMS に渡します。IMS は このトランザクションを処理し、出力メッセージを Java クライアントに送信することを試みます。 Java クライアントは、 トランザクションから出力メッセージを受け取る場合と、例外を受け取る場合があります。どちらの場合も、IMS は、 データベースへの変更を既にコミットしていて、IMS トランザクションの 出力メッセージを廃棄します。

同様に、コミット・モード 0 Synch Level CONFIRM が指定されたトランザクションを 送信する場合にも、Java クライアントは、トランザクションから出力メッセージを受け取る場合と、また例外を受け取る場合があります。ただし、コミット・モード 0 が使用されているときに Java クライアントが例外を受け取った場合、出力は後で検索するためにキューに入れられることも、入れられないこともあります。 Java クライアントに配信されなかった 出力メッセージがキューに入れられるかどうかは、コミット・モード 0 対話のために Java クライアントが使用するソケット接続のタイプによって決まります。

出力メッセージが検索可能かどうかも、例外のタイプによって決まります。例えば、トランザクションが停止したことを示す IMSDFSMessageException を Java クライアントが受け取った場合、アプリケーションは実行されていないため、検索できる出力メッセージはありません。 ただし、トランザクションが実行されたにもかかわらず、出力メッセージが IMS Connect に戻される前に executionTimeout 値の時間が満了した場合、Java クライアントは、実行タイムアウトが発生したことを示す EISSystemException を受け取ります。この場合、出力メッセージは、適切な IMS OTMA 非同期出力キューまたは TPIPE に キューイングされて、後で検索されます。

: IMS/OTMA 用語では、トランザクション・パイプ (TPIPE) とは、 クライアント (IMS Connect) とサーバー (IMS/OTMA) 間の論理接続のことです。コミット・モード 0 の対話の場合、TPIPE は対話に使用される clientID によって識別されます。コミット・モード 0 の対話に使用される clientID ごとに、独自の TPIPE が使用されます。コミット・モード 1 の対話の場合、TPIPE は、対話に使用される IMS Connect ポート 番号によって識別されます。したがって、ポートごとに 1 つ存在する TPIPE が、そのポート上でコミット・モード 1 の対話を実行するすべてのクライアントで使用されます。

Java クライアントは、IMS トランザクションを コミット・モード 1 またはコミット・モード 0 のどちらで実行しているかに関係なく、IMSInteractionSpec の interactionVerb プロパティーに値を指定します。コミット・モード 0 対話が指定されている場合、Java クライアントは、IMSConnectionSpec の clientID プロパティーの値も提供しなければならない場合があります。 clientID は IMSConnectionSpec のプロパティーであり、リカバリー可能な 出力メッセージが入れられている IMS OTMA 非同期出力キューまたは TPIPE を 示します。コミット・モード 0 対話で Java クライアントが clientID を提供するかどうかは、Java クライアントによって 使用されるソケット接続のタイプによって決まります。

TPIPE から出力メッセージを検索するには、Java クライアントは、IMSInteractionSpec の interactionVerb プロパティーの値 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 または SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT のいずれか 1 つ、および IMSConnectionSpec の clientID プロパティーの値を指定して要求を送信します。非同期出力サポートについて、詳しくは、「IMS Connect Guide and Reference」の『Chapter 9: Protocols』を参照してください。

一般に、どの clientID の出力メッセージ・キューの検索でも、それらのメッセージが関連する clientID にどのようにしてキューイングされたか (コミット・モード 0 トランザクションが失敗したためであるのか、あるいは IMS アプリケーションが ALTPCB (Alternate Program Communication Block) への挿入を実行したためであるのか) に 関係なく、SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 または SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を使用することができます。失敗したコミット・モード 0 トランザクションからの出力メッセージを検索する場合、検索要求のための IMSConnectionSpec で指定する clientID は、 失敗したコミット・モード 0 トランザクションで指定された clientID と一致している必要があります。

その特定の clientID に対する OTMA 非同期出力キューに何も入っていない場合は、 実行タイムアウト例外を受け取ります。タイムアウト例外は、キューの中に メッセージが入っていないことを意味する場合と、タイムアウト値に指定された値が、IMS Connect がキューからメッセージを検索するのに十分ではないことを 意味する場合があります。 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT、 または SYNC_SEND_RECEIVE 対話の場合も、executionTimeout は、IMS Connect が IMS からの 応答を待つ時間の長さです。検索要求用に executionTime 値を指定しない場合は、デフォルトの実行タイムアウト値が使用されます。デフォルトのタイムアウト値は、IMS Connect 構成メンバーの TIMEOUT 値です。executionTimeout 値を 試行して、出力メッセージがすべてのタイプの対話に戻される確認してください。

コミット・モードの処理およびソケット接続

IMS リソース・アダプターによって作成されるソケット接続は、 すべて永続的ソケット接続です。つまり、IMS Connector for Java と IMS Connect の間の同一ソケット接続を、IMS Connect との複数の対話で連続して 再使用することができます。対話が行われている場合には、ある対話が終わるとソケット接続がクローズし、次の対話のために接続が再オープンする、ということはありません。 永続的ソケットには、共用可能ソケットと専用ソケットの 2 つのタイプがあります。

共有可能な永続的ソケット

共用可能な永続的ソケットは、 コミット・モード 1 またはコミット・モード 0 の対話を実行する、複数のアプリケーションによって共有 (連続再利用) できます。共有可能な永続的ソケットでコミット・モード 0 対話を実行する アプリケーションの場合、IMS リソース・アダプターは、「HWS」という接頭部が付いた clientID を自動的に生成します。この clientID は、ソケット接続とそれに関連した OTMA TPIPE を表し、また識別します。このタイプのソケットの場合には、IMS リソース・アダプターによって生成された clientID のみを使用することができます。ユーザー指定 clientID は、共有可能な永続的ソケット・サポートでは許可されません。

注: 代替 PCB にメッセージを挿入する IMS アプリケーション・ プログラムでは、代替 PCB の名前を「HWS」で始めてはなりません。

共有可能な永続的ソケットでコミット・モード 0 対話を実行する Java クライアントに配信できなかった出力メッセージは、 後で検索するために再キューイングすることができます。また、別のコミット・モード 0 対話を呼び出すプログラム間の切り替えを引き起こす、 共用可能な永続的ソケットで行われるコミット・モード 1 対話で作成された 2 次出力は、後で検索するために再キューイングすることができます。 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 および SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話は、共有可能な永続的ソケットで サポートされます。 IMS OTMA 非同期保留キューまたは TPIPE でキューに入れられた、 配信されなかった出力メッセージを検索するには、対話 verb を同じ クライアント・アプリケーション内で呼び出す必要があります。これは、 共用可能なソケット接続を識別する生成されたクライアント ID および関連する OTMA TPIPE を使用する必要があるためです。

共用可能な永続的ソケットでは、 配信されなかった出力メッセージをパージするか、生成された clientID の関連する TPIPE 以外宛先に転送できます。配信されなかった出力メッセージを パージするには、IMSInteractionSpec プロパティーの purgeAsyncOutput を TRUE に 設定する必要があります。この入力プロパティーは、IMS Connect が 配信されなかった入出力 PCB 出力をパージするかどうかを決定します。 purgeAsyncOutput プロパティーは、SYNC_SEND_RECEIVE 対話 verb でのみ 有効です。このプロパティーが SYNC_SEND_RECEIVE で指定されていない場合、デフォルトは TRUE です。

配信されなかった出力メッセージを 共用可能な永続的ソケットで処理する別のオプションは、別の宛先にメッセージを 転送することです。 IMSInteractionSpec プロパティーの reRoute を TRUE に設定すると、 配信されなかった出力メッセージを別の宛先に転送することができます。このプロパティーは、SYNC_SEND_RECEIVE 対話 verb でのみ有効です。 reRoute を TRUE に設定すると、配信されなかった出力メッセージが、クライアント・アプリケーションによって指定された宛先にキューイングされます。この宛先は、IMSInteractionSpec プロパティーの reRouteName で指定されます。 reRoute プロパティーが TRUE に設定され、reRouteName が 指定されていない場合は、reRouteName プロパティーの値は、IMS Connect 構成ファイルで指定された値になります。IMS Connect 構成ファイルで値が 指定されていない場合は、デフォルト値の HWSDEF が使用されます。

共用可能な永続的ソケット接続は、少なくとも以下のカスタム・プロパティーの 値を使用して、IMS Connection Factory によって作成されます。
  • ホスト名 = IMS Connect を実行しているマシンの TCP/IP ホスト名
  • ポート番号 = 関連するポート番号
  • データ・ストア名 = ターゲット IMS の名前
  • CM0Dedicated = FALSE
FALSE は CM0Dedicated プロパティーのデフォルト値であり、 接続ファクトリーに共用可能な永続的ソケット接続を作成させます。

専用永続的ソケット

専用永続的ソケットは、 コミット・モード 0 対話を実行する Java アプリケーションでのみ使用されます。このソケットは、同一のユーザー指定 clientID を持つ複数のアプリケーションによって共有 (連続再利用) できます。このタイプのソケットの場合には、ユーザー指定 clientID との対話のみ許可されます。有効な ユーザー指定 clientID の条件は、以下のとおりです。
  • 1 文字から 8 文字までの英数字 (A-Z、0-9) または特殊文字 (@、#、$) のストリングでなければならない。
  • 文字ストリング「HWS」で始まってはならない。ただし、デフォルトの reRouteName である HWSDEF は除きます。
  • IMS Connect ポート番号であってはならない。
  • 小文字を使用した場合、その文字は大文字に変更される。

専用永続的ソケットとは、ソケット接続が特定の clientID に割り当てられ、接続が切断されるまで、 その特定 clientID に占有されることを意味します。 SYNC_SEND_RECEIVE、SYNC_SEND、SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 および SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話は、専用永続的ソケットで サポートされます。

専用永続的ソケットで SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 および SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を実行すると、クライアント・アプリケーションは、コミット・モード 0 対話が失敗したか、IMS アプリケーションが ALTPCB (Alternate Program Communication Block) への挿入を実行したか、 あるいは共用可能な接続ファクトリーでトランザクションの reRoute が実行されたことが原因で IMS OTMA 非同期出力キューに入れられたメッセージを検索できるようになります。このようなメッセージを検索するには、クライアント・アプリケーションは、 非同期出力メッセージがキューイングされている TPIPE を表す clientID を提供する必要があります。専用永続的ソケットで対話を行ったときに配信されなかった出力メッセージは、 転送またはパージすることはできません。

専用永続的ソケット接続は、 少なくとも以下のカスタム・プロパティーの値を使用して、IMS Connection Factory によって作成されます。
  • ホスト名 = IMS Connect を実行しているマシンの TCP/IP ホスト名
  • ポート番号 = 関連するポート番号
  • データ・ストア名 = ターゲット IMS の名前
  • CM0Dedicated = TRUE

CM0Dedicated プロパティーの値が TRUE に設定されていると、 接続ファクトリーが専用永続的ソケット接続を作成するようになります。

: 同じ IMS Connect インスタンスに対する専用永続的ソケットを作成するように 構成されている接続ファクトリーが複数ある場合、特定の clientID へのソケットを 専用できるのは、一度に 1 つの接続ファクトリーのみです。例えば、最初の接続ファクトリーが CLIENT01 という clientID 専用のソケット接続を正常に作成できた場合、2 番目の接続ファクトリーは、最初の接続ファクトリーによって 作成されたソケット接続が IMS Connect にまだ接続されている間に CLIENT01 専用の ソケット接続を作成しようとすると、次の例外を受け取ります。
javax.resource.spi.EISSystemException: ICO0001E:
com.ibm.connector2.ims.ico.IMSTCPIPManagedConnection@23766050.processOutputOTMAMsg(byte [], InteractionSpec,Record) error. IMS Connect returned error: RETCODE=[8], REASONCODE=[DUPECLNT]. 
Duplicate client ID was used;  the client ID is currently in use. 

z/OS で シスプレックス・ディストリビューター環境またはワークロード管理の WebSphere Application Server クローン環境の Windows で実行中の場合は、専用永続的ソケット接続はお勧めできません。

永続的ソケットの解放

IMS Connector for Java と IMS Connect の間の TCP/IP 接続は、 永続的接続です。つまり、この接続は、エラーが発生したために IMS Connector for Java または IMS Connect によって 切断されない限り、オープンしたままになります。これは、共用可能な永続的ソケット接続と専用永続的ソケット接続の両方に当てはまります。ただし、専用永続的ソケット接続の場合には、 接続を確立するために使用された clientID と同じ clientID が指定された対話によってのみ、 そのソケット接続を使用することができます。ソケット接続の数は、専用永続的ソケット接続で対話のために新規 clientID が使用されるごとに増加していきます。

最大接続プロパティーをゼロ以外の値に設定していて、接続タイムアウト・プロパティーもゼロ以外の値に設定してある場合、最大接続数に達し、しかもすべての接続が使用中になっていると、アプリケーションは、接続タイムアウトで指定された秒数が経過した後で、ConnectionWaitTimeoutException を受け取ります。これは、WebSphere® Application Server の 標準動作です。 ConnectionWaitTimeoutException は、専用永続的ソケットにも共用可能な永続的ソケットにも適用されます。

ただし、最大接続数に達し、永続的ソケット接続のいずれかが現在 使用中ではない場合は、WebSphere Application Server は、新規の永続的ソケット接続を作成する要求に応答するために、 そのソケットを切断します。これも、WebSphere Application Server の標準動作であり、専用永続的ソケットと共用可能な永続的ソケットの両方に 適用されます。

関連概念
SYNC_SEND プログラミング・モデル
SYNC_SEND_RECEIVE プログラミング・モデル
非同期出力の検索
関連タスク
出力メッセージ・カウントの表示
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005.