コミット・モードとは、IMS によって 実行されるコミット処理のタイプのことをいいます。 Java™ クライアントは、トランザクション要求を IMS に送信する際に使用すべきコミット・モード・プロトコルを指定します。IMS Connect および IMS によって サポートされているコミット・モード処理には、2 つのタイプがあります。 コミット・モード 0 (コミット後に送信) では、IMS は IMS データベースの 変更をコミットしてから出力をクライアントに送信し、コミット・モード 1 (送信後にコミット) では、IMS は、 クライアントに出力を送信してからデータベースの変更をコミットします。
コミット・モード・プロトコルに関連して、IMS Connect および IMS は、3 つの 同期レベル、NONE、CONFIRM、および SYNCPT もサポートしています。 コミット・モード 1 では、3 つの同期レベルのすべてが使用可能です。 コミット・モード 0 では、CONFIRM のみ使用可能です。
IMS Connector for Java は、IMS Connect と通信するときに、自動的に同期レベルを設定しますが、同期レベルは、NONE または CONFIRM に設定された setSyncLevel(int) メソッドを使用して、Java クライアントによって 明示的に設定することができます。現在、Java クライアントは 同期レベルを SYNCPT に明示的に設定することはできません。 コミット・モード 1 の対話では、デフォルトの同期レベルは NONE です。 同期レベルを設定せずに対話 verb を SYNC_SEND_RECEIVE に設定するだけの場合は、 これで十分です。コミット・モード 0 の対話では、デフォルトの同期レベルは CONFIRM です。 同期レベルを設定せずに、対話 verb を SYNC_SEND_RECEIVE に設定して、 コミット・モードを 0 に設定するだけの場合は、これで十分です。 0 または 1 以外の数値が setSyncLevel(int) メソッドに渡されると、エラーがスローされます。
この組み合わせは、非トランザクション対話で使用されます。 非会話型アプリケーションでは、SYNC_SEND_RECEIVE 対話を使用してください。 会話型アプリケーションでは、SYNC_SEND_RECEIVE またはオプションで SYNC_END_CONVERSATION 対話を使用してください。
この組み合わせは、非トランザクション対話で使用されます。 非会話型アプリケーションでは、SYNC_SEND_RECEIVE 対話を使用してください。 会話型アプリケーションでは、SYNC_SEND_RECEIVE またはオプションで SYNC_END_CONVERSATION 対話を使用してください。
この組み合わせは、IMS を 使用した 2 フェーズ・コミット処理に参加する際に、IMS Connector for Java によって使用されます。 詳しくは、『2 フェーズ・コミットを使用するグローバル・トランザクション・サポート』を参照してください。
この組み合わせは、 非トランザクションの SYNC_SEND_RECEIVE、SYNC_SEND、SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、 および SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を行うために、IMS Connector for Java によって使用されます。
注: コミット・モード 0 は、TCP/IP 接続で実行されている非会話 アプリケーションの場合にのみサポートされます。
Java クライアントが、 コミット・モード 1 で同期レベル CONFIRM を指定したトランザクション要求を 送信すると、IMS Connector for Java は IMS Connect を介してその要求を IMS に渡します。 IMS は このトランザクションを処理し、IMS Connector for Java を 介して出力メッセージを Java クライアントに 送信することを試みます。 IMS Connector for Java は、Java クライアントの 代わりに、IMS に 肯定応答を送信します。IMS は、 変更がコミットされたかどうかを示す戻りコードを IMS Connector for Java に 送信します。コミットされた場合は、IMS Connector for Java は Java クライアントに 出力を送信します。コミットされなかった場合は、Java クライアントは 例外を受け取ります。このプロセス中にエラーが発生する場合は、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 からの 応答を待つ時間の長さです。検索要求用に実行タイムアウト値を指定しない場合は、 デフォルトの実行タイムアウト値が使用されます。デフォルトのタイムアウト値は、IMS Connect 構成メンバーの TIMEOUT の値です。 ユーザーは、実行タイムアウト値で試行して、すべてのタイプの対話について出力メッセージが戻されることを 確認する必要があります。
IMS TM リソース・アダプターによって作成されるソケット接続は、すべて永続的ソケット接続です。 つまり、IMS Connector for Java と IMS Connect の間の同一ソケット接続を、IMS Connect との複数の対話で連続して再使用することができます。 対話が行われている場合には、ある対話が終わるとソケット接続がクローズし、 次の対話のために接続が再オープンする、ということはありません。 永続的ソケットには、共用可能と専用の 2 つのタイプがあります。
共用可能永続的ソケットは、コミット・モード 1 またはコミット・モード 0 の対話を実行する、複数のアプリケーションによって共用 (連続再利用) できます。 共用可能永続的ソケットでコミット・モード 0 対話を実行するアプリケーションの場合、IMS リソース・アダプターは、 「HWS」という接頭部が付いた clientID を自動的に生成します。 この clientID は、ソケット接続とそれに関連した OTMA TPIPE を表し、また識別します。 このタイプのソケットの場合には、IMS リソース・アダプターによって 生成された clientID のみを使用することができます。 ユーザー指定 clientID は、共用可能永続的ソケット・サポートでは許可されません。
共用可能永続的ソケットでコミット・モード 0 対話を実行する Java クライアントに送信できなかった出力メッセージは、後で検索するためにキューに入れることができます。 また、別のコミット・モード 0 対話を呼び出すプログラム間の切り替えを引き起こす、 共用可能永続的ソケットで実行されるコミット・モード 1 対話またはコミット・モード 0 対話の結果として作成される 2 次出力は、後で検索するために再キューイングすることができます。 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT、および SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話は、共用可能永続的ソケットでサポートされます。 代替クライアント ID を使用しない場合、IMS OTMA 非同期保留キューまたは TPIPE でキューに入れられた、配信されなかった 出力メッセージを検索するには、対話 Verb を同じクライアント・アプリケーション内で 呼び出す必要があります。これは、共用可能なソケット接続を識別する同じ生成された クライアント ID および関連する OTMA TPIPE を使用する必要があるためです。
共用可能永続的ソケットでは、 配信されなかった出力メッセージを処理する方法が複数あります。 非同期出力メッセージが存在する OTMA 保留キューの名前を IMSInteractionSpec オブジェクトの代替クライアント ID プロパティー値として指定することによって、配信不能の出力を検索することができます。あるいは、配信されなかった出力をパージすることもできます。配信されなかった出力メッセージをパージするには、必ず 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 構成ファイルで値が指定されていない場合は、デフォルト値の HWS$DEF が使用されます。
専用永続的ソケットとは、ソケット接続が特定の 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 対話が失敗した結果、ALTPCB (代替プログラム連絡ブロック) への挿入を 実行した IMS アプリケーションから、 あるいは共用可能な接続ファクトリーで実行されたトランザクションの出力の転送から、IMS OTMA 非同期出力キューに入れられたメッセージを、クライアント・アプリケーションが 検索できるようになります。 このようなメッセージを検索するには、クライアント・アプリケーションは、 非同期出力メッセージがキューイングされている TPIPE を表す clientID を提供する必要があります。 専用永続的ソケットで対話を行ったときに配信されなかった出力メッセージは、 転送またはパージすることはできません。
CM0Dedicated プロパティーの値が TRUE に設定されていると、接続ファクトリーが専用永続的ソケット接続を作成するようになります。
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.
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 の標準動作であり、専用永続的ソケットと共用可能永続的ソケットの両方に 適用されます。