Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU - |
目次 索引 |
ここでは、マルチスレッド環境で動作する応用プログラムを開発する方法について説明します。
マルチスレッド環境の概要、マルチスレッド環境で動作する応用プログラムの作成の流れ、およびセションとスレッドの関係については、“マルチスレッド環境におけるデータ操作”を参照してください。
マルチスレッド環境で動作する応用プログラムの例を以下に示します。以下の例におけるスレッドは、すでに他の応用プログラムで起動されているものとします。
@OPTIONS ALPHAL(WORD) IDENTIFICATION DIVISION. PROGRAM-ID. sub_threadB. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 SQLSTATE PIC X(5). …… (1) 01 SQLMSG PIC X(255). EXEC SQL END DECLARE SECTION END-EXEC. 01 ret PIC S9(4) BINARY. LINKAGE SECTION. 01 ses_id PIC S9(9) COMP-5. PROCEDURE DIVISION USING ses_id. INITIALIZE SQLSTATE. INITIALIZE SQLMSG. CALL "SQLThrStartID" USING BY VALUE ses_id RETURNING ret. …… (2) IF ret = 0 THEN DISPLAY "SQLThrStartIDエラー" EXIT PROGRAM END-IF. EXEC SQL WHENEVER SQLERROR GO TO :CONNECT_ERROR END-EXEC. EXEC SQL CONNECT TO 'SI_DB333' …… (3) END-EXEC. DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE. DISPLAY "CONNECT(SQLMSG) = " SQLMSG. EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC. EXEC SQL INSERT INTO SI_SCHM1.SI_TABLE2 …… (4) VALUES(1,1,1,1,1,1,1,1,1,1,'R','DD','BBBB') END-EXEC. DISPLAY "INSERT(SQLSTATE) = " SQLSTATE. DISPLAY "INSERT(SQLMSG) = " SQLMSG. EXEC SQL COMMIT WORK …… (5) END-EXEC. DISPLAY "COMMIT(SQLSTATE) = " SQLSTATE. DISPLAY "COMMIT(SQLMSG) = " SQLMSG. EXEC SQL DISCONNECT ALL …… (6) END-EXEC. DISPLAY "DISCONNECT(SQLSTATE) = " SQLSTATE. DISPLAY "DISCONNECT(SQLMSG) = " SQLMSG. CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret. …… (7) IF ret = 0 THEN DISPLAY "SQLThrEndIDエラー" EXIT PROGRAM END-IF. EXIT PROGRAM. CONNECT_ERROR. …… (8) DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE. DISPLAY "CONNECT(SQLMSG) = " SQLMSG. CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret. EXIT PROGRAM. |
(1) SQLSTATEとSQLMSGを宣言します。
(2) セションを開始します。セションを開始する関数を実行することにより、セションとスレッド(sub_threadB)が対応付けられます。
(3) サーバとコネクションを接続します。
(4) INSERT文を実行して値を挿入します。
(5) トランザクションをCOMMIT文により終了します。
(6) サーバとのコネクションを切断します。
(7) セションを終了します。
(8) サーバとのコネクションに失敗した場合は、セションを終了します。
応用プログラムを作成するには、複数スレッド間の排他などを考慮して、実行したSQL文によるデータベースの検索および更新結果が正しくなるようにしなければなりません。以下に注意点を示します。
1つのセションに対して複数のスレッドが存在する場合、各スレッドが同時に動作しないようにしてください。セマフォを利用するなどして排他制御を考慮し、応用プログラムの作成者が責任をもって対処してください。
セションを破棄する前には、必ずDISCONNECT文を実行してください。
マルチスレッド環境で応用プログラムを実行する場合も、トランザクション単位にSymfoware/RDBで排他制御を行います。また、カーソル操作についても、カーソルをオープンした後に、単一コネクションにおける複数のスレッド間では同じカーソルを操作できますが、複数のコネクションにまたがって同じカーソルを操作することはできません。
目次 索引 |