프로그램 작성

본 장에서는 데이터를 저장하는 구조체와 함수에 대해서 기술한다.

1. 데이터 저장

다음은 데이터를 저장하기 위한 COBOL 프로그램의 목록이다.

프로그램명 설명

TPSTATUS.cbl

ATMI 루틴을 위해서 정의되어야 한다.

TPTYPE.cbl

사용자 데이터를 주고받을 때 사용한다.

TPSVCDEF.cbl

Tmax 시스템과 메시지를 주고받을 때 사용한다.

TPINFDEF.cbl

Tmax 시스템과 연결하기 위한 TPINITIALIZE()에서 사용한다.

TPSVCRET.cbl

TPRETURN()에서 사용되며, 서비스 수행 상태를 나타낸다.

TPTRXDEF.cbl

트랜잭션 타임아웃을 설정하기 위해서 TXBEGIN()에서 사용한다.

TPCMTDEF.cbl

Commit 레벨 특성을 설정하기 위해서 TPSCMT()에서 사용한다.

TPAUTDEF.cbl

인증(Authentication)이 필요할 때 TPCHKAUTH()에서 사용한다.

TPPRIDEF.cbl

메시지 우선 순위를 조정하는 TPSPRIO()와 TPGPRIO()에서 사용한다.

TPTRXLEV.cbl

트랜잭션 레벨을 설정하는 TPGETLEV()에서 사용한다.

TPBCTDEF.cbl

비요청 메시지를 보내는 TPNOTIFY()와 TPBROADCAST()에서 사용한다.

FDLINFO.cbl

FDL 버퍼를 운영하는 FINIT(), FVSTOF(), FVFTOS()에서 사용한다.

TPEVTDEF.cbl

TPPOST(), TPSUBSCRIBE()와 TPUNSUBSCRIBE() 등의 비요청 메시지에 대한 이벤트 관리에 사용한다.

TXSTATUS.cbl

TX 루틴에 의해서 반환 코드를 관리하기 위해 사용한다.

TXINFDEF.cbl

TXINFORM을 호출했을 때 결과가 저장되는 데이터 구조체이다.

1.1. TPSTATUS

ATMI 루틴을 위해서 정의되어야 하고, 아래의 반환값들이 사용한다.

***************************************
* TPSTATUS.cbl
***************************************
05 TP-STATUS            PICS9(9) COMP-5.
88 TPOK                 VALUE 0.
88 TPEABORT             VALUE 1.
88 TPEBADDESC           VALUE 2.
88 TPEBLOCK             VALUE 3.
88 TPEINVAL             VALUE 4.
88 TPELIMIT             VALUE 5.
88 TPENOENT             VALUE 6.
88 TPEOS                VALUE 7.
88 TPEPERM              VALUE 8.
88 TPEPROTO             VALUE 9.
88 TPESVCERR            VALUE 10.
88 TPESVCFAIL           VALUE 11.
88 TPESYSTEM            VALUE 12
88 TPETIME              VALUE 13.
88 TPETRAN              VALUE 14.
88 TPEGOTSIG            VALUE 15.
88 TPERMERR             VALUE 16.
88 TPEITYPE             VALUE 17.
88 TPEOTYPE             VALUE 18.
88 TPERELEASE           VALUE 19.
88 TPEHAZARD            VALUE 20.
88 TPEHEURISTIC         VALUE 21.
88 TPEEVENT             VALUE 22.
88 TPEMATCH             VALUE 23.
88 TPEMAXVAL            VALUE 24.
05 TPEVENT              PICS9(9) COMP-5.
88 TPEV-NOEVENT         VALUE 0.
88 TPEV-DISCONIMM       VALUE 1.
88 TPEV-SENDONLY        VALUE 2.
88 TPEV-SVCERR          VALUE 3.
88 TPEV-SVCFAIL         VALUE 4.
88 TPEV-SVCSUCC         VALUE 5.
05 TPSVCTIMOUT          PICS9(9) COMP-5.
88 TPED-NOEVENT         VALUE 0.
88 TPEV-SVCTIMEOUT      VALUE 1.
88 TPEV-TERM            VALUE 2.
05 APPL-RETURN-CODE     PICS9(9) COMP-5.

1.2. TPTYPE

사용자 데이터를 주고받을 때 사용한다. REC-TYPE은 보내는 데이터 타입을 지시한다. LEN은 주고받는 데이터의 길이를 나타낸다.

***************************************
* TPTYPE.cbl
***************************************
05 REC-TYPE             PIC X(8).
88 X-OCTET              VALUE "X_OCTET".
88 X-COMMON             VALUE "X_COMMON".
05 SUB-TYPE             PIC    X(16).
05 LEN                  PIC    S9(9) COMP-5.
88 NO-LENGTH            VALUE 0.
05 TPTYPE-STATUS        PICS 9(9) COMP-5.
88 TPTYPEOK             VALUE 0.
88 TPTRUNCATE           VALUE 1.

1.3. TPSVCDEF

Tmax 시스템과 메시지를 주고받을 때 사용한다.

***************************************
* TPSVCDEF.cbl
***************************************
05 COMM-HANDLE          PIC S9(9) COMP-5.
05 TPBLOCK-FLAG         PIC S9(9) COMP-5.
88 TPBLOCK              VALUE 0.
88 TPNOBLOCK            VALUE 1.
05 TPTRAN-FLAG          PIC S9(9) COMP-5.
88 TPTRAN               VALUE 0.
88 TPNOTRAN             VALUE 1.
05 TPREPLY-FLAG         PIC S9(9) COMP-5.
88 TPREPLY              VALUE 0.
88 TPNOREPLY            VALUE 1.
05 TPACK-FLAG           PIC S9(9) COMP-5 REDEFINES TPREPLY-FLAG.
88 TPNOACK              VALUE 0.
88 TPACK                VALUE 1.
05 TPTIME-FLAG          PIC S9(9) COMP-5.
88 TPTIME               VALUE 0.
88 TPNOTIME             VALUE 1.
05 TPSIGRSTRT-FLAG      PIC S9(9) COMP-5.
88 TPNOSIGRSTRT         VALUE 0.
88 TPSIGRSTRT           VALUE 1.
05 TPGETANY-FLAG        PIC S9(9) COMP-5.
88 TPGETHANDLE          VALUE 0.
88 TPGETANY             VALUE 1.
05 TPSENDRECV-FLAG      PIC S9(9) COMP-5.
88 TPSENDONLY           VALUE 0.
88 TPRECVONLY           VALUE 1.
05 TPNOCHANGE-FLAG      PIC S9(9) COMP-5.
88 TPCHANGE             VALUE 0.
88 TPNOCHANGE           VALUE 1.
05 TPSERVICETYPE-FLAG   PIC S9(9) COMP-5.
88 TPREQRSP             VALUE IS 0.
88 TPCONV               VALUE IS 1.
*
05 APPKEY               PIC S9(9) COMP-5.
05 CLIENTID             OCCURS 4 TIMES PIC S9(9) COMP-5.
05 SERVICE-NAME         PIC X(15).

1.4. TPINFDEF

Tmax 시스템과 연결하기 위한 TPINITIALIZE()에서 사용한다.

***************************************
* TPINFDEF.cbl
***************************************
05 USRNAME                  PIC X(30).
05 CLTNAME                  PIC X(30).
05 PASSWD                   PIC X(30).
05 GRPNAME                  PIC X(30).
05 NOTIFICATION-FLAG        PIC S9(9) COMP-5.
88 TPU-SIG                  VALUE 1.
88 TPU-DIP                  VALUE 2.
88 TPU-IGN                  VALUE 3.
05 ACCESS-FLAG              PIC S9(9) COMP-5.
88 TPSA-FASTPATH            VALUE 1.
88 TPSA-PROTECTED           VALUE 2.
05 DATALEN PICS9(9)         COMP-5.

1.5. TPSVCRET

TPRETURN()에서 사용되며, 서비스 수행 상태를 나타낸다.

***************************************
* TPSVCRET.cbl
***************************************
05 TP-RETURN-VAL         PIC S9(9) COMP-5.
88 TPSUCCESS             VALUE 0.
88 TPFAIL                VALUE 1.
88 TPEXIT                VALUE 2.
05 APPL-CODE             PIC S9(9) COMP-5.

1.6. TPTRXDEF

트랜잭션 타임아웃을 설정하기 위해서 TXBEGIN()에서 사용한다.

***************************************
* TPTRXDEF.cbl
***************************************
05 T-OUT PICS9(9)     COMP-5 VALUE IS0.
05 TRANID             OCCURS 6 TIMES PICS9(9) COMP-5.

1.7. TPCMTDEF

Commit 레벨 특성을 설정하기 위해서 TPSCMT()에서 사용한다.

***************************************
* TPCMTDEF.cbl
***************************************
05 CMT-FLAG                 PIC S9(9) COMP-5.
88 TP-CMT-LOGGED            VALUE 1.
88 TP-CMT-COMPLETE          VALUE 2.
05 PREV-CMT-FLAG            PIC S9(9) COMP-5.
88 PREV-TP-CMT-LOGGED       VALUE 1.
88 PREV-TP-CMT-COMPLETE     VALUE 2.

1.8. TPAUTDEF

인증(Authentication)이 필요할 때 TPCHKAUTH()에서 사용한다.

***************************************
* TPAUTDEF.cbl
***************************************
05 AUTH-FLAG             PIC S9(9) COMP-5.
88 TPNOAUTH              VALUE 0.
88 TPSYSAUTH             VALUE 1.
88 TPAPPAUTH             VALUE 2.

1.9. TPPRIDEF

메시지 우선 순위를 조정하는 TPSPRIO()와 TPGPRIO()에서 사용한다.

***************************************
* TPPRIDEF.cbl
***************************************
05 PRIORITY            PIC S9(9) COMP-5.
05 PRIO-FLAG           PIC S9(9) COMP-5.
88 TPABSOLUTE          VALUE 0.
88 TPRELATIVE          VALUE 1.

1.10. TPTRXLEV

트랜잭션 레벨을 설정하는 TPGETLEV()에서 사용한다.

***************************************
* TPTRXLEV.cbl
***************************************
05 TPTRXLEV-FLAG         PIC S9(9) COMP-5.
88 TP-NOT-IN-TRAN        VALUE 0.
88 TP-IN-TRAN            VALUE 1.

1.11. TPBCTDEF

비요청 메시지를 보내는 TPNOTIFY()와 TPBROADCAST()에서 사용한다.

***************************************
* TPBCTDEF.cbl
***************************************
05 TPBLOCK-FLAG         PIC S9(9) COMP-5.
88 TPBLOCK              VALUE 0.
88 TPNOBLOCK            VALUE 1.
05 TPTIME-FLAG          PIC S9(9) COMP-5.
88 TPTIME               VALUE 0.
88 TPNOTIME             VALUE 1.
05 TPSIGRSTRT-FLAG      PIC S9(9) COMP-5.
88 TPNOSIGRSTRT         VALUE 0.
88 TPSIGRSTRT           VALUE 1.
05 LMID                 PIC X(30).
05 USERNAME             PIC X(30).
05 CLTNAME              PIC X(30).

1.12. FDL-INFO

FDL 버퍼를 운영하는 FINIT(), FVSTOF(), FVFTOS()에서 사용한다.

***************************************
* FDLINFO.cbl
***************************************
05 FDL-STATUS          PIC S9(9) COMP-5.
88 FOK                 VALUE 0.
88 FALIGNERR           VALUE 1.
88 FNOTFLD             VALUE 2.
88 FNOSPACE            VALUE 3.
88 FNOTPRES            VALUE 4.
88 FBADFLD             VALUE 5.
88 FTYPERR             VALUE 6.
88 FEUNIX              VALUE 7.
88 FBADNAME            VALUE 8.
88 FMALLOC             VALUE 9.
88 FSYNTAX             VALUE 10.
88 FFTOPEN             VALUE 11.
88 FFTSYNTAX           VALUE 12
88 FEINVAL             VALUE 13.
88 FBADTBL             VALUE 14.
88 FBADVIEW            VALUE 15.
88 FVFSYNTAX           VALUE 16.
88 FVFOPEN             VALUE 17.
88 FBADACM             VALUE 18.
88 FNOCNAME            VALUE 19.
*
05 FDL-LENGTH          PIC S9(9) COMP-5.
*
05 FDL-MODE            PIC S9(9) COMP-5.
88 FUPDATE             VALUE 1.
88 FCONCAT             VALUE 2.
88 FJOIN               VALUE 3.
88 FOJOIN              VALUE 4.
*
05 VIEWNAME            PIC X(33).

1.13. TPEVTDEF

TPPOST(), TPSUBSCRIBE()와 TPUNSUBSCRIBE() 등의 비요청 메시지에 대한 이벤트 관리에 사용한다.

***************************************
* TPEVTDEF.cbl
***************************************
05 TPBLOCK-FLAG          PIC S9(9) COMP-5.
88 TPBLOCK               VALUE 0.
88 TPNOBLOCK             VALUE 1.
05 TPTRAN-FLAG           PIC S9(9) COMP-5.
88 TPTRAN                VALUE 0.
88 TPNOTRAN              VALUE 1.
05 TPREPLY-FLAG          PIC S9(9) COMP-5.
88 TPREPLY               VALUE 0.
88 TPNOREPLY             VALUE 1.
05 TPTIME-FLAG           PIC S9(9) COMP-5.
88 TPTIME                VALUE 0.
88 TPNOTIME              VALUE 1.
05 TPSIGRSTRT-FLAG       PIC S9(9) COMP-5.
88 TPNOSIGRSTRT          VALUE 0.
88 TPSIGRSTRT            VALUE 1.
05 TPEV-METHOD-FLAG      PIC S9(9) COMP-5.
88 TPEVNOTIFY            VALUE 0.
88 TPEVSERVICE           VALUE 1.
88 TPEVQUEUE             VALUE 2.
05 TPEV-PERSIST-FLAG PIC S9(9) COMP-5.
88 TPEVNOPERSIST         VALUE 0.
88 TPEVPERSIST           VALUE 1.
05 TPEV-TRAN-FLAG        PIC S9(9) COMP-5.
88 TPEVNOTRAN            VALUE 0.
88 TPEVTRAN              VALUE 1
*
05 EVENT-COUNT           PIC S9(9) COMP-5.
05 SUBSCRIPTION-HANDLE   PIC S9(9) COMP-5.
05 NAME-1                PIC X(31).
05 NAME-2                PIC X(31).
05 EVENT-NAME            PIC X(31).
05 EVENT-EXPR            PIC X(255).
05 EVENT-FILTER          PIC X(255).

1.14. TXSTATUS

TX 루틴에 의해서 반환 코드를 관리하기 위해 사용한다.

***************************************
* TXSTATUS.cbl
***************************************
05 TX-STATUS             PIC S9(9) COMP-5.
88 TX-NOT-SUPPORTED      VALUE 1.
* Normal execution
88 TX-OK                 VALUE 0.
* Normal execution
88 TX-OUTSIDE            VALUE -1.
* Application is in an RM local transaction
88 TX-ROLLBACK           VALUE -2.
* Transaction was rolled back
88 TX-MIXED              VALUE -3.
* Transaction was partially committed and partially
* rolled back
88 TX-HAZARD             VALUE -4.
* Transaction may have been partially committed and
* partially rolled back
88 TX-PROTOCOL-ERROR VALUE -5.
* Routine invoked in an improper context
88 TX-ERROR             VALUE -6.
* Transient error
88 TX-FAIL              VALUE -7.
* Fatal error
88 TX-EINVAL            VALUE -8.
* Invalid arguments were given
88 TX-COMMITTED         VALUE -9.
* The transaction was heuristically committed
88 TX-NO-BEGIN          VALUE -100.
* Transaction committed plus new transaction could not
* be started
88 TX-ROLLBACK-NO-BEGIN VALUE -102.
* Transaction rollback plus new transaction could not
* be started
88 TX-MIXED-NO-BEGIN    VALUE -103.
* Mixed plus new transaction could not be started
88 TX-HAZARD-NO-BEGIN   VALUE -104.
* Hazard plus new transaction could not be started.
88 TX-COMMITTED-NO-BEGIN VALUE -109.
* Heuristically committed plus transaction could not
* be started

1.15. TXINFDEF

TXINFORM을 호출했을 때 결과가 저장되는 데이터 구조체이다.

***************************************
* TXINFDEF.cbl
***************************************
05 XID-REC.

* XID record
10 FORMAT-ID             PIC S9(9) COMP-5.

* A value of -1 in FORMAT-ID means that the XID is null
10 GTRID-LENGTH         PIC S9(9) COMP-5.
10 BRANCH-LENGTH         PIC S9(9) COMP-5.
10 XID-DATA             PIC X(128).
05 TRANSACTION-MODE     PIC S9(9) COMP-5.

* Transaction mode settings
88 TX-NOT-IN-TRAN     VALUE 0.
88 TX-IN-TRAN                 VALUE 1.
05 COMMIT-RETURN                 PIC S9(9) COMP-5.

* Commit_return settings
88 TX-COMMIT-COMPLETED         VALUE 0.
88 TX-COMMIT-DECISION-LOGGED VALUE 1.
05 TRANSACTION-CONTROL         PIC S9(9) COMP-5.

* TRANSACTION-CONTROL settings
88 TX-UNCHAINED                 VALUE 0.
88 TX-CHAINED                 VALUE 1.
05 TRANSACTION-TIMEOUT         PIC S9(9) COMP-5.

* Transaction_timeout value
88 NO-TIMEOUT                 VALUE 0.
05 TRANSACTION-STATE             PIC S9(9) COMP-5.

* Transaction_state information
88 TX-ACTIVE                     VALUE 0.
88 TX-TIMEOUT-ROLLBACK-ONLY     VALUE 1.
88 TX-ROLLBACK-ONLY             VALUE 2.

2. 함수

다음은 COBOL 프로그램에서 사용되는 함수 목록이다.

함수명 설명

FINIT

필드 버퍼를 초기화한다.

FVFTOS

필드 버퍼로부터 COBOL 구조체로 데이터를 복사한다.

FVSTOF

C 구조체로부터 필드 버퍼로 데이터를 전송할 때 사용한다.

TP_SLEEP

데이터의 도착을 초 단위로 기다리는 함수로 서버/클라이언트에서 사용한다.

TPACALL

비동기 서비스 요청을 송신한다.

TPCALL

동기형 서비스 요청을 송수신한다.

TPCANCEL

응답을 취소한다.

TPFORWARD

서비스 요청을 또 다른 서비스 루틴으로 넘겨준다.

TPGETLEV

트랜잭션 모드에 있는지를 확인한다.

TPGETRPLY

비동기적으로 요청한 서비스에 대한 응답을 수신한다.

TPRETURN

Tmax 서비스를 종료한다.

TPSVCSTART

Tmax 서비스를 시작한다.

TPSVRDONE

서버 프로세스를 종료한다.

TPSVRINIT

Tmax 서버를 초기화한다.

TXBEGIN

전역 트랜잭션을 시작한다.

TXCOMMIT

전역 트랜잭션을 Commit한다.

TXINFORM

전역 트랜잭션 정보를 반환한다.

TXROLLBACK

전역 트랜잭션을 Rollback한다.

TXSETCOMMITRET

commit-return의 특성을 설정한다.

TXSETTIMEOUT

transaction-timeout 특성을 설정한다.

TXSETTRANCTL

transaction-control 특성을 설정한다.

2.1. FINIT

필드 버퍼를 초기화하는 함수이다.

  • 사용 방법

    01 FDL-BUFFER.
    05 FDL-ALIGN     PIC S9(9) USAGE IS COMP.
    05 FDL-DATA      PIC X(사용자지정 길이).
    01 FDL-REC
    COPY FDLINFO.
    
    CALL "FINIT"     USING FDL-BUFFER FDL-REC.
    파라미터 설명

    FDL-BUFFER

    필드 버퍼를 위해서 사용되는 레코드이고, 반드시 FDL 버퍼를 위해서는 4Byte가 할당되어야 한다.

    FDL-LENGTH IN FDL-REC

    FDL 버퍼로 초기화하는 레코드의 길이다.

  • 반환값

    수행 결과 설명

    성공

    필드 버퍼를 초기화하는데 성공하면 FDL-STATUS IN FDL-REC가 FOK로 설정된다.

    실패

    FDL-STATUS in FDL-REC가 0이 아닌 값이 설정된다.

  • 오류

    함수의 수행에 실패하면 다음의 값이 설정된다.

    에러 코드 설명

    [FNOSPACE]

    필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우이다.

  • 참조

2.2. FVFTOS

필드 버퍼로부터 COBOL 구조체로 데이터를 복사하는 함수로 필드 버퍼로부터 COBOL 레코드에 데이터를 넣을 때 사용한다.

  • 사용 방법

    01 DATA-REC.
    COPY User data.
    01 FDL-BUFFER.
    05 FDL-ALIGN PIC S9(9) USAGE IS COMP.
    05 FDL-DATA PIC X(applen).
    01 FDL-REC COPY FDLINFO.
    
    CALL "FVFTOS" USING FDL-BUFFER DATA-REC FDL-REC.
    CALL "FVFTOS32" USING FDL-BUFFER DATA-REC FDL-REC.
    파라미터 설명

    FDL-BUFFER

    FINIT에 의해서 초기화된 필드 버퍼의 포인터이다.

    DATA-REC

    C 구조체의 포인터이다.

    VIEWNAME IN FDL-REC

    COBOL 레코드를 설명하는 뷰 이름이다.

    필드들은 필드 버퍼로부터 VIEWNAME에 있는 element descriptions을 기초로 한 구조체에 복사된다. 필드 버퍼의 필드가 COBOL 레코드에 상대되는 필드가 없으면 무시된다.

    COBOL 레코드에 있는 특정한 element가 필드 버퍼에 상대되는 필드가 없는 경우에는 NULL 값이 element에 복사된다. COBOL 레코드에 Array 형태로 저장하기 위해서는 레코드 element는 OCCURS로 정의되어야 한다. 버퍼가 레코드 element보다 적은 갯수의 필드갯수를 가진다면 남은 element는 뷰 파일에서 지정한 기본값으로 채워진다. 반대로 버퍼가 레코드 element보다 큰 갯수의 필드를 가진다면, 나머지 occurrences는 무시된다.

  • 반환값

    수행 결과 설명

    성공

    FDL-STATUS IN FDL-REC는 FOK로 설정된다.

    실패

    FDL-STATUS에 0이 아닌 값이 설정된다.

  • 오류

    함수의 수행에 실패하면 다음의 값이 설정된다.

    에러 코드 설명

    [FBENOENT]

    지정한 필드키가 FDLFILE에 정의되어 있지 않으므로 필드 버퍼에서 사용할 수 없는 경우에 설정된다.

    [FBENOSPACE]

    필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우에 설정된다.

    [FEINVAL]

    입력 파라미터로 지정한 값들 중에서 유효하지 않은 인자가 있는 경우에 설정된다.

    [FBEBADFLD]

    유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 때 설정된다.

    [FBEBADSTRUCT]

    유효하지 않은 구조체가 사용되었다. 일반적으로 Tmax 시스템에서 알아보지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 설정된다.

  • 참조

    FVSTOF

2.3. FVSTOF

C 구조체로부터 필드 버퍼로 데이터를 전송할 때 사용한다.

  • 사용 방법

    01 DATA-REC.
    COPY User data.
    01 FDL-BUFFER.
    05 FDL-ALIGN PIC S9(9) USAGE IS COMP.
    05 FDL-DATA PIC X(applen).
    01 FDL-REC
    COPY FDLINFO.
    
    CALL "FVSTOF" USING FDL-BUFFER DATA-REC FDL-REC.
    CALL "FVSTOF32" USING FDL-BUFFER DATA-REC FDL-REC.
    항목 설명

    DATA-REC

    COBOL 레코드이다.

    FDL-BUFFER

    필드 버퍼를 포함하는 레코드이다.

    FDL-REC

    VIEWNAME은 COBOL 레코드를 지정하기 위해서 사용한 뷰 이름이다.

    FDL-MODE IN FDL-REC

    필드 버퍼에 데이터를 넣어주는 방법을 지정한다.

    • FUPDATE

    • FOJOIN

    • FJOIN

    • FCONCAT

    모드는 각각 C 함수의 Fupdate(3), Fojoin(3), Fjoin(3), Fconcat과 같은 방식으로 동작한다.

  • 반환값

    수행 결과 설명

    성공

    FDL-STATUS IN FDL-REC에는 FOK가 설정된다.

    실패

    FDL-STATUS에는 0이 아닌 값이 설정된다.

  • 오류

    함수의 수행에 실패하면 다음의 값이 설정된다.

    에러 코드 설명

    [FBENOENT]

    지정한 필드키가 FDLFILE에 정의되어 있지 않으므로 필드 버퍼에서 사용할 수 없는 경우에 설정된다.

    [FBENOSPACE]

    필드 버퍼 데이터를 저장하거나 복사할 공간이 부족할 경우에 설정된다.

    [FEINVAL]

    입력 파라미터로 지정한 값들 중에서 유효하지 않은 인자가 있는 경우에 설정된다.

    [FBEBADFLD]

    유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 때 설정된다.

    [FBEBADSTRUCT]

    유효하지 않은 구조체가 사용되었다. 일반적으로 Tmax 시스템에서 알아보지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 설정된다.

    [FBEMALLOC]

    시스템 에러로 필드 버퍼를 메모리에 할당하는 것을 실패할 경우에 설정된다.

  • 참조

    FVFTOS

2.4. TP_SLEEP

데이터의 도착을 초 단위로 기다리는 함수로 서버/클라이언트에서 사용한다. 최대 sec 시간 동안 sleep하다가 그 안에 데이터가 도착하면 즉시 반환한다.

  • 사용 방법

    int TP_SLEEP (int sec, cbl_tpstatus_t *status)
    파라미터 설명

    sec

    기다리려는 시간을 초 단위인 양수값을 입력해야 한다.

  • 반환값

    sec 시간까지 데이터가 도착하지 않으면 0을 반환하고, 데이터가 도착하면 양수를 반환한다. 에러가 발생하면 -1을 반환하고, tperrno 변수 값이 설정된다.

  • 오류

    다음 상황에서 tp_sleep()는 실패하고 tperrno에 아래 값 중 하나가 설정된다.

    에러 코드 설명

    [TPESYSTEM]

    Tmax 시스템에 에러가 발생하였다. 자세한 정보는 로그 파일에 기록된다.

    [TPEOS]

    운영체제에 에러가 발생하였다.

  • 참조

    TPACALL, TPGETRPLY

2.5. TPACALL

비동기 서비스 요청 송신 함수이다. TPACALL 함수는 SERVICE-NAME IN TPSVCDEF-REC에 명명된 서비스에게 서비스 요청메시지를 송신한다. TPACALL 함수는 비동기 통신으로 메시지를 송신한 후에 결과를 받을 때까지 기다리지 않고 바로 반환된다. 결과는 나중에 TPGETRPLY 함수를 이용하여 응답을 받을 수도 있고, 또는 TPCANCEL 함수를 이용하여 응답을 취소할 수 있다.

서비스 요청이 트랜잭션 모드에서 송신되었다면, 각 요청에 대한 응답들은 반드시 수신되어야 한다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 DATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    
    CALL "TPACALL" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
    • DATA-REC는 보내는 데이터이고, LEN IN TPTYPE-REC은 DATA-REC에 저장하여 보내지는 데이터의 길이를 지정한다. DATA-REC이 지정된 길이를 요구하지 않는 타입의 레코드이면, LEN은 무시된다(보통 1이 사용한다).

      REC-TYPE IN TPTYPE-REC가 SPACES이면, DATA-REC와 LEN은 무시되고 데이터 없이 요청된다. REC-TYPE이 STRING이면서 LEN이 0이면, 데이터 없이 요청된다.

      REC-TYPE이 STRING이면서 LEN이 0이면, 데이터 없이 요청된다. DATA-REC의 REC-TYPE과 SUB-TYPE은 SERVICE-NAME이 지원하는 유형들이어야 한다.

    • 다음은 TPSVCDEF-REC에 설정할 수 있는 값이다.

      설정값 설명

      TPBLOCK

      플래그없이 tpacall() 함수가 사용된 경우 svc에 호출된 서비스가 없거나 잘못된 결과가 반환되었어도 정상적인 결과가 반환된다. tpgetrply() 함수를 호출할 때 에러가 반환된다. 플래그를 이용해 tpacall() 함수를 호출할 때 서비스 상태의 정상 여부를 확인할 수 있다.

      TPNOTRAN

      TPACALL 함수 호출자가 트랜잭션 모드 상태에서 이 설정을 이용하여 SERVICE-NAME을 요청하였다면, SERVICE-NAME 서비스는 트랜잭션 모드에서 제외되어 수행된다.

      트랜잭션 모드에서 트랜잭션을 지원하지 않는 SERVICE-NAME를 호출한다면 반드시 이 설정을 이용해야 한다. 트랜잭션 모드 내에서의 TPACALL함수가 호출될 때 TPNOTRAN로 설정되었어도 여전히 트랜잭션 타임아웃(timeout)에 영향을 받는다. TPNOTRAN으로 호출된 서비스가 실패하였을 경우 호출자의 트랜잭션에는 영향을 미치지 않고 TPNOREPLY의 응답을 기다리지 않고 즉시 반환한다. 서비스가 정상적으로 호출되면 TPOK가 반환되고, COMM-HANDLE IN TPSVCDEF-REC에 0이 설정된다.

      함수 호출자가 트랜잭션 모드에 있을 경우에는 반드시 TPNOTRAN와 함께 설정해야만 TPNOREPLY를 사용할 수 있다. TPNOREPLY의 경우 서비스 상태의 정상 여부를 체크하기 위해서는 TPBLOCK 를 함께 설정해야 한다. TPBLOCK를 설정하지 않으면 서비스가 NRDY인 경우에도 에러를 반환하지 않는다.

      TPNOBLOCK

      TPNOBLOCK를 설정한 상태에서 블로킹(blocking) 상황을 만나면 (예를 들어 내부 버퍼가 송신할 메시지들로 가득 찬 경우) 서비스 요청은 실패한다.

      TPNOBLOCK 설정 없이 TPACALL이 호출되면 블로킹(blocking) 상황이 발생하면 함수호출자는 블로킹(blocking) 상황이 풀리거나 타임아웃(트랜잭션 타임아웃 또는 블로킹 타임아웃)이 발생할 때까지 기다리게 된다.

      TPNOTIME

      TPNOTIME는 함수 호출자가 블로킹(blocking) 타임아웃을 무시하고 응답이 수신될 때까지 무한정 기다리겠다는 것을 의미한다. 트랜잭션 타임아웃에서 TPACALL을 한 경우에는 여전히 트랜잭션 타임아웃이 적용된다.

      TPSIGRSTRT

      시그널 (signal) 인터럽트를 수용하고자 할 때 사용한다. 시스템 함수 호출이 방해될 때 시스템 함수 호출이 재실행된다. 이 플래그가 설정되지 않은 상태에서 신호 인터럽트가 발생하였다면 함수는 실패하고 tperrno에 TPGOTSIG가 설정된다.

  • 반환값

    수행 결과 설명

    성공

    TP-STATUS는 TPOK로 설정된다.

    실패

    TP-STATUS는 에러 코드가 설정된다.

  • 오류

    함수의 수행에 실패하면 TP-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TPEINVAL]

    파라미터가 유효하지 않다. 예를 들어 SERVICE-NAME이 SPACES이거나 TPSVCDEF-REC가 비정상이다.

    [TPENOENT]

    SERVICE-NAME의 서비스가 존재하지 않아서 서비스를 요청할 수 없다.

    [TPEITYPE]

    REC-TYPE와 SUB-TYPE의 구성이 지원하지 않는 유형이다.

    [TPELIMIT]

    처리되지 않은 비동기성 서비스 요청 수가 최대 한계에 도달했기 때문에 호출자의 서비스 요청이 송신되지 않았다.

    [TPETRAN]

    SERVICE-NAME는 트랜잭션을 지원하지 않는 서비스이고, 이때 TPNOTRAN이 설정되지 않았다.

    [TPETIME]

    타임아웃이 발생하였다. 함수 호출자가 트랜잭션 모드에 있다면 트랜잭션 타임아웃이 발생한 것이며 트랜잭션은 rollback된다. 그렇지 않다면 TPNOTIME이나 TPNOBLOCK이 모두 설정되지 않은 상황에서 블로킹 타임아웃이 발생한다. 트랜잭션 타임아웃이 발생되면 트랜잭션이 rollback될 때까지 새로운 서비스 요청을 송신한다거나 아직 수신되지 않은 응답을 기다리는일은 모두 [TPETIME] 에러로 실패한다.

    [TPEBLOCK]

    TPNOBLOCK이 설정된 상태에서 블로킹 상황이 발생하였다.

    [TPEGOTSIG]

    TPSIGRSTRT가 설정되지 않은 상태에서 시그널이 수신되었다.

    [TPEPROTO]

    트랜잭션 모드에서의 TPNOREPLY 서비스가 호출되면 TPNOTRAN 플래그를 설정하지 않는 경우 등의 부적절한 상황에서 발생한다.

    [TPESYSTEM]

    Tmax 시스템에 에러가 발생하였다.

    [TPEOS]

    운영체제에 에러가 발생하였다.

  • 참조

    TPCALL, TPCANCEL, TPGETRPLY

2.6. TPCALL

TPCALL은 동기형 서비스에서 요청을 보내고 응답을 기다리는 요청 송수신 함수이다. 이 함수를 호출하는 것은 TPACALL() 호출 후 연속적으로 TPGETRPLY를 호출하는 것과 동일하다. TPCALL은 TPSVCDEF-REC의 SERVICE-NAME으로 서비스 요청을 주고받는다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 ITPTYPE-REC.
    COPY TPTYPE.
    01 IDATA-REC.
    COPY User data.
    01 OTPTYPE-REC.
    COPY TPTYPE.
    01 ODATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    CALL "TPCALL" USING TPSVCDEF-REC ITPTYPE-REC IDATA-REC OTPTYPE-REC
    ODATA-REC TPSTATUS-REC.
    • ITPTYPE-REC에서 IDATA-REC는 보내는 데이터이고, LEN은 보내지는 데이터의 길이를 지정한다. IDATA-REC이 지정된 길이를 요구하지 않는 타입의 레코드이면, LEN은 무시된다(보통 0이 사용한다).

      ITPTYPE-REC의 REC-TYPE이 SPACES이면 IDATA-REC 와 ITPYPE-REC의 LEN은 무시되고 데이터없이 요청된다. ITPTYPE-REC이 STRING이면서 ITPTYPE-REC의 LEN이 0이면 데이터 없이 요청된다.

      ITPTYPE-REC의 REC-TYPE과 SUB-TYPE은 SERVICE-NAME이 지원하는 유형이어야 한다. 응답을 실어서 보내는데 사용될 ODATA-REC와 ODATA-REC에 실어질 데이터의 최대 길이를 고려하여 ODATA-REC의 LEN이 지정되어야 한다. 데이터를 주고받는데 같은 레코드를 사용한다면 ODATA-REC는 IDATA-REC를 REDEFINES해야만 한다.

    • 성공적으로 TPCALL이 수행되면 ODATA-REC에는 OTPTYPE-REC의 LEN만큼의 응답이 수신된다. OTPTYPE-REC의 REC-TYPE과 SUB-TYPE는 각각 응답 type과 sub-type을 포함한다. 응답이 ODAT-REC보다 크면 ODATA-REC 레코드에 맞는 데이터만큼만 포함하게 된다. 응답의 나머지는 버려지고 TPTRUNCATE가 설정된다. 성공적인 수신에서 OTPTYPE-REC의 LEN이 0이면 응답은 데이터 부분을 갖지 않고, ODATA-REC는 데이터가 수신되지 않는다. OTPTYPE-REC의 LEN가 입력값으로 0을 갖는 것은 에러이다.

    • 다음은 TPSVCDEF-REC에 설정할 수 있는 값이다.

      설정값 설명

      TPNOTRAN

      호출자가 트랜잭션 모드 상태에서 이 설정이 이용하여 SERVICE-NAME 서비스를 요청하였다면 트랜잭션 모드에서 제외되어 수행된다.

      트랜잭션 모드에서 트랜잭션을 지원하지 않는 서비스를 호출할 때는 이 설정이 반드시 사용되어야 한다. 트랜잭션 모드내에서 TPNOTRAN을 설정하여 TPCALL을 사용하여도 여전히 트랜잭션 타임아웃의 영향을 받는다. TRNOTRAN으로 호출된 서비스가 실패하였을 경우 호출자의 트랜잭션에는 영향을 미치지 않는다.

      TPNOCHANGE

      일반적으로 수신된 응답 버퍼 ODATA-REC가 가리키는 버퍼의 유형이 다르다면 버퍼 유형은 수신자가 인식할 수 있는 한도내에서 수신된 응답 버퍼 유형으로 변경된다. 응답된 레코드의 type과 sub-type 반드시 REC-TYPE IN OTPTYPE-REC와 SUB-TYPE IN OTPTYPE-REC과 각각 일치해야 한다.

      TPNOCHANGE가 설정된 경우 ODATA-REC에 설정된 유형은 변경되지 않는다.

      TPNOBLOCK

      TPNOBLOCK을 설정한 상태에서 블로킹(blocking) 상황을 만나면(예를 들어 내부버퍼가 송신할 메시지들로 가득한 경우) 서비스 요청은 실패한다.

      TPNOBLOCK 설정없이 호출하면 블로킹(blocking) 상황이 발생하면 함수 호출자는 블로킹(blocking) 상황이 풀리거나 타임아웃(트랜잭션 타이아웃이나 블로킹 타임아웃)이 발생할 때까지 기다리게 된다.

      TPNOTIME

      TPNOTIME은 함수 호출자가 블로킹 타임아웃을 무시하고 응답이 수신될 때까지 무한정 기다리겠다는 것을 의미한다. 트랜잭션 타임아웃 내에서 TPCALL을 한 경우에는 여전히 트랜잭션 타임아웃이 적용된다.

      TPSIGRSTRT

      시그널(signal) 인터럽트를 수용할 때 사용한다. 내부에서 시그널 인터럽트가 발생하여 시스템 함수 호출이 방해될 때 시스템 함수 호출이 재실행된다.

      값이 설정되지 않은 경우 시그널 인터럽트가 발생하였다면 함수는 실패되고 TPSTATUS에 TPGOTSIG가 설정된다.

  • 반환값

    수행 결과 설명

    성공

    TP-STATUS에 TPOK가 설정된다.

    TP-STATUS에 TPOK나 TPESVCFAIL이 설정될 때 TPSTATUS-REC의 APPL-RETURN-CODE는 TPRETURN의 한 부분으로 보내지는 응용 프로그램이 지정한 값을 포함한다. 수신되는 메시지의 크기가 지정된 LEN보다 크면 TPTRUNCATE가 설정되고, 단지 LEN만큼의 데이터만 ODATA-REC에 들어가고 나머지 데이터는 무시된다.

    실패

    TP-STATUS는 에러 코드가 설정된다.

  • 오류

    함수의 수행에 실패하면 TP-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TPEINVAL]

    인수가 유효하지 않다. 예를 들어 SERVICE-NAME이 SPACES이거나 TPSVCDEF-REC가 비정상이다.

    [TPENOENT]

    SERVICE-NAM이라는 서비스가 없어서 서비스를 요청할 수 없다.

    [TPEITYPE]

    REC-TYPE와 SUB-TYPE is SERVICE-NAME이 지원하지 않는 유형이다.

    [TPEOTYPE]

    수신된 응답 버퍼의 유형이나 하위 유형이 호출자가 알지 못하는 유형이다. 플래그가 TPNOCHANGE로 설정되었는데 ODATA-REC의 REC-TYPE과 SUB-TYPE이 수신된 응답 버퍼의 유형 및 하위 유형과 맞지 않는다. 이 경우 OTPTYPE-REC의 ODATA-REC와 LEN이 모두 변경되지 않는다.

    호출자가 트랜잭션 모드에서 서비스를 요청하였다면 그 트랜잭션은 응답이 무시되었기 때문에 rollback된다.

    [TPETRAN]

    SERVICE-NAME은 트랜잭션을 지원하지 않으며 이때 TPNOTRAN이 설정되지 않았다.

    [TPETIME]

    타임아웃이 발생하였다. 함수 호출자가 트랜잭션 모드에 있다면 트랜잭션 타임아웃이 발생하였다. 트랜잭션 모드가 아니고 TPNOTIME과 TPNOBLOCK 어느 것도 지정되지 않았다면 블로킹(blocking) 타임아웃이 발생하였다. 이 두 경우에 OTPTYPE-REC의 ODATA-REC와 LEN 모두 변경되지 않는다.

    트랜잭션 타임아웃이 발생하였다면 새로운 서비스 요청을 송신한다거나 응답을 기다리는 일은 트랜잭션이 rollback될 때까지 [TPETIME] 에러로 실패하게 된다.

    [TPESVCFAIL]

    서비스 요청에 대한 응답을 송신하는 서비스 루틴이 응용 프로그램상의 에러가 발생하여 TPFAIL로 TPRETURN()을 호출하였다.

    서비스 응답이 수신되었다면 ODATA-REC의 내용들을 이용할 수 있다. 트랜잭션 타임아웃이 발생하기 전까지는 트랜잭션이 rollback되기 전에 다른 통신들이 시도될 수 있다. 그러한 통신들은 정상적으로 처리될 수도 있고 또는 실패할 수도 있다. 이들이 제대로 수행되기 위해서는 TPNOTRAN이 설정되어야 한다. 호출자의 트랜잭션 모드에서 수행된 작업들은 트랜잭션이 완료될 때에 모두 rollback된다.

    [TPESVCERR]

    서비스 루틴을 수행 중이거나 TPRETURN 수행 중에 잘못된 인수가 전달된 경우와 같이 에러가 발생하였다. 에러가 발생하면 어떠한 응답 데이터도 반환되지 않고, OTPTYPE-REC의 ODATA-REC와 LEN이 모두 변경되지 않는다.

    Tmax 환경 파일에 서비스별로 SVCTIMEOUT을 설정할 수 있는데 서비스의 수행 시간이 이 시간을 초과하면 서비스는 수행을 멈추고 TPESVCERR를 반환한다.

    [TPEBLOCK]

    TPNOBLOCK이 설정된 상태에서 블로킹(blocking) 상황이 발생하였다.

    [TPEGOTSIG]

    TPSIGRSTRT가 설정되지 않은 상태에서 시그널이 수신되었다.

    [TPEPROTO]

    tpcall()이 부적절한 상황에서 호출되었다.

    [TPESYSTEM]

    Tmax 시스템 에러가 발생하였다. 자세한 정보는 로그 파일에 기록된다.

    [TPEOS]

    운영체제에 에러가 발생하였다.

2.7. TPCANCEL

응답 취소 함수로 TPACALL이 반환한 호출 구별자인 COMM-HANDLE IN TPSVCDEF-REC를 취소한다. 전역 트랜잭션과 관련된 서비스는 취소할 수 없다. 서비스 응답이 성공적으로 취소되면 호출구별자는 무효화됨에 따라 이를 통하여 받은 응답들도 모두 무시된다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    CALL "TPCANCEL" USING TPSVCDEF-REC TPSTATUS-REC.
  • 반환값

    수행 결과 설명

    성공

    TP-STATUS는 TPOK으로 설정된다.

    실패

    TP-STATUS는 에러 코드 값이 설정된다.

  • 오류

    함수의 수행에 실패하면 TP-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TPEBADDESC]

    COMM-HANDLE이 유효하지 않은 구별자이다.

    [TPETRAN]

    COMM-HANDLE이 호출자의 트랜잭션과 관련되어 있다. COMM-HANDLE는 여전히 유효하고, 호출자의 현재 트랜잭션은 영향을 받지 않는다.

    [TPEPROTO]

    TPCANCEL이 부적절한 상황에서 호출되었다.

    [TPESYSTEM]

    Tmax 시스템 에러가 발생하였다. 자세한 정보는 로그 파일에 기록된다.

    [TPEOS]

    Tmax 시스템 에러가 발생하였다. 자세한 정보는 로그 파일에 기록된다.

    또는 운영체제에 에러가 발생하였다.

  • 참조

    TPACALL

2.8. TPFORWARD

서비스 요청을 또 다른 서비스 루틴으로 넘겨주는 함수이다.

TPFORWARD는 자신의 서비스 처리를 종료하고 클라이언트의 요청을 다른 서비스로 전달한다. TPFORWARD는 EXIT PROGRAM을 포함하고 있어서 TPRETURN처럼 작동한다. TPRETURN과 마찬가지로 TPFORWARD가 Tmax 시스템으로 정상적으로 반환되기 위해서는 TPFORWARD는 Tmax 시스템이 제어하는 서비스 루틴 내에서 호출되어야 한다. 대화형 서비스에서는 TPFORWARD가 호출될 수 없다.

서비스 루틴이 트랜잭션 모드에 있다면 그 트랜잭션은 트랜잭션 시작자(Cordinator)가 TXCOMMIT 또는 TXROLLBACK 중의 하나를 실행하여 트랜잭션을 완료할 때 함수도 완료된다. 트랜잭션이 그 서비스 루틴 내에서 TXBEGIN을 사용하여 시작된 것이라면, 그 트랜잭션은 TPFORWARD 호출 전에 TXCOMMIT 또는 TXROLLBACK 둘 중의 하나로 먼저 완료되어야 한다. TPFORWARD로 연결된 모든 서비스들은 모두가 트랜잭션 모드에 있든지 아니면 모두가 트랜잭션 모드가 아니어야 한다.

최종적으로 TPFORWARD된 서비스가 TPRETURN을 이용하여 가장 처음 서비스를 요청한 클라이언트에게 응답을 보낸다. TPFORWARD는 응답을 기다리고 있는 요청자에게 응답을 송신하는 책임을 다른 서버 프로세스에게 전가하는 것으로 멀티 노드 간에도 서비스가 이루어진다. TPFORWARD는 서비스 루틴이 요청한 모든 서비스들에 대한 응답을 받은 후에 호출되어야 한다. 수신되지 않은 응답에 대한 구별자들은 무효화되고 전달 요청은 전송되지 않는다.

서비스 루틴 작성자는 TPFORWARD 호출 후 다시 제어권을 획득할 수 없기 때문에 TPSIGRSTRT가 암시적으로 정의된 형태의 블로킹(blocking) 송신에 사용한다. TPFORWARD를 수행하는 중에 시그널이 발생하여 수행이 중지되더라도 재수행되며, 블로킹(blocking) 상황을 만나더라도 타임아웃 발생 전까지는 기다려서 송신한다. 현재 TPSVCDEF-REC는 사용되지 않으며 지정된 값은 무시된다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 DATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    COPY TPFORWAR REPLACING TPSVCDEF-REC BY TPSVCDEF-REC
                TPTYPE-REC BY TPTYPE-REC
    DATA-REC BY DATA-REC
    TPSTATUS-REC BY TPSTAUS-REC
    • DATA-REC에 저장된 데이터를 사용하여 SERVICE-NAME로 명명된 서비스에게 요청을 전달한다. 요청을 전달하는 서비스 루틴은 어떤 응답도 수신하지 않는다. 요청이 전달된 후 서비스 루틴은 Tmax 시스템에게로 반환된다. 그리고 서버는 자유롭게 다른 작업을 수행할 수 있다. TPFORWARD는 요청자로부터 아무 응답도 기대하지 않기 때문에 특별한 에러 없이 어떤 서비스에게든지 전달될 수 있다.

    • DATA-REC은 보내지는 레코드이고, TPTYPE-REC의 LEN 은 보낸지는 송신될 데이터의 길이이다. DATA-REC 길이의 명시가 필요없는 버퍼를 가리킨다면 LEN은 무시된다(보통 0이 사용한다).

      TPTPE-REC의 REC-TYPE이 SPACES이면 DATA-REC과 LEN은 무시되고, 데이터 길이가 0인 요청이 송신된다.

  • 반환값

    서비스 루틴은 호출자인 Tmax 시스템에서 어떤 값도 반환하지 않고 TP-STATUS는 설정되지 않는다.

  • 오류

    다음 상황에서 TPFORWARD는 실패하고 tperrno에 아래 값 중 하나가 설정된다.

    에러 코드 설명

    [TPESVCERR]

    서비스 루틴을 수행 중이거나 TPRETURN를 수행하는 중에 에러가 발생하였다. 에러가 발생하면 어떠한 응답 데이터도 반환되지 않는다. 이 경우에 OTPTYPE-REC의 ODATA-REC와 LEN 모두 변경되지 않는다.

    [TPETIME]

    서비스 루틴 작업 중이나 또는 요청을 전송하는 중에 트랜잭션 타임아웃이 발생한 경우에 TPETIME 에러가 반환된다.

  • 참조

    TPRETURN

2.9. TPGETLEV

TPGETLEV는 트랜잭션 모드에 있는지의 여부를 확인한다. 현재는 TP-NOT-IN-TRAN과 TP-IN-TRAN 2개의 트랜잭션 모드가 정의되어 있다.

  • 사용 방법

    01 TPTRXLEV-REC.
    COPY TPTRXLEV.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    
    CALL "TPGETLEV" USING TPTRXLEV-REC TPSTATUS-REC.
  • 반환값

    성공하면 TP-STATUS에는 TPOK, TPTRXLEV-REC에는 트랜잭션 모드가 아닐 때는 TP-NOT-IN-TRAN, 트랜잭션 모드일 때는 TP-IN-TRAN가 설정된다.

2.10. TPGETRPLY

TPGETRPLY는 이전에 TPACALL로 비동기적으로 요청한 서비스에 대한 응답을 수신하는 함수이다.

함수는 COMM-HANDLE와 일치하는 응답이 수신되거나 또는 타임아웃이 발생할 때까지 기다린다. 일반적으로 COMM-HANDLE는 응답이 수신된 후에는 더 이상 유효하지 않다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 DATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    
    CALL "TPGETRPLY" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
    • 성공적으로 데이터를 수신하면 LEN은 DATA-REC에 저장된 실제로 저장된 데이터의 길이를 가진다.

      LEN이 0으로 반환되었다면 어떤 응답도 수신되지 않고 LEN이 지시하는 ODATA-REC 버퍼에 아무런 변화가 없다. LEN에 0이 INPUT으로 이용될 수는 없다. 응답이 DATA-REC보다 크면 DATA-REC에는 그 크기만큼의 데이터만 가진다. 응답의 나머지는 무시되고, TPTRUNCATE가 설정된다.

    • TPTYPE-REC의 REC-TYPE과 SUB-TYPE은 각각 송신된 데이터 유형과 하위 유형을 갖는다.

    • 다음은 TPSVCDEF-REC에 설정될 수 있는 값이다.

      설정값 설명

      TPGETANY

      입력값으로 지정한 COMM-HANDLE in TPSVCDEF-REC를 무시하고, 수신 가능한 응답을 반환하도록 한다.

      COMM-HANDLE는 응답에 대한 호출 구별자가 된다. 아무런 응답이 없으면 일반적으로 TPGETRPLY는 응답이 도착하기를 기다린다.

      TPNOCHANGE

      수신된 응답 버퍼와 REC-TYPE이 가리키는 버퍼의 유형이 다르다면, ODATA-REC의 버퍼 유형은 수신자가 인식할 수 있는 한도 내에서 수신된 응답 버퍼의 유형으로 변경된다. 플래그가 설정되었다면 REC-TYPE이 가리키는 버퍼의 유형은 변경되지 못한다. 수신된 응답 버퍼의 유형 및 하위 유형은 가리키는 버퍼의 유형 및 하위 유형과 반드시 일치해야 한다.

      TPNOBLOCK

      TPNOBLOCK가 설정되었다면 응답이 도착할 때까지 기다리지 않는다.

      수신 가능한 응답이 있다면 이를 반환한다. TPNOBLOCK이 지정되지 않았고 수신 가능한 응답이 없다면 함수 호출자는 응답이 도착하거나 또는 타임아웃(트랜잭션 타임아웃이나 블로킹(blocking) 타임아웃)이 발생할 때까지 기다리게 된다.

      TPNOTIME

      TPNOTIME은 함수 호출자가 블로킹(blocking) 타임아웃을 무시하고, 응답이 수신될 때까지 무한정 기다리겠다는 것을 의미한다. 트랜잭션 모드에서 TPGETRPLY를 사용한 경우에는 여전히 트랜잭션 타임아웃이 적용된다.

      TPSIGRSTRT

      시그널 (signal) 인터럽트를 수용하려고 할 때 사용한다. 시스템 함수 호출이 방해될 때 시스템 함수 호출이 재실행된다.

  • 반환값

    수행 결과 설명

    성공

    성공적으로 처리되면 1을 반환하며, TPRETURN으로 전달되는 APPL-RETURN-CODE 전역변수는 TPGETRPLY가 성공적으로 반환되었거나 TP-STATUS가 [TPESVCFAIL]인 경우 응용 프로그램에서 정의한 값을 갖게 된다.

    실패

    -1을 반환하고, TP-STATUS에 에러 상황에 해당하는 값이 설정된다.

  • 오류

    함수의 수행에 실패하면 TP-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TPEINVAL]

    파라미터가 유효하지 않다. 예를 들어 SERVICE-NAME이 SPACES이거나 TPSVCDEF-REC가 비정상이다.

    [TPEBADDESC]

    COMM-HANDLE가 유효하지 않은 구별자이다.

    [TPEOTYPE]

    수신된 응답의 유형 또는 하위 유형이 호출자가 알지 못하는 유형이다. TPNOCHANGE가 설정되어 있는데 REC-TYPE와 SUB-TYPE가 수신된 데이터의 유형 또는 하위 유형과 일치하지 않는다. DATA-REC과 LEN은 모두 변경되지 않는다. 만약 응답이 호출자의 트랜잭션 모드에서 수신되었다면, 그 트랜잭션은 응답이 무시되었기 때문에 rollback된다.

    [TPETIME]

    타임아웃이 발생하였다.

    함수 호출자가 트랜잭션 모드에 있다면 트랜잭션 타임아웃이 발생하였고 그 트랜잭션은 rollback된다. 트랜잭션 모드가 아니고 TPNOTIME과 TPNOBLOCK 중 어느 것도 지정되지 않았다면 블로킹(blocking) 타임아웃이 발생한다.

    이 두 경우에 DATA-REC의 내용과 LEN은 변경되지 않는다. 트랜잭션 타임아웃이 발생하였다면 새로운 서비스 요청을 송신한다거나 응답을 기다리는 일은 트랜잭션이 rollback될 때까지 [TPETIME] 에러로 실패하게 된다.

    [TPESVCFAIL]

    서비스 요청에 대한 응답을 송신하는 서비스 루틴이 응용 프로그램상의 에러가 발생하여 TPFAIL로 TPRETURN을 호출하였다. 서비스 응답이 수신 되었다면 그 내용들은 DATA-RECDP에 저장되어 사용될 수 있다. 함수 호출자가 트랜잭션 모드에 있다면 그 트랜잭션은 rollback된다.

    트랜잭션 타임아웃이 발생하기 전까지는 트랜잭션이 rollback되기 전에 다른 통신들이 시도될 수 있다. 그러한 통신들은 정상적으로 처리될 수도 있고 또는 실패할 수도 있다. 수행되기 위해서는 TPNOTRAN이 설정되어야 한다. 호출자의 트랜잭션 모드에서 수행된 작업들은 트랜잭션이 완료되는 경우 모두 rollback된다.

    [TPESVCERR]

    유효하지 않은 구별자를 사용한 경우 트랜잭션 모드에서 XA operation이 실패한 경우에 발생한다. (TXBEGIN, TXCOMMIT, TXROLLBACK)

    [TPEBLOCK]

    TPNOBLOCK이 설정된 상태에서 블로킹(blocking) 상황이 발생한 경우로 구별자는 유효하다.

    [TPGOTSIG]

    TPSIGRSTRT가 설정되지 않은 상태에서 시그널이 수신되었다.

    [TPEPROTO]

    TPGETRPLY가 부적절한 상황에서 호출되었다.

    [TPESYSTEM]

    Tmax 시스템에 에러가 발생하였다.

    [TPEOS]

    운영체제에 에러가 발생하였다.

  • 참조

    TPACALL, TPCANCEL, TPRETURN

2.11. TPRETURN

Tmax 서비스 종료 함수로 서비스 루틴의 완료를 의미한다. TPRETURN은 EXIT PROGRAM statement과 같은 역할로서 TPRETURN이 호출되면 서비스 루틴은 Tmax 시스템에게 반환된다.

Tmax 시스템으로 올바르게 반환되기 위해서 TPRETURN은 Tmax 시스템이 제어하는 서비스 루틴 내에서 호출되는 것이 바람직하다. 서비스 루틴이 자동 트랜잭션 모드에 있는데 해당 서비스를 호출한 클라이언트가 명시적으로 트랜잭션을 시작하지 않으면 (즉, TXBEGIN을 사용하지 않으면 ) TPRETURN은 트랜잭션의 한 부분으로서 TPSUCCESS을 사용하면 commit, TPFAIL을 사용하면 rollback된다.

서비스는 동일한 트랜잭션 (Global Transaction)의 한 부분으로써 여러 번 호출될 수도 있다. 그래서 TXBEGIN을 사용한 트랜잭션 시작자가 TXCOMMIT 또는 TXROLLBACK 중 하나를 호출하여 트랜잭션을 완료하기 전까지는 완전히 commit 또는 rollback되지 않는다.

TPRETURN는 서비스의 응답 메시지를 송신한다. 응답을 수신할 프로그램이 TPCALL이나 TPGETRPLY 또는 TPRECV로 응답을 기다리고 있다면, 그 응답은 TPRETURN 호출이 성공한 후 수신자의 버퍼를 통해 전달된다. 호출에 실패한 경우 서비스 특성에 따라 [TPESVCERR] 에러나 TPEV_SVCERR 이벤트가 서비스 루틴과 통신하는 프로그램에게 반환된다.

  • 사용 방법

    01 TPSVCRET-REC.
    COPY TPSVCRET.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 DATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
    TPTYPE-REC BY TPTYPE-REC
    DATA-REC BY DATA-REC
    TPSTATUS-REC BY TPSTATUS-REC.
    • 다음은 TP-RETURN-VAL의 인수로는 설정이 가능한 값이다. 아래에 존재하지 않는 TP-RETURN-VAL 값은 모두 TPFAIL로 간주된다.

      설정값 설명

      TPSUCCESS

      서비스가 성공적으로 종료되었다. 데이터가 존재하고 TPRETURN 수행 중에 에러가 발생하지 않는다면 데이터는 송신된다.

      호출자가 트랜잭션 모드에 있다면 이 트랜잭션의 한 부분을 commit이 가능 상태로 결정한다. 트랜잭션이 최종적으로 완료될 때 트랜잭션에 속한 나머지 서비스가 모두 성공적으로 완료되어 commit아 가능 상태라면 commit, 하나라도 실패하면 rollback된다. TPRETURN에 대한 호출이 반드시 전체 트랜잭션을 완료하는 것이 아니다.

      호출자가 TPSUCCESS로 TPRETURN을 하더라도 기다리는 응답이나 대화형 연결이 존재하거나 또는 서비스에서 수행된 어떤 작업이 트랜잭션을 rollback하면 서비스 실패로 메시지가 송신된다. 응답 수신자는 [TPESVCERR] 표시 또는 TPEV_SVCERR 이벤트를 수신한다. 서비스 루틴 내에서 트랜잭션이 rollback되면 TP-RETURN-VAL은 TPFAIL로 설정된다.

      대화형 서비스에서 TPSUCCESS로 반환되면 TPEV_SVCSUCC 이벤트가 발생된다.

      TPFAIL

      서비스가 응용 프로그램의 실패로 종료되었다. 응답을 수신하는 프로그램에 에러가 반환된다. 응답을 수신하는 호출이 실패하고 수신자는 [TPSVCFAIL] 값이나 TPEV_SVCFAIL 이벤트를 수신한다.

      호출자가 트랜잭션 모드에 있고 AutoTransaction인 경우 tpreturn()은 트랜잭션을 rollback한다. 그 트랜잭션이 이미 Rollback 상태로 결정되어 있을 수도 있다. 이 파라미터는 데이터를 송신할 수 없다.

      TPEXIT

      서비스 호출 후 반환할 경우 서버 프로세스를 강제 종료할 때 사용한다. TPEXIT로 종료된 프로세스는 RESTART=Y가 설정되어 있으면 TMM에 의해 다시 자동으로 기동된다.

      TPDOWN

      TPEXIT와 비슷하나 TPDOWN으로 종료된 프로세스는 TMM에 의해 다시 기동되지 않는다.

    • 응용 프로그램에서 사용자에 의해 정의되는 반환 코드값인 APPL-CODE는 서비스 응답을 수신하는 프로그램에게 송신된다. TP-RETURN-VAL의 값과 상관없이 응답이 클라이언트로 무사히 송신될 수 있는 경우 즉, 수신하는 호출이 성공하거나 [TPSVCFAIL]로 반환하거나 또는 TPEV_SVCSUCC 또는 TPEV_SVCFAIL 이벤트들 중 하나를 수신한다면 송신되어진다. APPL-CODE에서 넘겨주는 데이터는 TPSTATUS-REC의 APPL-RETURN-CODE로 전달되어 사용할 수 있다.

    • DATA-REC는 송신되는 송신 데이터이고, LEN은 송신된 데이터의 길이이다. 데이터가 NULL이면 LEN은 무시된다. 이 경우 서비스를 호출한 프로그램이 응답을 기대하고 있다면 아무 데이터도 없는 응답이 송신된다. 응답이 기대되지 않는다면 TPRETURN은 어떤 데이터든 제거하고, 송신하는 응답 없이 반환한다.

      DATA-REC이 길이 명시가 필요 없는 버퍼를 가리킨다면 LEN은 무시되고 보통 0을 사용한다. REC-TYPE이 SPACES이면 DATA-REC과 LEN은 무시된다. DATA-REC이 길이 명시가 필요한 버퍼를 가리킨다면 LEN은 0이 될 수 없다. REC-TYPE이 STRING이고 LEN이 0이면 요청은 데이터없이 전달된다.

  • 반환값

    서비스 루틴은 호출자인 Tmax 시스템에게 어떤 값도 반환하지 않는다. 서비스 루틴은 TPRETURN(EXIT PROGRAM을 포함하는)을 사용하여 종료되는 것이 원칙이다.

    서비스 루틴이 TPRETURN을 사용하지 않고 COBOL의 EXIT PROGRAM 문을 곧바로 사용해서 반환하는 경우 서버는 서비스 요청자에게 서비스 에러를 반환한다. TPRETURN이 서비스 루틴 외부에서 사용되었을 경우 예를 들어 서비스가 아닌 루틴에서 사용된 경우 아무런 일도 하지 않고 단순히 반환한다. 서버가 트랜잭션 모드에 있었다면 그 트랜잭션은 rollback으로 표시된다.

  • 오류

    TPRETURN이 서비스 루틴을 종료시키기 때문에 파라미터를 처리하는 중에 에러가 발생하면 호출자인 서비스 루틴에게 알려지지 못한다.

    동기와 비동기 통신(TPCALL 또는 TPGETRPLY로 서비스 결과를 수신하는 프로그램)에 대해서는 TP-STATUS가 [TPESVCERR]이 된다. 대화형 통신(TPSEND나 TPRECV를 사용하는 프로그램)에 대해서는 TPEV_SVCERR 이벤트를 발생한다.

  • 참조

    TPCALL, TPGETRPLY

2.12. TPSVCSTART

Tmax 서비스를 시작하는 함수로 서비스 루틴을 작성할 때 첫 번째로 사용되는 Tmax 시스템 루틴이다.

서비스 루틴에서 TPSVCSTART를 부르기 전에 다른 것을 수행하면 에러가 난다. TPVCSTART는 서비스의 파라미터와 데이터를 가져오는 데 사용한다. 이 루틴은 TPCALL이나 TPACALL를 통해서 수신된 요청을 서비스에서 사용할 수 있게 한다.

  • 사용 방법

    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 DATA-REC.
    COPY User data.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    CALL "TPSVCSTART" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
  • 반환값

    수행 결과 설명

    성공

    TP-STATUS에 TPOK을 설정된다. 수신된 메세지가 정의된 LEN보다 길면 TPTRUNCATE가 설정되고 LEN만큼의 데이터만 DATA-REC에 옮겨지고 나머지는 무시된다.

    실패

    TP-STATUS에 에러 코드 값들이 설정된다.

  • 오류

    함수의 수행에 실패하면 TP-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TPEINVAL]

    파라미터가 유효하지 않다.

    [TPEPROTO]

    TPSVCSTART가 부적절한 상황에서 호출되었다.

    [TPESYSTEM]

    Tmax 시스템에 에러가 발생하였다.

    [TPEOS]

    운영체제에 에러가 발생하였다.

  • 참조

    TPSVRINIT, TPSVRDONE, TXBEGIN, TPCALL

2.13. TPSVRDONE

서버 프로세스를 종료하는 함수로 Tmax 응용 서버에서 서비스의 요청 처리를 모두 마치고 프로세스가 종료되기 전에 호출된다. 이 루틴이 실행될 때 그 서버 프로세스는 여전히 시스템의 일부이기는 하지만 서비스는 지원하지 않는다. 그러므로 TPSVRDONE 루틴 내에서 Tmax 통신이 수행되거나 트랜잭션이 정의될 수도 있다.

응용 프로그램에서 TPSVRDONE 루틴을 제공하지 않는다면 Tmax가 제공하는 기본(default) 루틴이 대신 호출된다. 기본 TPSVRDONE은 트랜잭션을 처리하는 서버 그룹에 포함된 서버이며, TXCLOSE와 USERLOG를 호출하여 서버가 곧 종료할 것임을 알린다. TPRETURN이나 TPFORWARD 중 하나가 TPSVRDONE 내에서 호출된다면 루틴들은 아무런 작동없이 단순히 반환한다.

TPSVRDOEN이 대화형 연결을 유지하고 있다거나 비동기성 응답을 여전히 기다리고 있거나 트랜잭션 모드에 있는 동안 반환한다면, Tmax는 대화형 연결을 종료하고 기다리고 있던 비동기성 응답 등을 무시하고 트랜잭션을 중지하고 서버는 바로 종료한다.

  • 사용 방법

    01 TPSTATUS-REC.
    COPY TPSTATUS.
    
    PROCEDURE DIVISION.
    * User code
    EXIT PROGRAM.
  • 참조

    TPSVRINIT

2.14. TPSVRINIT

Tmax 서버 초기화 함수로 Tmax 시스템은 서버의 초기화 과정에 TPSVRINIT을 호출한다.

프로세스가 기동된 후 어떤 서비스 요청도 처리되기 전에 호출된다. 그러므로 TPSVRINIT 루틴 내에서 Tmax 통신이 수행되거나 트랜잭션이 정의될 수도 있다. 응용 프로그램에서 TPSVRINIT 루틴이 제공되지 않는다면, Tmax가 제공하는 기본(default) 루틴이 대신 호출된다. 기본적인 TPSVRINIT은 트랜잭션을 처리하는 서버 그룹에 포함된 서버이면 TXOPEN과 USERLOG를 호출하여 서버가 성공적으로 시작되었음을 알린다.

응용 프로그램 명령어 라인 옵션(CLOPT)은 ARGC와 ARGV를 통해서 전달된다. ARGC에는 파라미터의 갯수가 전달되고 ARGV는 SPACE 문자(하나)로 구분된 인자들을 포함한다.

TPRETURN이나 TPFORWARD 중 하나가 TPSVRDONE 내에서 호출된다면 이러한 루틴들은 아무런 작동없이 단순히 반환한다.

  • 사용 방법

    LINKAGE SECTION.
    01 CMD-LINE.
    05 ARGC PIC 9(4) COMP-5.
    05 ARGV.
    10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    
    PROCEDURE DIVISION USING CMD-LINE TPSTATUS-REC.
    * User code
    EXIT PROGRAM.
  • 반환값

    수행 결과 설명

    성공

    TP-STATUS는 TPOK를 전달하고, 서비스는 성공적으로 요청을 받을 수 있게 된다.

    실패

    TP-STATUS에 -1을 전달하고 서버는 종료되면서 어떤 서비스 요청도 받을 수 없다.

  • 참조

    TPSVRDONE

2.15. TXBEGIN

전역 트랜잭션을 시작하는 함수로 함수 호출자는 트랜잭션 모드가 된다.

Tmax 시스템에서 트랜잭션은 모두 성공하거나 모두 실패하도록 하는 한 개의 논리적인 작업 단위를 정의하는 데 사용한다. 호출 프로세스는 트랜잭션을 시작하기 전에, 먼저 TXOPEN으로 자원 관리자와 연결되어 있어야 한다. TXBEGIN 함수는 호출자가 이미 트랜잭션 모드에 있거나 또는 TXOPEN이 호출되지 않았다면 실패하게 되고, [TX-PROTOCOL-ERROR]를 반환한다.

트랜잭션이 시작되면 호출 프로세스는 현재 트랜잭션을 완료하기 위해서 TPCOMMIT이나 TPROLLBACK을 호출하여야 한다. 트랜잭션을 시작하기 위하여 반드시 TXBEGIN을 직접적으로 호출할 필요가 없는 연속(chaining) 트랜잭션의 경우도 존재한다. 상세한 내용은 TPCOMMIT과 TPROLLBACK을 참조한다.

  • 사용 방법

    01 TPTRXDEF-REC.
    COPY TPTRXDEF.
    CALL "TXBEGIN" USING TPTRXDEF-REC.
  • 반환값

    수행 결과 설명

    성공

    TX-STATUS는 TX-OK로 설정된다.

    실패

    TX-STATUS에 에러 코드 값들이 설정된다.

  • 오류

    함수의 수행에 실패하면 TX-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TX-OUTSIDE]

    트랜잭션 관리자가 전역 트랜잭션을 시작할 수 없다. 그 이유는 현재 호출 프로세스가 외부의 전역 트랜잭션에 참여하고 있기 때문이다. 그러한 작업들이 모두 완료되어야만 전역 트랜잭션을 시작할 수 있다. 참여하고 있는 트랜잭션에는 영향을 주지 않는다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 이미 트랜잭션에 있는 경우이다. 현재 트랜잭션에는 영향을 주지 않는다.

    [TX-ERROR]

    트랜잭션 관리자 또는 리소스 관리자가 트랜잭션을 시작하는 중에 일시적으로 에러를 만났다. 이 에러가 반환되면 호출자는 트랜잭션 모드에 있지 않게 된다. 에러의 정확한 원인은 제품의 특성에 따라 결정된다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자는 더 이상 응용 로그램을 위하여 작업을 실행할 수 없다. 이 에러가 반환되면 호출자는 트랜잭션 모드에 있지 않게 된다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

  • 참조

    TPROLLBACK, TPCOMMIT, TPGETLEV

2.16. TXCOMMIT

전역 트랜잭션을 Commit하는 함수이다.

transaction-control 특성이 TX-UNCHAINED라면 TXCOMMIT이 반환할 때 호출자는 더 이상 트랜잭션 모드에 있지 않다. transaction-control 특성이 TX-CHAINED라면, TXCOMMIT이 반환할 때 호출자는 새로운 트랜잭션을 위하여 트랜잭션 모드로 남아있게 된다. 성공적으로 완료하면 TX-RETURN-STATUS이 반환값으로 사용된다.

  • 사용 방법

    DATA DIVISION.
    * Include TX definitions.
    01 TX-RETURN-STATUS.
    COPY TXSTATUS.
    
    PROCEDURE DIVISION.
    CALL "TXCOMMIT" USING TX-RETURN-STATUS.
  • 반환값

    수행 결과 설명

    성공

    TXCOMMIT은 음수가 아닌 TX-OK를 반환한다.

    실패

    TX-STATUS에는 에러 코드의 음수값들을 반환한다.

  • 오류

    함수의 수행에 실패하면 TX-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TX-NO-BEGIN]

    트랜잭션이 성공적으로 commit되었다.

    새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수 있다.

    [TX-ROLLBACK]

    트랜잭션이 rollback되었다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션이 시작된다.

    [TX-ROLLBACK-NO-BEGIN]

    트랜잭션이 rollback되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수 있다.

    [TX-MIXED]

    트랜잭션이 일부는 commit되었고 일부는 rollback되었다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션이 시작된다.

    [TX-MIXED-NO-BEGIN]

    트랜잭션이 일부는 commit되었고 일부는 rollback되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생된다.

    [TX-HAZARD]

    에러 때문에 트랜잭션이 일부는 commit되거나 일부는 rollback되었을 수 있다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션이 시작된다.

    [TX-HAZARD-NO-BEGIN]

    에러 때문에 트랜잭션이 일부는 commit되거나 일부는 rollback되었을 수 있다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수있다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 트랜잭션 모드에 있지 않는 경우이다. 트랜잭션과 관련된 호출자의 상태는 변함없다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자가 더 이상 응용프로그램을 위하여 작업할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다. 트랜잭션과 관련된 호출자의 상태는 알 수 없다.

  • 참조

    TXBEGIN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.17. TXINFORM

TX-INFO-AREA를 통해서 전역 트랜잭션 정보를 반환하는 함수이다.

트랜잭션 모드에서 TXINFORM이 수행되면 TX-IN-TRAN이 설정되고, XID-REC는 현재 트랜잭션의 branch identifier가 되고, TRANSACTION-STATE는 현재 트랜잭션의 상태가 된다. 호출자가 트랜잭션 모드에 있지 않으면 TX-NOT-IN-TRAN이 설정되고 XID-REC는 NULL XID를 갖게 된다.

또한, 호출자가 트랜잭션 모드에 있는 것과 관계없이 COMMIT-RETURN, TRANSACTION-CONTROL 그리고 초 단위 TRANSACTION-TIMEOUT 값을 포함한다.

반환된 트랜잭션 타임아웃 값은 다음 트랜잭션이 시작될 때부터 사용한다. 그것은 호출자의 현재 전역 트랜잭션에 대한 TIMEOUT 값이 아닐 수도 있다. 현재 트랜잭션이 시작된 후에 TXSETTIMEOUT 호출을 통해 TRANSACTION-TIMEOUT 값을 변경했을 수도 있기 때문이다.

  • 사용 방법

    DATA DIVISION.
    * Include TX definitions.
    01 TX-RETURN-STATUS.
    COPY TXSTATUS.
    01 TX-INFO-AREA.
    COPY TXINFDEF.
    
    PROCEDURE DIVISION.
    CALL "TXINFORM" USING TX-INFO-AREA, TX-RETURN-STATUS.
  • 반환값

    수행 결과 설명

    성공

    TXINFO는 음수가 아닌 TX-OK를 반환한다. 호출자가 트랜잭션 모드에 있다면 1을 반환하고, 호출자가 트랜잭션 모드에 있지 않다면 0을 반환한다.

    실패

    다음의 음수값들을 반환한다.

  • 오류

    함수의 수행에 실패하면 다음의 값이 설정된다.

    에러 코드 설명

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 아직 TXOPEN을 호출하지 않았다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자는 더 이상 응용프로그램을 위한 작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

  • 참조

    TXOPEN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.18. TXROLLBACK

전역 트랜잭션을 Rollback한다. transaction-control 특성(TXSETTRANSACTIONCONTROL)이 TX-UNCHAINED라면 TXROLLBACK이 반환할 때 호출자는 더 이상 트랜잭션 모드에 있지 않다. 그러나 transaction-control 특성이 TX-CHAINED라면 TXROLLBACK이 리턴할 때 호출자는 새로운 트랜잭션을 위한 트랜잭션 모드로 남아있게 된다.

  • 사용 방법

    01 TPTRXDEF-REC.
    COPY TPTRXDEF.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    CALL "TXROLLBACK" USING TPTRXDEF-REC.
  • 반환값

    수행 결과 설명

    성공

    TX-STATUS는 TP-OK로 설정된다.

    실패

    TX-STATUS에는 에러 코드 음수값들이 설정된다.

  • 오류

    함수의 수행에 실패하면 TX-STATUS에 다음의 값이 설정된다.

    에러 코드 설명

    [TX-NO-BEGIN]

    트랜잭션이 rollback되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이TX-CHAINED일 때에만 발생된다.

    [TX-MIXED]

    트랜잭션이 일부는 commit되었고 일부는 rollback되었다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션을 시작한다.

    [TX-MIXED-NO-BEGIN]

    트랜잭션이 일부는 commit되었고 일부는 rollback되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수 있다.

    [TX-HAZARD]

    에러로 인하여 트랜잭션이 일부는 commit되거나 일부는 rollback되었다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션이 시작된다.

    [TX-HAZARD-NO-BEGIN]

    에러로 인하여 트랜잭션이 일부는 commit되거나 일부는 rollback되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수 있다.

    [TX-COMMITTED]

    트랜잭션이 독자적으로 commit되었다. transaction-control 특성이 TX-CHAINED라면 새로운 트랜잭션이 시작된다.

    [TX-COMMITTED-NO-BEGIN]

    트랜잭션이 독자적으로 commit되었다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다. 반환값은 transaction-control 특성이 TX-CHAINED일 때만 발생된다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 트랜잭션 모드에 있지 않다. 트랜잭션과 관련된 호출자의 상태는 변함없다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자는 더 이상 응용프로그램을 위한 작업을 실행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다. 트랜잭션과 관련된 호출자의 상태는 알 수 없다.

  • 참조

    TXBEGIN, TPCOMMIT, TPGETLEV, TPACALL

2.19. TXSETCOMMITRET

commit-return의 특성을 COMMIT-RETURN에 설정하는 함수이다. TXCOMMIT이 함수 호출자에게 제어권을 반환하는 방식을 결정한다. TXSETCOMMITRET는 함수 호출자가 트랜잭션 모드에 있는 것과 관계없이 호출가능하다. 설정은 TXSETCOMMITRET 재호출로 인해 변경될 때까지 유효하게 적용된다.

  • 사용 방법

    DATA DIVISION.
    * Include TX definitions.
    01 TX-RETURN-STATUS.
    COPY TXSTATUS.
    01 TX-INFO-AREA.
    COPY TXINFDEF.
    
    PROCEDURE DIVISION.
    CALL "TXSETCOMMITRET" USING TX-INFO-AREA TX-RETURN-STATUS.

    다음은 commit-return 특성으로 COMMIT-RETURN에 설정이 가능한 값이다.

    설정값 설명

    TX-COMMIT-DECISION-LOGGED

    TXCOMMIT이 2PC(Two-Phase Commit) 프로토콜 중 첫 번째 단계에서 로깅된 후 아직 두 번째 단계는 완료되기 전에 반환하도록 한다.

    TXCOMMIT이 호출자에게 보다 빠르게 응답할 수 있다. 트랜잭션이 독자적(heuristic)인 결과를 갖게 될 위험이 있고, 그런 경우에 호출자는 TXCOMMIT으로부터 반환 된 코드로 발생된 상황을 제대로 알 수 없다. 정상적인 경우 첫 번째 단계에서 트랜잭션을 Commit하기로 한 트랜잭션 참여자는 두 번째 단계에서 제대로 commit하게 된다. 네트워크나 노드 장애가 길게 지속되는 등의 비정상적인 경우에는 2 단계 완료가 가능하지 않을 수 있으며 독자적인 결과를 초래할 수도 있다.

    트랜잭션 관리자는 옵션으로 이 특성을 지원하지 않도록 선택할 수 있으며, 이때 이 값을 지원하지 않음을 나타내는 [TX-NOT-SUPPORTED] 값으로 반환한다.

    TX-COMMIT-COMPLETED

    (기본값)

    2PC 프로토콜이 완전하게 종료된 후에 TXCOMMIT이 반환하도록 한다.

    트랜잭션이 독자적인(heuristic) 결과를 갖게 되었거나 또는 그럴 가능성을 알리는 반환 코드를 TXCOMMIT의 호출자에게 전달한다. 트랜잭션 관리자는 옵션으로 이 특징을 지원하지 않도록 선택할 수 있으며, 이때 이 값을 지원하지 않음을 나타내는 [TX-NOT-SUP-PORTED] 값으로 반환한다.

  • 반환값

    성공적인 작업이 완료된 경우 TXSETCOMMITRET는 음수가 아닌 TX-OK를 반환한다.

    COMMIT-RETURN이 TX-COMMIT-COMPLETED 또는 TX-COMMIT-DECISION-LOGGED으로 설정되지 않았다면, 함수는 음이 아닌 값으로 [TX-NOT-SUPPORTED]를 반환한다. COMMIT-RETURN 특성은 현재 적용되고 있는 값이 여전히 유효하다. 트랜잭션 관리자는 COMMIT-RETURN을 최소한 TX-COMMIT-COMPLETED나 TX-COMMIT-DECISION-LOGGED 중의 하나로는 설정해야 한다.

  • 오류

    다음과 같은 상황에서, TXSETCOMMITRET는 commit-return 특성 설정은 변경하지 않고 다음의 음수값 중 하나를 반환한다.

    에러 코드 설명

    [TX-EINVAL]

    COMMIT-RETURN이 TX-COMMIT-COMPLETED나 TX-COMMIT-DECISION-LOGGED로 설정되어 있지 않다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 TXOPEN이 호출되지 않은 상태이다.

  • 참조

    TXCOMMIT, TXOPEN, TXINFORM, TXGBEGIN, TXROLLBACK

2.20. TXSETTIMEOUT

TXSETTIMEOUT은 transaction-timeout 특성을 타임아웃 값으로 설정하는 함수이다. 이 값은 트랜잭션 타임아웃이 발생하기 전에 트랜잭션을 완료해야 하는 시간으로 TXBEGIN과 TXCOMMIT 또는 TXBEGIN과 TXROLLBACK 사이의 시간이 된다.

TXSETTIMEOUT은 함수 호출자가 트랜잭션 모드에 있는지와 상관없이 호출이 가능하다. TXSETTIMEOUT이 트랜잭션 모드에서 호출된다면 새로운 타임아웃 값은 다음 트랜잭션때부터 적용된다. TRANSACTION-TIMEOUT의 초기값은 0으로 타임아웃 제한이 없음을 의미한다.

TRANSACTION-TIMEOUT 인수는 트랜잭션 타임아웃이 발생하기 전까지 허용된 시간을 초 단위 숫자로 지정하는데 시스템별로 정의된 S9(9) COMP-5 타입의 최댓값까지 설정가능하다.

  • 사용 방법

    DATA DIVISION.
    * Include TX definitions.
    01 TX-RETURN-STATUS.
    COPY TXSTATUS.
    *
    01 TX-INFO-AREA.
    COPY TXINFDEF.
    
    PROCEDURE DIVISION.
    CALL "TXSETTIMEOUT" USING TX-INFO-AREA TX-RETURN-STATUS.
  • 반환값

    수행 결과 설명

    성공

    TXSETTIMEOUT에 음수가 아닌 TX-OK을 반환한다.

    실패

    TXSETTIMEOUT는 기존의 TRANSACTION-TIMEOUT 값 변경 없이 에러 코드 음수값 중 하나를 반환한다.

  • 오류

    함수의 수행에 실패하면 TXSETTIMEOUT에 다음의 값이 설정된다.

    에러 코드 설명

    [TX-EINVAL]

    지정된 타임아웃 값이 유효하지 않다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 아직 tx-open()을 호출하지 않았다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자가 더 이상 응용 프로그램을 위한 작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

  • 참조

    TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM

2.21. TXSETTRANCTL

TXSETTRANCTL은 transaction-control 특성을 TRANSACTION-CONTROL에 설정된 값으로 설정하는 함수이다.

TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션을 시작할지 여부를 결정한다. TXSETTRANCTL 함수는 응용 프로그램이 트랜잭션 모드에 있는지 여부와 관계없이 호출이 가능하다. 이 설정은 TXSETTRANCTL이 재호출에 의해서 변경될 때까지 유효하게 적용된다.

  • 사용 방법

    DATA DIVISION.
    * Include TX definitions.
    01 TX-RETURN-STATUS.
    COPY TXSTATUS.
    *
    01 TX-INFO-AREA.
    COPY TXINFDEF.
    
    PROCEDURE DIVISION.
    CALL "TXSETTRANCTL" USING TX-INFO-AREA TX-RETURN-STATUS.

    다음은 TRANSACTION-CONTROL로 TRANSACVTION-CONTROL에 설정이 가능한 값이다.

    설정값 설명

    TX-UNCHAINED(기본값)

    TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션을 시작하지 않도록 한다. 호출자는 새로운 트랜잭션을 시작하려면 TXBEGIN을 실행해야 한다.

    TX-CHAINED

    TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션을 시작한다.

  • 반환값

    수행 결과 설명

    성공

    TXSETTRANCTL은 음수가 아닌 TX-OK을 반환한다.

    실패

    TXSETTRANCTL은 기존의 transaction-control 특성 변경 없이 에러 코드 음수값을 반환한다.

  • 오류

    함수의 수행에 실패하면 TXSETTRANCTL에 다음의 값이 설정된다.

    에러 코드 설명

    [TX-EINVAL]

    지정된 타임아웃 값이 유효하지 않다.

    [TX-PROTOCOL-ERROR]

    함수가 부적절한 상황에서 호출되었다. 예를 들어 호출자가 아직 tx-open()을 호출하지 않았다.

    [TX-FAIL]

    치명적인 에러가 발생하여 트랜잭션 관리자가 더 이상 응용 프로그램을 위한 작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

  • 참조

    TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM