111
Tmax COBOL Guide

Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide

Page 2: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 1

Copyright © 2000 TmaxSoft Co., Ltd. All Rights Reserved

Copyright Notice Copyright©2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국 서울시 강남구 대치동 946-1 글라스타워 18 층 우)135-708 Restricted Rights Legend This software and documents are made available only under the terms of the TmaxSoft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of TmaxSoft Co., Ltd. 소프트웨어 및 문서는 오직 TmaxSoft Co., Ltd.와의 사용권 계약 하에서만 이용이 가능하며, 사용권 계약에 따라서 사용하거나 복사 할 수 있습니다. 또한 이 매뉴얼에서 언급하지 않은 정보에 대해서는 보증 및 책임을 지지 않습니다. 이 매뉴얼에 대한 권리는 저작권에 보호되므로 발행자의 허가 없이 전체 또는 일부를 어떤 형식이나, 사진 녹화, 기록, 정보 저장 및 검색 시스템과 같은 그래픽이나 전자적, 기계적 수단으로 복제하거나 사용할 수 없습니다. Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of TmaxSoft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해당 소유주의 상표로서 참조용으로만 사용됩니다. Tmax Cobol Guide

Document Edition Date Version

TMCG-0107-02-400 Jan 7, 2006 Tmax 4.0.0

Tmax 제품은 아래 표와 같습니다.

Page 3: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 2

본 서는 Tmax Standard 와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을 포함하고 있습니다.

Tmax Standard TP Function + 2 Phase Commit

Tmax Options Domain Gateway, RQ, X.25 Gateway, TCP/IP Gateway, Host-Link, WebT, UCS

이 책에 관하여…

Tmax COBOL Guide 는 COBOL 을 사용하여 Tmax 서버 프로그램을 작성하는 방법을 설명한다. 누구를 위한 책인가? 이 책은 COBOL 을 사용하여 Tmax 서버를 작성하려는 개발자들에게 도움을 주기 위한 것이다. 본서가 Tmax 로 개발함에 있어 모든 필요한 사항을 포함하고 있지 않으므로 Tmax Adminitrator Guide 나 Tmax Reference Manual 을 참조하도록 한다. 어떻게 사용하는가? 이 책은 크게 두 부분으로 나눠져 있다. 예제를 통해서 COBOL 을 이용하여 Tmax 시스템을 구성하는 설명이 전반부에 나오고, 후반부에서는 Tmax 시스템에서 사용하는 COBOL API 의 자세한 설명이 진행된다. Ⅰ. COBOL Guide : COBOL 을 사용하여 서버/클라이언트 프로그램을 작성하는 방법을 설명하고 예제를 포함한다. Ⅱ. CBOL Reference Manual : 변수 및 함수들에 대한 설명 관련서 Tmax Administrator Guide Tmax Reference Manual 규약

규 약 설 명

Page 4: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 3

{ } [ ] |

( ) Numeric

String Literal

필수 항목 옵션 항목

지정된 여러 개의 값 중 배타적인 선택 구분자 디폴트 값

숫자 abc 형태의 문자열

“abc” 형태의 문자열

Page 5: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 4

차 례

1 COBOL Guide ............................................................................ 7

1.1 서문.......................................................................................................................... 7

1.2 Sample file 설치..................................................................................................... 8

1.2.1 Sample file 설치............................................................................................... 8

1.2.2 환경 변수 설정 ................................................................................................ 9

1.2.3 COBOL용 라이브러리 화일 .......................................................................... 10

1.3 Tmax환경 화일 ..................................................................................................... 10

1.3.1 생성 ................................................................................................................ 10

1.3.2 환경화일 컴파일과 서비스 테이블 생성 ...................................................... 11

1.3.3 엔진 기동 ....................................................................................................... 12

1.4 Tmax 서버 프로그램............................................................................................. 12

1.4.1 Tmax 서비스 프로그램 작성......................................................................... 12

1.4.2 서버 Makefile ................................................................................................. 17

1.4.3 서버 프로그램 기동 ....................................................................................... 21

1.4.4 서비스 프로그램 테스트 ................................................................................ 21

1.4.5 서비스 프로그램 작성 상세 .......................................................................... 22

1.5 서비스 프로그램에서 FDL 버퍼 사용................................................................... 24

1.5.1 FDL 화일 만들기 ........................................................................................... 25

1.5.2 view화일 만들기............................................................................................. 26

1.5.3 COBOL용 view화일 만들기 .......................................................................... 27

1.5.4 Field 버퍼를 이용하는 서비스 작성하기 ...................................................... 28

1.5.5 필드 선언 ....................................................................................................... 34

1.5.6 서비스 호출자로부터 FIELD 버퍼를 전달 받음 .......................................... 36

1.5.7 FIELD 버퍼를 struct로 변환 ......................................................................... 37

1.5.8 전송시 사용할 FIELD 버퍼 생성 .................................................................. 37

1.5.9 데이터 조작 (비즈니스로직 수행)................................................................. 38

1.5.10 struct 를 FIELD 버퍼로 변환........................................................................ 38

1.5.11 서비스 호출자에게 응답 전송....................................................................... 39

1.5.12 FDLINS 서비스 호출 테스트 ........................................................................ 40

1.6 전역 트랜잭션 사용하기........................................................................................ 41

1.6.1 전역트랜잭션 사용하는 서비스 ..................................................................... 41

1.6.2 명시적 전역 트랜잭션의 시작....................................................................... 44

Page 6: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 5

1.6.3 명시적 전역 트랜잭션의 성공....................................................................... 44

1.6.4 명시적 전역 트랜잭션의 취소....................................................................... 44

1.6.5 전역 트랜잭션 서비스 컴파일 및 기동 ........................................................ 44

1.6.6 전역 트랜잭션 서비스 호출 테스트.............................................................. 45

1.7 TPSVRINIT / TPSVRDONE 이용.......................................................................... 45

1.7.1 TPSVRINIT..................................................................................................... 45

1.7.2 TPSVRDONE ................................................................................................. 47

1.7.3 non-xa 서비스 컴파일 및 기동..................................................................... 49

1.7.4 Non-xa 서비스 호출 테스트 .......................................................................... 49

1.8 서비스에서 서비스 호출........................................................................................ 49

1.8.1 서비스 개요.................................................................................................... 49

1.8.2 서비스에서 서비스 호출 ................................................................................ 52

1.8.3 서비스에서 서비스 호출 컴파일 및 기동..................................................... 53

1.8.4 서비스에서 서비스 호출 테스트 ................................................................... 53

2 COBOL Reference Manual .................................................... 54

2.1 개요........................................................................................................................ 54

2.1.1 TPSTATUS ..................................................................................................... 54

2.1.2 TPTYPE.......................................................................................................... 55

2.1.3 TPSVCDEF .................................................................................................... 56

2.1.4 TPINFDEF...................................................................................................... 57

2.1.5 TPSVCRET .................................................................................................... 57

2.1.6 TPTRXDEF..................................................................................................... 58

2.1.7 TPCMTDEF.................................................................................................... 58

2.1.8 TPAUTDEF..................................................................................................... 58

2.1.9 TPPRIDEF...................................................................................................... 59

2.1.10 TPTRXLEV..................................................................................................... 59

2.1.11 TPBCTDEF..................................................................................................... 59

2.1.12 FDL-INFO....................................................................................................... 60

2.1.13 TPEVTDEF..................................................................................................... 61

2.1.14 TXSTATUS ..................................................................................................... 62

2.1.15 TXINFDEF...................................................................................................... 63

2.2 함수들 .................................................................................................................... 65

2.2.1 FINIT............................................................................................................... 65

2.2.2 FVFTOS ......................................................................................................... 66

2.2.3 FVSTOF ......................................................................................................... 68

2.2.4 TP_SLEEP ..................................................................................................... 70

2.2.5 TPACALL........................................................................................................ 71

2.2.6 TPCALL .......................................................................................................... 75

2.2.7 TPCANCEL .................................................................................................... 80

Page 7: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 6

2.2.8 TPFORWARD................................................................................................. 81

2.2.9 TPGETLEV..................................................................................................... 84

2.2.10 TPGETRPLY .................................................................................................. 84

2.2.11 TPRETURN.................................................................................................... 89

2.2.12 TPSVCSTART ................................................................................................ 93

2.2.13 TPSVRDONE ................................................................................................. 94

2.2.14 TPSVRINIT..................................................................................................... 95

2.2.15 TXBEGIN........................................................................................................ 96

2.2.16 TXCOMMIT .................................................................................................... 98

2.2.17 TXINFORM................................................................................................... 100

2.2.18 TXROLLBACK.............................................................................................. 102

2.2.19 TXSETCOMMITRET .................................................................................... 104

2.2.20 TXSETTIMEOUT.......................................................................................... 107

2.2.21 TXSETTRANCTL ......................................................................................... 108

Page 8: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 7

1 COBOL Guide

1.1 서문

COBOL 을 이용하여 사용자 프로그램을 작성하여 Tmax 시스템을 구축하는 방법을 설명한다. 본서를 읽은 후에는

환경화일 작성

COBOL 로 작성된 서버 프로그램의 구조

COBOL 로 작성된 서버용 Makefile 내용 이해

서버 프로그램 기동 / 테스트 / 종료

를 알 수 있게 된다.

본서의 설명은 Tmax 엔진은 이미 설치되어 있다는 것을 가정하고 진행한다. 또한, Tmax 시스템의 기본적인 용어들(예를 들어, 도메인, 노드, 서버그룹, 서버, 서비스 등)은 이미 알고 있다고 가정하고 진행하므로 Tmax 시스템의 관리 및 환경설정에 필요한 용어들은 “Tmax Administration Guide”를 참고한다, Tmax 에서 제공하는 untility 와 C API 에 대한 설명은 “Tmax Reference Manual”을 참고하기 바란다.

대부분의 예제가 ORACLE 데이터베이스를 사용하게 되고, ORACLE 에서 제공하는 Pre-compiler 가 32bit 용만 제공되고 있으므로, Tmax 엔진 또한 32 비트용을 사용한다. Tmax 엔진을 64 비트용을 사용한다면 실행화일중에는 sdlc 대신 sdlc32 를, 64 비트 라이브러리 대신 32 비트용 라이브러리를 반드시 사용해야 한다. 본서에서 사용한 예제는 Tmax3.8.15 32 비트용 엔진을 기반으로 작성되어 있다.

본서에서는 작성된 서비스 프로그램의 작동을 테스트하기 위해서 클라이언트 프로그램을 작성하지 않고, Tmax 에서 제공하는 tmd 유틸리티를 이용한다. tmd 는 환경화일에 지정된 환경변수

Page 9: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 8

TMAX_HOST_ADDR, TMAX_HOST_PORT 를 이용하여 Tmax 에 접속하므로, 반드시 환경 파일에 위의 두 환경변수를 설정한다.

1.2 Sample file 설치

1.2.1 Sample file 설치

이 메뉴얼에서 사용하는 예제는 cobolsample.tar 라는 파일명으로 제공될 것이며, 환경화일, 서버 프로그램, 서버 Makefile 및 sample 로 제공되는 서비스가 정상적으로 작동하는지를 테스트할 수 있는 tmd 모듈들이 포함되어 있다. COBOL 용 예제 화일은 Tmax 엔진이 이미 설치되어 있다는 것을 가정하고 COBOL 용으로 필요한 부분만을 복사하므로 반드시 Tmax 엔진을 설치한 후에 cobolsanmple.tar 를 시스템에 설치한다. Tmax 엔진의 설치에 대해서는 Tmax Installation Guide 를 참고한다.

$TMAXDIR 밑에서 아래의 명령어를 통해서 예제 화일을 설치한다. 예제 화일은 tar 로 묶여 있으므로 “-xvf” 옵션을 이용하여 디렉토리 구조대로 푼다.

$ cd $TMAXDIR

$ tar -xvf cobolsample.tar

x ./config/cobol.m, 1709 bytes, 4 tape blocks

x ./ucblinc

x ./ucblinc/viewdemo.v, 382 bytes, 1 tape blocks

x ./ucblinc/viewdemo.h, 190 bytes, 1 tape blocks

x ./ucblinc/VIEWDEMO.cbl, 671 bytes, 2 tape blocks

……

x ./lib/libcblc.so, 252805 bytes, 494 tape blocks

x ./lib/libcbls.a, 352024 bytes, 688 tape blocks

COBOL 관련 디렉토리는 $TMAXDIR 밑에 cobinc, config, ucblinc, sample/cobserver, sample/cobclient 이다.

cobinc : COBOL 용 헤더인 *.cbl 화일

config : COBOL 용 sample 을 테스트할 수 있는 Tmax 환경화일

Page 10: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 9

ucblinc : 필드버퍼를 사용하는 sample 을 위해서 필요한 field key,

view file 등이 위치

sample/cobserver : 서비스

sample/cobclient : 클라이언트

1.2.2 환경 변수 설정

Tmax 시스템에서 COBOL 로 서비스를 작성하기 위해서는 TMAX 를 위한 환경설정, COBOL 을 사용하기 위한 환경 설정이 필요하다.

##### Tmax system Environment

TMAXDIR=<Tmax 가 설치된 path>

TMAX_HOST_ADDR=<Tmax 가 설치된 머신의 ip address>

TMAX_HOST_PORT=<Tmax 시스템이 사용하는 port >

SDLFILE=$TMAXDIR/ucblinc/tmax.sdl

FDLFILE=$TMAXDIR/sample/fdl/tmax.fdl

PATH=$TMAXDIR/bin:$PATH

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TMAXDIR/lib:$TMAXDIR/tuxlib

export TMAXDIR TMAX_HOST_ADDR TMAX_HOST_PORT

export SDLFILE FDLFILE PATH LD_LIBRARY_PATH

##### MF Cobol Environment

COBCPY=$TMAXDIR/cobinc:$TMAXDIR/ucblinc

COBDIR=<Cobol compiler 가 설치된 디렉토리의 path>

PATH=$PATH$COBDIR/bin

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COBDIR/lib

export COBCPY COBDIR PATH LD_LIBRARY_PATH

Page 11: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 10

(주 1) LD_LIBRARY_PATH 는 IBM AIX 에서는 LIBPATH 로, UP-UX 에서는 SHLIB_PATH 로 대체한다.

1.2.3 COBOL 용 라이브러리 화일

$TMAXDIR/lib 에는 COBOL 용 라이브러리 화일이 존재해야 한다.

$ ls -l $TMAXDIR/lib/libcbl*

-rwx------1 tmax dba 252461 4 월 22 일 12:53

/user/tmax3815/lib/libcblc.so*

-rw-------1 tmax dba 351420 4 월 22 일 12:52

/user/tmax3815/lib/libcbls.a

1.3 Tmax 환경 화일

1.3.1 생성

*DOMAIN

tmax1 SHMKEY =99990, TPORTNO=9389, BLOCKTIME=60,

MAXSVC=100, MAXSVR=50, MAXSPR=100, MAXTMS=10,IPCPERM=0666

*NODE

tmax5 TMAXDIR = "/user/tmax3815",

APPDIR = "/user/tmax3815/appbin",

PATHDIR = "/user/tmax3815/path",

TLOGDIR = "/user/tmax3815/log/tlog",

ULOGDIR = "/user/tmax3815/log/ulog",

SLOGDIR = "/user/tmax3815/log/slog"

*SVRGROUP

svg1 NODENAME = "edu25"

### tms for Oracle ###

svg2 NODENAME = "edu25", DBNAME = ORACLE,

OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60 ",

TMSNAME = tms_ora

Page 12: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 11

*SERVER

carray_nxa SVGNAME = svg1, MIN=1, MAX=1,

CLOPT="-e $(SVR).err -o $(SVR).out -- scott tiger"

svctpcall SVGNAME = svg1, MIN=1, MAX=1,

CLOPT="-e $(SVR).err -o $(SVR).out"

fdlins SVGNAME = svg1, MIN=1, MAX=1,

CLOPT="-e $(SVR).err -o $(SVR).out"

carray_xa SVGNAME = svg2, MIN=1, MAX=1,

CLOPT="-e $(SVR).err -o $(SVR).out"

*SERVICE

CARRAYNXA SVRNAME = carray_nxa # carray buffer, non-xa

FDLINS SVRNAME = fdlins # field buffer, non-xa

CARRAYAUTO SVRNAME = carray_xa, # carray buffer, xa ,

AUTOTRAN=Y autotran 이용

CARRAYNAUTO SVRNAME = carray_xa # carray buffer, xa ,

명시적 transaction

SVCTPCALL SVRNAME = svctpcall # carray buffer, use

tpcall in service

1.3.2 환경화일 컴파일과 서비스 테이블 생성

cfl 이라는 명령어를 통해서 텍스트 형태의 Tmax 환경화일을 바이너리 형태로 만들어 준다. Tmax 환경화일의 바이너리는 특정 디렉토리와 화일명을 지정하지 않으면, 자동으로 $TMAXDIR/config 디렉토리에 tmconfig 라는 화일명으로 저장된다.

$ cfl –i cobol.m

$ ls –l $TMAXDIR/config

-rw-r--r-- 1 tmax dba 793256 4 월 24 일 09:50 cobol.m

-rw-r--r-- 1 tmax dba 793256 4 월 24 일 09:50 tmconfig

$ gst

Page 13: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 12

$ ls –l $TMAXDIR/svct

-rw-r--r-- 1 tmax dba 385 4 월 24 일 17:50

carray_nxa_svctab.c

-rw-r--r-- 1 tmax dba 491 4 월 24 일 17:50

carray_xa_svctab.c

-rw-r--r-- 1 tmax dba 373 4 월 24 일 17:50 fdlins_svctab.c

-rw-r--r-- 1 tmax dba 385 4 월 24 일 17:50

svctpcall_svctab.c

(주)TMS 화일 생성은 “Tmax Administrator Guide”를 참고한다.

1.3.3 엔진 기동

$ tmboot –T

TMBOOT for node(tmax5) is starting:

TMBOOT: TMM is starting: Thu Apr 24 12:09:17 2003

TMBOOT: CLL is starting: Thu Apr 24 12:09:17 2003

TMBOOT: CLH is starting: Thu Apr 24 12:09:17 2003

TMBOOT: TMS(tms_ora) is starting: Thu Apr 24 12:09:17 2003

TMBOOT: TMS(tms_ora) is starting: Thu Apr 24 12:09:17 2003

1.4 Tmax 서버 프로그램

1.4.1 Tmax 서비스 프로그램 작성

< $TMAXDIR/sample/cobserver/carrayauto.pco >

******************************************************

* XA 이면서 CARRAY 버퍼를 사용하는 서비스 *

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. CARRAYAUTO.

AUTHOR. TMAX DEVELOPMENT.

Page 14: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 13

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

******************************************************

* TMAX ATMI 함수를 위한 definitions

******************************************************

01 TPSVCRET-REC.

COPY TPSVCRET.

*

01 TPTYPE-REC.

COPY TPTYPE.

*

01 TPSTATUS-REC.

COPY TPSTATUS.

*

01 TPSVCDEF-REC.

COPY TPSVCDEF.

*

01 TX-RETURN-STATUS.

COPY TXSTATUS.

******************************************************

* Log message definitions

******************************************************

01 LOGMSG.

05 LOGMSG-SVC PIC X(16).

05 FILLE PIC X(3) VALUES " : ".

05 LOGMSG-TEXT PIC X(80).

01 LOGMSG-LEN PIC S9(9) COMP-5.

******************************************************

* User defined data records

Page 15: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 14

******************************************************

01 RECV-STRING PIC X(100).

01 SEND-STRING PIC X(100).

******************************************************

* 사용자 정의 ORACLE Host 변수 선언

******************************************************

EXEC SQL BEGIN DECLARE SECTION END-EXEC.

01 S-SRC.

05 S-TEMP PIC X(10) VARYING.

EXEC SQL END DECLARE SECTION END-EXEC.

EXEC SQL INCLUDE SQLCA END-EXEC.

LINKAGE SECTION.

*

PROCEDURE DIVISION.

*

000-MAIN.

PERFORM 100-SVCSTART THRU 100-EXIT.

PERFORM 200-DBINSERT THRU 200-EXIT.

PERFORM 900-TPRETURNSCS THRU 900-TPRETURNSCS-X.

000-EXIT.

******************************************************

* 클라이언트로부터 전송된 데이터를 수신

******************************************************

100-SVCSTART.

MOVE LENGTH OF RECV-STRING TO LEN.

CALL "TPSVCSTART" USING TPSVCDEF-REC

TPTYPE-REC

RECV-STRING

TPSTATUS-REC.

IF NOT TPOK

MOVE "TPSVCSTART Fail" TO LOGMSG-TEXT

PERFORM 800-USERLOG

Page 16: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 15

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

IF TPTRUNCATE

MOVE "Received data was truncated" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

DISPLAY "------------------------------------------------".

MOVE SERVICE-NAME TO LOGMSG-SVC.

MOVE "서비스 시작 " TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

100-EXIT.

200-DBINSERT.

MOVE RECV-STRING(1:LEN) TO S-TEMP-ARR.

MOVE LENGTH OF S-TEMP-ARR TO S-TEMP-LEN.

* DB INSERT 처리

EXEC SQL INSERT INTO TEMP (NAME,SAL)

VALUES (RTRIM(:S-TEMP),150)

END-EXEC.

IF SQLCODE NOT = 0

PERFORM 800-SQLERROR

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

STRING "Inserted data : " S-TEMP-ARR

DELIMITED BY SIZE INTO LOGMSG-TEXT.

PERFORM 800-USERLOG.

MOVE "성공적 처리" TO SEND-STRING.

200-EXIT.

Page 17: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 16

800-SQLERROR.

* LOG 메시지 내용을 구성하여 로깅처리

STRING "800-SQLERROR : " SQLERRMC

DELIMITED BY SIZE INTO LOGMSG-TEXT.

MOVE SQLCODE TO APPL-CODE.

******************************************************

* Write out a log err messages

******************************************************

800-USERLOG.

DISPLAY LOGMSG.

******************************************************

* 성공적으로 서비스가 종료

******************************************************

900-TPRETURNSCS.

MOVE "서비스가 성공적으로 끝났음" TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

SET TPSUCCESS TO TRUE.

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-STRING.

900-TPRETURNSCS-X.

******************************************************

* 비정상적으로 서비스가 종료

******************************************************

900-TPRETURNFAIL.

MOVE "서비스가 비정상적으로 처리" TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

SET TPFAIL TO TRUE.

MOVE "처리불가 " TO SEND-STRING.

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

Page 18: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 17

DATA-REC BY SEND-STRING.

900-TPRETURNFAIL-X.

이 서비스는 XA 서버 그룹에 속한 서버로서 Tmax 의 AUTOTRAN 기능을 이용하므로, 반드시 Tmax 환경화일에서 해당 서비스에 대해서 “AUTOTRAN=Y” 설정이 필요하다.

1.4.2 서버 Makefile

사용자가 작성한 서비스 프로그램과 Tmax 에서 제공하는 라이브러리, DB 벤더에서 제공하는 라이브러리들이 묶어서 하나의 실행화일을 만들게 된다.

실행화일을 만드는 과정은,

*.pco *.cob : 프로 COBOL 프로그램의 precompile

*.cob *.o : COBOL source 를 compile 하여 오브젝트 화일 생성

Page 19: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 18

*.o + *.a 실행화일 : Tmax 에서 제공하는 라이브러리, DB 벤더에서 제공하는 라이브러리를 link 하여 실행화일 생성

COBOL 로 작성한 서비스가 1 개이면서 1 서버가 이 서비스 1 개로 이루어지는 경우에는 위의 세 단계를 1 개의 Makefile 에서 처리한다. 그러나 일반적으로 1 개의 서버에는 복수개의 서비스가 존재하게 된다. 즉, *.pco .cob, *.cob *.o 의 단계는 각 서비스별로 이루어져야 하고, *.o + 라이브러리 화일들을 묶어서 서버를 만드는 과정은 1 회 이루어지면 된다. 그래서 *.pco *.o 는 shell 프로그램에서 처리하고, 실행화일을 만드는 과정은 Makefile 에서 처리한다.

< COBOL object 화일 생성 shell >

$ cat carray_xa.sh

echo "-------------> carrayauto.pco"

procob18 sqlcheck=full userid=scott/tiger mode=ansi

release_cursor=no hold_cursor=yes maxliteral=160 ireclen=132

iname=carrayauto.pco

cob -C IBMCOMP -C NESTCALL -cx carrayauto.cob

echo "-------------> carraynauto.pco"

procob18 sqlcheck=full userid=scott/tiger mode=ansi

release_cursor=no hold_cursor=yes maxliteral=160 ireclen=132

iname=carraynauto.pco

cob -C IBMCOMP -C NESTCALL -cx carraynauto.cob

(주 1) procob18 또는 cob 의 compile option 은 OS 별로 달라지므로 확인 후 작업한다. Procob18 에서 사용하는 option 은 $ORACLE_HOME/precomp/demo/procob/demo_procob.mk 화일을 참조한다.

Page 20: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 19

(주 2) carray_xa.sh 에는 carrayauto.pco, carraynauto.pco 를 pre-compile, compile 과정을 거치므로, 예제 프로그램에서 carrayauto.pco, carraynauto.pco 가 모두 필요하다.

$ sh carray_xa.sh

-------------> carrayauto.pco

Pro*COBOL: Release 1.8.76.0.0 - Production on Wed May 7 23:43:42

2003

(c) Copyright 2001 Oracle Corporation. All rights reserved.

System default option values taken from:

/database/ora9/precomp/admin/pcccob.cfg

Precompiling carrayauto.pco

-------------> carraynauto.pco

Pro*COBOL: Release 1.8.76.0.0 - Production on Wed May 7 23:43:42

2003

(c) Copyright 2001 Oracle Corporation. All rights reserved.

System default option values taken from:

/database/ora9/precomp/admin/pcccob.cfg

Precompiling carraynauto.pco

< 실행화일을 만들기 위한 Makefile >

#Makefile

TARGET = carray_xa

Page 21: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 20

TMAXCBLSTUB = cblstub

TMAXCBLSTUBOBJ = $(TMAXCBLSTUB).o

COBOBJS = carrayauto.o carraynauto.o

OBJS = $(TMAXCBLSTUBOBJ) $(SDLOBJ) $(SVCTOBJ)

SVCTOBJ = $(TARGET)_svctab.o

SDLOBJ = $(TMAXDIR)/lib/sdl.o

CFLAGS = -O -q32 -g -D_CBL_MODULE -I$(TMAXDIR) -I$(TMAXDIR)/usrinc

LDFLAGS = -brtl

COBFLAGS= -C IBMCOMP -C NESTCALL

APPDIR = $(TMAXDIR)/appbin

SVCTDIR = $(TMAXDIR)/svct

LIBDIR = $(TMAXDIR)/lib

LIBS = -loras -lcbls

ORALIBD = $(ORACLE_HOME)/lib32

ORALIBS = $(ORACLE_HOME)/precomp/lib32/cobsqlintf.o -lclntsh -lld

-lm `cat $(ORACLE_HOME)/lib32/sysliblist` -lm -lc_r -lpthreads

#

.SUFFIXES : .c

.c.o:

$(CC) $(CFLAGS) -c $<

# server compile

#

$(TARGET): $(OBJS)

cob -Q "-brtl" $(COBFLAGS) -g -o $(TARGET) -L$(LIBDIR) -

L$(ORALIBD)

$(OBJS) $(COBOBJS) $(LIBS) $(ORALIBS)

mv -f $(TARGET) $(APPDIR)/.

rm -f $(TARGET).o $(SVCTOBJ) $(TMAXCBLSTUBOBJ) $(COBOBJS)

$(TMAXCBLSTUBOBJ):

cc $(CFLAGS) $(LDFLAGS) -c

$(TMAXDIR)/cobinc/$(TMAXCBLSTUB).c

Page 22: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 21

$(SVCTOBJ):$(SVCTDIR)/$(TARGET)_svctab.c

cc $(CFLAGS) -c $(SVCTDIR)/$(TARGET)_svctab.c

################################################

clean:

-rm -f $(OBJS) core $(TARGET) $(TARGET).lis $(TARGET).cob

TARGET = carray_xa : 서버(실행화일)명 TMAXCBLSTUB = cblstub : Tmax 에서 제공하는 stub 화일명 COBOBJS = carrayauto.o carraynauto.o : COBOL 로 작성한 서비스의 object 화일명 LIBS = -loras -lcbls : Tmax 에서 제공하는 library 화일명

$ make -f carray_xa.mk

1.4.3 서버 프로그램 기동

$ tmboot -s carray_xa

1.4.4 서비스 프로그램 테스트

tmd 유틸리티를 이용하여 클라이언트 프로그램의 작성 없이 서비스를 테스트한다.

$TMAXDIR/cobclient 디렉토리에 포함되어 있는 tmd_CARRAYAUTO 화일을 이용하여 CARRAYAUTO 서비스를 테스트한다.

Page 23: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 22

$ cd $TMAXDIR/cobclient

$ tmd -i t md_CARRAYAUTO

output: 성공적 처리

1.4.5 서비스 프로그램 작성 상세

1) 서비스명

PROGRAM-ID. CARRAYAUTO.

서비스 호출자가 TPCALL 에서 사용할 서비스명은 PROGRAM-ID 에서 정의한다.

2) 클라이언트와 데이터 송수신에 사용되는 buffer 정의

******************************************************

* User defined data records

******************************************************

01 RECV-STRING PIC X(100).

01 SEND-STRING PIC X(100).

서비스 호출자와 데이터를 주고 받을 때 사용할 버퍼를 정의한다.

Page 24: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 23

3) 서비스 시작

MOVE LENGTH OF RECV-STRING TO LEN.

CALL "TPSVCSTART" USING TPSVCDEF-REC

TPTYPE-REC

RECV-STRING

TPSTATUS-REC.

IF NOT TPOK

MOVE "TPSVCSTART Fail" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

IF TPTRUNCATE

MOVE "Received data was truncated" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

서비스를 시작하면서 서비스호출자가 보낸 데이터를 2)에서 정의한 버퍼에 받아낸다. 이 sample 에서는 RECV-STRING 에 서비스호출자가 전송한 데이터가 저장된다. 어떤 에러가 발생하면 “ IF NOT TPOK “ 에서 검사될 것이며, 서비스 호출자가 보낸 데이터보다 버퍼(RECV-STRING)의 사이즈가 작으면 TPTRUNCATE 에러가 발생한다.

4) 성공적인 서비스 종료

SET TPSUCCESS TO TRUE.

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-STRING.

Page 25: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 24

비지니스 로직의 완료 후에 서비스호출자에게 응답을 주기 위해서는 TPRETURN 을 사용한다. 서비스 수행이 성공적인 경우에는 TPSUCCESS 를 이용한다. 서비스호출자는 TPOK 를 리턴받는다.

5) 로직의 에러로 실패를 return

SET TPFAIL TO TRUE.

MOVE "처리불가 " TO SEND-STRING.

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-STRING.

비지니스 로직의 완료 후에 서비스호출자에게 응답을 주기 위해서는 TPRETURN 을 사용한다. 서비스 수행이 실패한 경우에는 TPFAIL 을 이용한다. TPFAIL 을 이용하여 TPRETURN 하는 경우에는 서비스호출자는 에러코드로 c language 에서는 tperrno=11(TPESVCFAIL), COBOL language 에서는 TP-STATUS=11(TPESVCFAIL)을 리턴받는다.

1.5 서비스 프로그램에서 FDL 버퍼 사용

COBOL 서비스 프로그램에서 FDL 버퍼를 직접 사용할 수 없기 때문에, Struct 구조와의 상호변환 작업이 요구된다. 그리고 FDL 버퍼와 view(Field 들과 struct 을 mapping 시킨 화일)을 이용하기 위해서는 사전 작업이 필요하다.

cobolsanple.tar 를 풀면, 1.5 장에서 사용하는 view sample 은 ucblinc 디렉토리에 viewdemo.v 라는 이름으로 존재하고. FDL sample 은 fdldemo.f 라는 이름으로 존재한다.

Fdl : $TMAXDIR/ucblinc/fdldemo.f

Page 26: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 25

View : $TMAXDIR/ucblinc/viewdemo.v

1.5.1 FDL 화일 만들기

< fdldemo.f >

# name number type flags comments

# string type

FDL_S1 1001 string - -

FDL_S2 1002 string - -

# integer type

FDL_I1 2001 int - -

FDL_I2 2002 int - -

# long type

FDL_L1 3001 long - -

FDL_L2 3002 long - -

# float type

FDL_F1 4001 float - -

FDL_F2 4002 float - -

클라이언트 또는 서버에서 사용할 FIELD 정보들을 생성한다.

$fdlc –c –i fdldemo.f –o tmax.fdl

output 으로 생성된 tmax.fdl 화일은 환경변수에 지정한 $FDLFILE 에 지정된 디렉토리에 위치시킨다. cobolsample.tar 화일을 이용하는 경우에는 $TMAXDIR/ucblinc 디렉토리에 fdldemo.f 화일이 생성되므로, 이

Page 27: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 26

디렉토리에서 fdlc 작업을 수행하여 $FDLFILE 에 $TMAXDIR/ucblinc 가 지정되도록 한다.

(주) 자세한 field buffer 사용에 관련된 자세한 정보는 “FDL Reference Manual”을 참조한다.

1.5.2 view 화일 만들기

< viewdemo.v >

VIEW viewdemo

#type cname Fldkey count flag size null

string sdata1 FDL_S1 1 - 20 "@@"

string sdata2 FDL_S2 5 - 20 "@@"

int idata1 FDL_I1 1 - - 0

int idata2 FDL_I2 5 - - 0

long ldata1 FDL_L1 1 - - 0

long ldata2 FDL_L2 5 - - 0

float fdata1 FDL_F1 1 - - 0

float fdata2 FDL_F2 5 - - 0

double ddata1 FDL_D1 1 - - 0

double ddata2 FDL_D2 5 - - 0

END

COBOL 에서는 Field buffer 를 사용할 수 없기 때문에 view(struct 구조)를 생성하여요청자로부터 전달된(또는 전달할) field buffer 의 내용을 특정 함수를 이용하여 변환할 때 사용한다.

$cd $TMAXDIR/ucblinc

$ sdlc -c -v viewdemo.v -o tmax.sdl

$ ls -l

-rw-r-xr-- 1 tmax dba 382 Apr 28 17:27 viewdemo.v*

-rw-r--r-- 1 tmax dba 976 May 7 18:17 tmax.sdl

Page 28: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 27

output 으로 생성된 tmax.sdl 화일은 환경변수에 지정한 $SDLFILE 에 정의한 디렉토리에 위치시킨다. cobolsample.tar 화일을 이용하는 경우에는 $TMAXDIR/ucblinc 디렉토리에 viewdemo.v 화일이 생성되므로, 이 디렉토리에서 sdlc 작업을 수행하여 $SDLFILE 에 $TMAXDIR/ucblinc 가 지정되도록 한다.

1.5.3 COBOL 용 view 화일 만들기

$ sdlc -C -v viewdemo.v

$ls -l

total 48

drwxr-xr-x 2 tmax dba 512 Apr 30 14:48 ./

drwxr-xr-x 7 tmax dba 512 Apr 14 11:50 ../

-rw-r--r-- 1 tmax dba 671 Apr 30 14:48 VIEWDEMO.cbl

-rw-r-xr-- 1 tmax dba 382 Apr 28 17:27 viewdemo.v*

< VIEWDEMO.cbl >

* VIEWFILE: "viewdemo.v"

* VIEWNAME: "viewdemo"

05 SDATA1 PIC X(20).

05 SDATA2 OCCURS 5 TIMES PIC X(20).

05 IDATA1 PIC S9(9) USAGE IS COMP-5.

05 IDATA2 OCCURS 5 TIMES PIC S9(9) USAGE IS COMP-5.

05 LDATA1 PIC S9(9) USAGE IS COMP-5.

05 LDATA2 OCCURS 5 TIMES PIC S9(9) USAGE IS COMP-5.

05 FDATA1 USAGE IS COMP-1.

05 FDATA2 OCCURS 5 TIMES USAGE IS COMP-1.

05 DDATA1 USAGE IS COMP-2.

05 DDATA2 OCCURS 5 TIMES USAGE IS COMP-2.

Page 29: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 28

이 화일은 COBOL 에서 COPY 명령어를 통해서 소스내에서 이용되어야 하므로,$COBCPY 에 지정된 디렉토리에 위치시킨다. Cobolsample.tar 화일을 이용하는 경우에는 $TMAXIDIR/ucblinc 디렉토리에 이 화일이 위치하게 된다.

(주) 관리의 효율성을 위해서 Tmax 에서 제공하는 Cobol 용 헤더화일과 분리하여 다른 디렉토리에 저장하는 것이 좋다.

export COBCPY=$TMAXDIR/cobinc:$TMAXDIR/ucblinc

로 환경을 설정하고, 사용자가 생성한 view 화일들은 $TMAXDIR/ucblinc 에 저장한다.

즉, $TMAXDIR/ucblinc 에는 아래의 화일들이 저장된다.

$ ls -l

-rw-r--r-- 1 tmax dba 671 May 7 18:17 VIEWDEMO.cbl

-rwxr-xr-- 1 tmax dba 381 Apr 30 15:10 fdldemo.f*

-rw-r--r-- 1 tmax dba 755 May 6 23:59 fdldemo_fdl.h

-rw-r--r-- 1 tmax dba 3852 May 6 23:59 tmax.fdl

-rw-r--r-- 1 tmax dba 976 May 7 20:13 tmax.sdl

-rw-r--r-- 1 tmax dba 996 May 7 00:56 viewdemo.sdl

-rw-r-xr-- 1 tmax dba 385 May 7 18:17 viewdemo.v*

-rw-r--r-- 1 tmax dba 574 May 7 20:13 viewdemo_sdl.h

-rw-r--r-- 1 tmax dba 571 Apr 30 14:53 viewdemo_sdl.h

1.5.4 Field 버퍼를 이용하는 서비스 작성하기

아래의 순서로 서비스 프로그램이 작성되어 있고, 전체 소스를 검사한 후 각 항목별로 자세한 설명을 기술한다.

1) 필드 선언

2) 클라이언트로부터 FIELD 버퍼를 전달 받음

3) FIELD 버퍼를 struct 로 변환

4) COBOL 소스 내에서 데이터 조작

Page 30: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 29

5) 전송시 사용할 FIELD 버퍼 생성

6) Struct 를 FIELD 버퍼로 변환

7) 클라이언트로 데이터 전송

< $TMAXDIR/sample/cobserver/fdlins.pco >

******************************************************

* FDL 버퍼를 사용하는 서비스

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. FDLINS.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

******************************************************

* TMAX ATMI 함수를 위한 definitions

******************************************************

01 TPSVCRET-REC.

COPY TPSVCRET.

*

01 TPTYPE-REC.

COPY TPTYPE.

*

01 TPSTATUS-REC.

COPY TPSTATUS.

*

01 TPSVCDEF-REC.

COPY TPSVCDEF.

*

01 FML-REC.

Page 31: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 30

COPY FMLINFO.

******************************************************

* Log message definitions

******************************************************

01 LOGMSG.

05 LOGMSG-SVC PIC X(16).

05 FILLER PIC X(3) VALUES " : ".

05 LOGMSG-TEXT PIC X(50).

01 LOGMSG-LEN PIC S9(9) COMP-5.

******************************************************

* User defined data records

******************************************************

01 RECV-BUFFER.

03 RECV-ALIGN pic S9(9) COMP-5.

03 RECV-DATA pic x(1000).

01 SEND-BUFFER.

03 SEND-ALIGN pic S9(9) COMP-5.

03 SEND-DATA pic x(1000).

01 VIEWDEMO.

COPY VIEWDEMO.

LINKAGE SECTION.

*

PROCEDURE DIVISION.

*

000-MAIN.

PERFORM 100-SVCSTART THRU 100-EXIT.

PERFORM 200-FDL2VIEW THRU 200-EXIT.

PERFORM 300-VIEW2FDL THRU 300-EXIT.

PERFORM 900-TPRETURNSCS THRU 900-TPRETURNSCS-X.

000-EXIT.

Page 32: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 31

******************************************************

* 클라이언트로부터 전송된 데이터를 수신

******************************************************

100-SVCSTART.

MOVE LENGTH OF RECV-BUFFER TO LEN.

CALL "TPSVCSTART" USING TPSVCDEF-REC

TPTYPE-REC

RECV-BUFFER

TPSTATUS-REC.

IF NOT TPOK

MOVE "TPSVCSTART Fail" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

IF TPTRUNCATE

MOVE "Received data was truncated" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

DISPLAY "------------------------------------------------

".

MOVE SERVICE-NAME TO LOGMSG-SVC.

MOVE "서비스 시작 " TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

100-EXIT.

******************************************************

* FIELD 버퍼의 내용을 struct 로 이동

******************************************************

200-FDL2VIEW.

* viewname, FML-LENGTH 를 반드시 지정해야 한다.

Page 33: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 32

MOVE "viewdemo" TO VIEWNAME.

MOVE LEN TO FML-LENGTH.

* FIELD buffer 의 데이터를 COBOL structure 로 넘김

CALL "FVFTOS" USING RECV-BUFFER VIEWDEMO FML-REC.

IF NOT FOK

MOVE "FVFTOS FAILED " TO LOGMSG-TEXT

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

200-EXIT.

******************************************************

* struct 의 내용을 FIELD 버퍼로 이동

******************************************************

300-VIEW2FDL.

* FML-LENGTH 를 반드시 사용해야 한다.

MOVE LENGTH OF SEND-BUFFER TO FML-LENGTH.

CALL "FINIT" USING SEND-BUFFER FML-REC.

IF NOT FOK

MOVE "FINIT FAILED " TO LOGMSG-TEXT

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

MOVE "TEST STRING" TO SDATA1.

MOVE "TEST STRING1" TO SDATA2(1).

MOVE "TEST STRING2" TO SDATA2(2).

MOVE "TEST STRING3" TO SDATA2(3).

compute idata1 = idata1 + 10.

compute idata2(1) = idata2(1) + 10.

compute idata2(2) = idata2(2) + 10.

compute idata2(3) = idata2(3) + 10.

Page 34: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 33

compute idata2(4) = idata2(4) + 10.

compute ldata1 = ldata1 + 10.

compute ldata2(1) = ldata2(1) + 10.

compute ldata2(2) = ldata2(2) + 10.

compute ldata2(3) = ldata2(3) + 10.

compute ldata2(4) = ldata2(4) + 10.

compute fdata1 = fdata1 + 10.

compute fdata2(1) = fdata2(1) + 10.

compute fdata2(2) = fdata2(2) + 10.

compute fdata2(3) = fdata2(3) + 10.

compute fdata2(4) = fdata2(4) + 10.

compute ddata1 = ddata1 + 10.

compute ddata2(1) = ddata2(1) + 10.

compute ddata2(2) = ddata2(2) + 10.

compute ddata2(3) = ddata2(3) + 10.

compute ddata2(4) = ddata2(4) + 10.

* COBOL structure 의 데이터를 FDL buffer 로 넘김

MOVE "viewdemo" TO VIEWNAME.

SET FUPDATE TO TRUE.

CALL "FVSTOF" USING SEND-BUFFER VIEWDEMO FML-REC.

IF NOT FOK

MOVE "FVSTOF FAILED " TO LOGMSG-TEXT

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

300-EXIT.

******************************************************

* Write out a log err messages

******************************************************

Page 35: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 34

800-USERLOG.

DISPLAY LOGMSG.

******************************************************

* 성공적으로 서비스가 종료

******************************************************

900-TPRETURNSCS.

MOVE "서비스가 성공적으로 끝났음" TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

SET TPSUCCESS TO TRUE.

MOVE LENGTH OF SEND-BUFFER TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-BUFFER.

900-TPRETURNSCS-X.

******************************************************

* 비정상적으로 서비스가 종료

******************************************************

900-TPRETURNFAIL.

MOVE "서비스가 비정상적으로 처리" TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

SET TPFAIL TO TRUE.

MOVE "처리불가 " TO SDATA1.

MOVE LENGTH OF SEND-BUFFER TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-BUFFER.

900-TPRETURNFAIL-X.

1.5.5 필드 선언

01 FML-REC.

COPY FMLINFO.

******************************************************

* User defined data records

Page 36: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 35

******************************************************

01 RECV-BUFFER.

03 RECV-ALIGN pic S9(9) COMP-5.

03 RECV-DATA pic x(1000).

01 SEND-BUFFER.

03 SEND-ALIGN pic S9(9) COMP-5.

03 SEND-DATA pic x(1000).

01 VIEWDEMO.

COPY VIEWDEMO.

* VIEWFILE: "viewdemo.v"

* VIEWNAME: "viewdemo"

*

* 05 SDATA1 PIC X(20).

* 05 SDATA2 OCCURS 5 TIMES PIC X(20).

* 05 IDATA1 PIC S9(9) USAGE IS COMP-5.

* 05 IDATA2 OCCURS 10 TIMES PIC S9(9) USAGE IS COMP-5.

* 05 LDATA1 PIC S9(9) USAGE IS COMP-5.

* 05 LDATA2 OCCURS 5 TIMES PIC S9(9) USAGE IS COMP-5.

* 05 FDATA1 USAGE IS COMP-1.

* 05 FDATA2 OCCURS 10 TIMES USAGE IS COMP-1.

* 05 DDATA1 USAGE IS COMP-2.

* 05 DDATA2 OCCURS 10 TIMES USAGE IS COMP-2.

● RECV-BUFFER / SEND-BUFFER

서비스 호출자로부터 전송된 데이터를 받거나 보낼때 사용하는 버퍼.

● VIEWDEMO

FIELD 버퍼와 VIEW 를 상호 전환할 때 사용하는 STRUCT

Page 37: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 36

1.5.6 서비스 호출자로부터 FIELD 버퍼를 전달 받음

******************************************************

* 클라이언트로부터 전송된 데이터를 수신

******************************************************

100-SVCSTART.

MOVE LENGTH OF RECV-BUFFER TO LEN.

CALL "TPSVCSTART" USING TPSVCDEF-REC

TPTYPE-REC

RECV-BUFFER

TPSTATUS-REC.

IF NOT TPOK

MOVE "TPSVCSTART Fail" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

IF TPTRUNCATE

MOVE "Received data was truncated" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

DISPLAY "------------------------------------------------".

MOVE SERVICE-NAME TO LOGMSG-SVC.

MOVE "서비스 시작 " TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

100-EXIT.

서비스 호출자로부터 전송된 데이터를 받기 위해서는 반드시 서비스 시작시 가장 처음에 TPSVCSTART 를 수행해야만 한다.

Page 38: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 37

1.5.7 FIELD 버퍼를 struct 로 변환

******************************************************

* FIELD 버퍼의 내용을 struct 로 이동

******************************************************

200-FDL2VIEW.

* viewname, FML-LENGTH 를 반드시 지정해야 한다.

MOVE "viewdemo" TO VIEWNAME.

MOVE LEN TO FML-LENGTH.

* FIELD buffer 의 데이터를 COBOL structure 로 넘김

CALL "FVFTOS" USING RECV-BUFFER VIEWDEMO FML-REC.

IF NOT FOK

MOVE "FVFTOS FAILED " TO LOGMSG-TEXT

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

200-EXIT.

서비스 호출자로부터 전송받은 FIELD 버퍼의 데이터를 COBOL 에서 사용할 STRUCT 로 변환할 때 사용한다. 서비스 호출자가 FIELD 버퍼에 실어서 보낸 데이터가 FVFTOS 를 통하여, COBOL 의 struct 에 저장된다. Array 를 사용할 때, 전송된 데이터갯수가 array 개수에 모자라는 경우에는 view 화일에서 정의한 default value 가 채워진다.

1.5.8 전송시 사용할 FIELD 버퍼 생성

******************************************************

* struct 의 내용을 FIELD 버퍼로 이동

******************************************************

300-VIEW2FDL.

* FML-LENGTH 를 반드시 사용해야 한다.

Page 39: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 38

MOVE LENGTH OF SEND-BUFFER TO FML-LENGTH.

CALL "FINIT" USING SEND-BUFFER FML-REC.

IF NOT FOK

MOVE "FINIT FAILED " TO LOGMSG-TEXT

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

서비스 호출자에게 데이터를 전송할 때 사용할 버퍼는, 받은 버퍼를 그대로 사용해도 되고, 새로운 버퍼를 생성하여 사용해도 된다. 새로운 버퍼를 사용하는 경우에는 FINIT 을 사용한다.

1.5.9 데이터 조작 (비즈니스로직 수행)

MOVE "TEST STRING" TO SDATA1.

MOVE "TEST STRING1" TO SDATA2(1).

MOVE "TEST STRING2" TO SDATA2(2).

MOVE "TEST STRING3" TO SDATA2(3).

……

compute ddata1 = ddata1 + 10.

compute ddata2(1) = ddata2(1) + 10.

compute ddata2(2) = ddata2(2) + 10.

compute ddata2(3) = ddata2(3) + 10.

compute ddata2(4) = ddata2(4) + 10.

1.5.10 struct 를 FIELD 버퍼로 변환

MOVE "viewdemo" TO VIEWNAME.

SET FUPDATE TO TRUE.

CALL "FVSTOF" USING SEND-BUFFER VIEWDEMO FML-REC.

IF NOT FOK

MOVE "FVSTOF FAILED " TO LOGMSG-TEXT

Page 40: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 39

DISPLAY "FML-STATUS : " FML-STATUS

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

300-EXIT.

서비스 호출자에게 FIELD 타입의 데이터를 전송하기 위해서 COBOL 에서 사용한 STRUCT 데이터를 FIELD 타입의 데이터로 변환한다.

1.5.11 서비스 호출자에게 응답 전송

******************************************************

* 성공적으로 서비스가 종료

******************************************************

900-TPRETURNSCS.

MOVE "서비스가 성공적으로 끝났음" TO LOGMSG-TEXT.

PERFORM 800-USERLOG.

SET TPSUCCESS TO TRUE.

MOVE LENGTH OF SEND-BUFFER TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-BUFFER.

900-TPRETURNSCS-X.

서비스가 정상적으로 수행된 경우에는 TPRETURN 시 TUSUCCESS 값을 이용해야 한다.

******************************************************

* 비정상적으로 서비스가 종료

******************************************************

900-TPRETURNFAIL.

MOVE "서비스가 비정상적으로 처리" TO LOGMSG-TEXT.

Page 41: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 40

PERFORM 800-USERLOG.

SET TPFAIL TO TRUE.

MOVE "처리불가 " TO SDATA1.

MOVE LENGTH OF SEND-BUFFER TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-BUFFER.

900-TPRETURNFAIL-X.

서비스가 비정상적으로 수행된 경우에는 TPRETURN 시 TUFAIL 값을 이용해야 한다.

1.5.12 FDLINS 서비스 호출 테스트

tmd 유틸리티를 이용하여 클라이언트 프로그램의 작성 없이 서비스를 호출한다.

$ cd TMAXDIR/sample/cobclient

$ tmd -i tmd_FDLINS

fkey = 469763049, fname = FDL_S1, type = string, value = TEST STRING

fkey = 469763050, fname = FDL_S2, type = string, value = TEST STRING1

fkey = 469763050, fname = FDL_S2, type = string, value = TEST STRING2

fkey = 469763050, fname = FDL_S2, type = string, value = TEST STRING3

fkey = 201328593, fname = FDL_I1, type = int, value = 20

fkey = 201328594, fname = FDL_I2, type = int, value = 30

fkey = 201328594, fname = FDL_I2, type = int, value = 10

fkey = 201328594, fname = FDL_I2, type = int, value = 10

fkey = 201328594, fname = FDL_I2, type = int, value = 10

fkey = 268438457, fname = FDL_L1, type = long, value = 10010

fkey = 268438458, fname = FDL_L2, type = long, value = 100010

fkey = 268438458, fname = FDL_L2, type = long, value = 200010

fkey = 268438458, fname = FDL_L2, type = long, value = 300010

Page 42: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 41

fkey = 268438458, fname = FDL_L2, type = long, value = 10

fkey = 335548321, fname = FDL_F1, type = float, value = 20.123451

fkey = 335548322, fname = FDL_F2, type = float, value = 30.123449

fkey = 335548322, fname = FDL_F2, type = float, value = 10.000000

fkey = 335548322, fname = FDL_F2, type = float, value = 10.000000

fkey = 335548322, fname = FDL_F2, type = float, value = 10.000000

fkey = 402658185, fname = FDL_D1, type = double, value = 100010.123450

fkey = 402658186, fname = FDL_D2, type = double, value = 200010.123450

fkey = 402658186, fname = FDL_D2, type = double, value = 10.000000

fkey = 402658186, fname = FDL_D2, type = double, value = 10.000000

fkey = 402658186, fname = FDL_D2, type = double, value = 10.000000

(주) Tmax 환경화일을 읽지 않으므로 사용자 프로화일에 저장된 TMAX_HOST_PORT, TMAX_HOST_ADDR, FDLFILE 의 값을 확인한다.

1.6 전역 트랜잭션 사용하기

1.6.1 전역트랜잭션 사용하는 서비스

< $TMAXDIR/sample/cobserver/carraynauto.pco >

******************************************************

* XA 이면서 CARRAY 버퍼를 사용하는 서비스 *

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. CARRAYNAUTO.

……

WORKING-STORAGE SECTION.

******************************************************

* TMAX ATMI 함수를 위한 definitions

******************************************************

01 TPSVCRET-REC.

COPY TPSVCRET.

*

Page 43: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 42

01 TPTYPE-REC.

COPY TPTYPE.

*

01 TPSTATUS-REC.

COPY TPSTATUS.

*

01 TPSVCDEF-REC.

COPY TPSVCDEF.

*

01 TX-RETURN-STATUS.

COPY TXSTATUS.

……

PROCEDURE DIVISION.

000-MAIN.

PERFORM 100-SVCSTART THRU 100-EXIT.

PERFORM 200-DBINSERT THRU 200-EXIT.

PERFORM 900-TPRETURNSCS THRU 900-TPRETURNSCS-X.

000-EXIT.

200-DBINSERT.

MOVE RECV-STRING(1:LEN) TO S-TEMP-ARR.

MOVE LENGTH OF S-TEMP-ARR TO S-TEMP-LEN.

CALL "TXBEGIN" USING TX-RETURN-STATUS.

IF NOT TPOK

MOVE "FAIL TO TXBEGIN" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

* DB INSERT 처리

EXEC SQL INSERT INTO TEMP (NAME,SAL)

VALUES (RTRIM(:S-TEMP),150)

END-EXEC.

IF SQLCODE NOT = 0

Page 44: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 43

PERFORM 800-SQLERROR

PERFORM 800-USERLOG

CALL "TXROLLBACK" USING TX-RETURN-STATUS

IF NOT TPOK

MOVE "txrollback ERROR " TO LOGMSG-TEXT

PERFORM 800-USERLOG

END-IF

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

CALL "TXCOMMIT" USING TX-RETURN-STATUS.

IF NOT TPOK

MOVE "TXCOMMIT ERROR" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

STRING "Inserted data : " S-TEMP-ARR

DELIMITED BY SIZE INTO LOGMSG-TEXT.

PERFORM 800-USERLOG.

MOVE "성공적 처리" TO SEND-STRING.

200-EXIT.

명시적 트랜잭션을 시작하는 서비스는 Tmax 환경화일에서 AUTOTRAN=N(Tmax3.8.9 이후, default)로 반드시 설정되어 있어야 한다. Tmax 환경화일에 AUTOTRAN=Y 로 설정되어 있으면, 서비스 시작하면서 자동으로 전역 트랜잭션을 시작하게 되므로 서비스에서 명시적으로 TXBEGIN 을 사용할 때 TPEPROTO 에러를 리턴받게 된다. 또한 AUTOTRAN=N 일지라도 클라이언트에서 명시적 트랜잭션을 시작하고, 서비스에서도 명시적 트랜잭션을 시작하게되면 서비스에서 수행한 TXBEGIN 은 TPEPROTO 에러를 리턴받으므로 주의한다.

Page 45: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 44

1.6.2 명시적 전역 트랜잭션의 시작

CALL "TXBEGIN" USING TX-RETURN-STATUS.

IF NOT TPOK

MOVE "FAIL TO TXBEGIN" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

1.6.3 명시적 전역 트랜잭션의 성공

CALL "TXCOMMIT" USING TX-RETURN-STATUS.

IF NOT TPOK

MOVE "TXCOMMIT ERROR" TO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

1.6.4 명시적 전역 트랜잭션의 취소

CALL "TXROLLBACK" USING TX-RETURN-STATUS

IF NOT TPOK

MOVE "txrollback ERROR " TO LOGMSG-TEXT

PERFORM 800-USERLOG

END-IF.

1.6.5 전역 트랜잭션 서비스 컴파일 및 기동

$ sh carray_xa.sh

$ make –f carray_xa.mk

$ tmboot –s carray_xa

Page 46: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 45

1.6.6 전역 트랜잭션 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient

$ tmd -i t md_CARRAYNAUTO

output: 성공적 처리

1.7 TPSVRINIT / TPSVRDONE 이용

1.7.1 TPSVRINIT

Tmax 서버를 초기화하는 함수이다. 최초에 Tmax 서버가 기동할 때 1 회만 수행된다. 일반적으로 Non-xa 서버그룹에 속하는 서버들이 DB 와 연결하는 로직을 수행한다. tpsvrinit.pco 라는 이름으로 cobolsample.tar 에 포함되어 있고, 컴파일과정(.o 를 생성)을 거쳐서 서버프로그램 object 와 함께 link 된다.

< $TMAXDIR/sample/cobserver/tpsvrinit.pco >

******************************************************

* NXA 서버에서 DB(Resource Manager)와 연결을 맺는 용도로 사용

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. TPSVRINIT.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

EXEC SQL BEGIN DECLARE SECTION END-EXEC.

01 USERNAME PIC X(10) VARYING.

Page 47: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 46

01 PASSWD PIC X(10) VARYING.

EXEC SQL END DECLARE SECTION END-EXEC.

EXEC SQL INCLUDE SQLCA END-EXEC.

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 SERVER-INIT-STATUS.

COPY TPSTATUS.

*

PROCEDURE DIVISION USING CMD-LINE SERVER-INIT-STATUS.

*

000-TPSVRINIT-START.

******************************************************

* DB error check

******************************************************

EXEC SQL WHENEVER SQLERROR

DO PERFORM SQL-ERROR

END-EXEC.

DISPLAY "ARGC : " ARGC, " ARGV: " ARGV.

******************************************************

* DB connect

******************************************************

MOVE "SCOTT" TO USERNAME-ARR.

MOVE 5 TO USERNAME-LEN.

MOVE "TIGER" TO PASSWD-ARR.

MOVE 5 TO PASSWD-LEN.

EXEC SQL

CONNECT :USERNAME IDENTIFIED BY :PASSWD

Page 48: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 47

END-EXEC.

DISPLAY "CONNECTED TO ORACLE as User : " USERNAME-ARR.

SET TPOK IN SERVER-INIT-STATUS TO TRUE.

EXIT PROGRAM.

SQL-ERROR.

EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.

DISPLAY " ".

DISPLAY "ORACLE ERROR DETECTED:".

DISPLAY SQLERRMC.

EXEC SQL ROLLBACK WORK RELEASE END-EXEC.

SET TPEINVAL IN SERVER-INIT-STATUS TO TRUE.

EXIT PROGRAM.

1.7.2 TPSVRDONE

Tmax 서버를 종료하는 함수이다. Tmax 서버가 종료될 때 최후에 1 회만 수행된다. 일반적으로 Non-xa 서버그룹에 속하는 서버들이 DB 연결을 해제하는 로직을 수행한다. tpsvrdone.pco 라는 이름으로 cobolsample.tar 에 포함되어 있고, 컴파일과정(.o 를 생성)을 거쳐서 서버프로그램 object 와 함께 link 된다.

< $TMAXDIR/sample/cobserver/tpsvrdone.pco >

******************************************************

* NXA 서버에서 DB(Resource Manager)와 연결을 해제하는 용도로 사용

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. TPSVRDONE.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

Page 49: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 48

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

01 SERVER-DONE-STATUS.

COPY TPSTATUS.

EXEC SQL INCLUDE SQLCA END-EXEC.

*

PROCEDURE DIVISION .

*

000-TPSVRDONE-START.

******************************************************

* DB error check

******************************************************

EXEC SQL WHENEVER SQLERROR

DO PERFORM SQL-ERROR END-EXEC.

******************************************************

* DB disconnect

******************************************************

EXEC SQL COMMIT WORK RELEASE END-EXEC.

DISPLAY " ".

DISPLAY "DISCONNECTED TO ORACLE ".

SET TPOK IN SERVER-DONE-STATUS TO TRUE.

EXIT PROGRAM.

SQL-ERROR.

EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.

DISPLAY " ".

DISPLAY "ORACLE ERROR DETECTED :".

DISPLAY " ".

DISPLAY SQLERRMC.

EXEC SQL ROLLBACK WORK RELEASE END-EXEC.

SET TPEINVAL IN SERVER-DONE-STATUS TO TRUE.

Page 50: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 49

EXIT PROGRAM.

1.7.3 non-xa 서비스 컴파일 및 기동

$ sh carray_nxa.sh

$ make -f carray_nxa.mk

$ tmboot -s carray_nxa

서버 carray_nxa 를 기동 후 , userlog 화일인 $TMAXDIR/log/ulog/carray_nxa.out 에 의 로그 내용을 확인할 수 있다.

ARGC : 00023 ARGV: carray_nxa scott tiger

CONNECTED TO ORACLE as User : SCOTT

1.7.4 Non-xa 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient

$ tmd -i tmd_CARRAYNXA

output: 성공적 처리 from CARRAYNXA

1.8 서비스에서 서비스 호출

1.8.1 서비스 개요

< $TMAXDIR/sample/cobserver/svctpcall.pco >

Page 51: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 50

******************************************************

* DB 이용하지 않으면서 CARRAY 버퍼를 사용하는 서비스 *

******************************************************

IDENTIFICATION DIVISION.

PROGRAM-ID. SVCTPCALL.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

******************************************************

* TMAX ATMI 함수를 위한 definitions

******************************************************

01 TPSVCRET-REC.

COPY TPSVCRET.

*

01 TPTYPE-REC.

COPY TPTYPE.

*

01 TPSTATUS-REC.

COPY TPSTATUS.

*

01 TPSVCDEF-REC.

COPY TPSVCDEF.

******************************************************

* Log message definitions

******************************************************

01 LOGMSG.

05 LOGMSG-SVC PIC X(16).

05 FILLER PIC X(3) VALUES " : ".

05 LOGMSG-TEXT PIC X(50).

01 LOGMSG-LEN PIC S9(9) COMP-5.

Page 52: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 51

******************************************************

* User defined data records

******************************************************

01 RECV-STRING PIC X(100).

01 SEND-STRING PIC X(100).

77 NUM-TPSTATUS PIC 99.

PROCEDURE DIVISION.

*

000-MAIN.

PERFORM 100-SVCSTART THRU 100-EXIT.

PERFORM 200-TPCALL THRU 200-EXIT.

PERFORM 900-TPRETURNSCS THRU 900-TPRETURNSCS-X.

******************************************************

* 클라이언트로부터 전송된 데이터를 수신

******************************************************

100-SVCSTART.

……

100-EXIT.

**********************************************************

* tpcall in service

**********************************************************

200-TPCALL.

MOVE "CARRAYNXA" TO SERVICE-NAME.

MOVE LENGTH OF SEND-STRING TO LEN IN TPTYPE-REC.

CALL "TPCALL" USING TPSVCDEF-REC

TPTYPE-REC

RECV-STRING

TPTYPE-REC

SEND-STRING

TPSTATUS-REC .

IF NOT TPOK

Page 53: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 52

MOVE "Service failed" TO LOGMSG-TEXT

MOVE TP-STATUS TO NUM-TPSTATUS

STRING "TPCALL call failed : " NUM-TPSTATUS

DELIMITED BY SIZE INTO LOGMSG-TEXT

PERFORM 800-USERLOG

PERFORM 900-TPRETURNFAIL THRU 900-TPRETURNFAIL-X

END-IF.

200-EXIT.

******************************************************

* Write out a log err messages

******************************************************

800-USERLOG.

DISPLAY LOGMSG.

******************************************************

* 성공적으로 서비스가 종료

******************************************************

900-TPRETURNSCS.

……

900-TPRETURNSCS-X.

******************************************************

* 비정상적으로 서비스가 종료

******************************************************

900-TPRETURNFAIL.

……

900-TPRETURNFAIL-X.

1.8.2 서비스에서 서비스 호출

MOVE "CARRAYNXA" TO SERVICE-NAME.

MOVE LENGTH OF SEND-STRING TO LEN IN TPTYPE-REC.

CALL "TPCALL" USING TPSVCDEF-REC

Page 54: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 53

TPTYPE-REC

RECV-STRING

TPTYPE-REC

SEND-STRING

TPSTATUS-REC .

서비스 호출자는 Tmax 클라이언트 또는 서비스가 될 수 있다. Tmax 서비스에서도 또 다른 Tmax 서비스를 호출할 수 있다는 의미이다. 위의 예제처럼 또 다른 서비스를 호출하기 위해서는 TPCALL 에서 주고 받는 버퍼를 사용해야 한다.

1.8.3 서비스에서 서비스 호출 컴파일 및 기동

$ make -f svctpcall.mk

$ tmboot -s svctpcall

1.8.4 서비스에서 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient

$ tmd -i tmd_SVCTPCALL

output: 성공적 처리 from CARRAYNXA

Page 55: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 54

2 COBOL Reference Manual

2.1 개요

2.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.

Page 56: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 55

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.

2.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.

Page 57: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 56

2.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.

Page 58: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 57

*

05 APPKEY PIC S9(9) COMP-5.

05 CLIENTID OCCURS 4 TIMES PIC S9(9) COMP-5.

05 SERVICE-NAME PIC X(15).

2.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.

2.1.5 TPSVCRET

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

***************************************

* TPSVCRET.cbl

***************************************

05 TP-RETURN-VAL PIC S9(9) COMP-5.

Page 59: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 58

88 TPSUCCESS VALUE 0.

88 TPFAIL VALUE 1.

88 TPEXIT VALUE 2.

05 APPL-CODE PIC S9(9) COMP-5.

2.1.6 TPTRXDEF

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

***************************************

* TPTRXDEF.cbl

***************************************

05 T-OUT PICS9(9) COMP-5 VALUE IS0.

05 TRANID OCCURS 6 TIMES PICS9(9) COMP-5.

2.1.7 TPCMTDEF

Commit level 특성을 설정하기 위해서 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.

2.1.8 TPAUTDEF

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

***************************************

* TPAUTDEF.cbl

***************************************

05 AUTH-FLAG PIC S9(9) COMP-5.

88 TPNOAUTH VALUE 0.

Page 60: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 59

88 TPSYSAUTH VALUE 1.

88 TPAPPAUTH VALUE 2.

2.1.9 TPPRIDEF

메세지 우선 순위를 조정하는 TPSPRIO() and 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.

2.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.

2.1.11 TPBCTDEF

비요청 메세지를 보내는 TPNOTIFY() and TPBROADCAST()에서 사용된다.

***************************************

* TPBCTDEF.cbl

***************************************

Page 61: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 60

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).

2.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

Page 62: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 61

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).

2.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.

Page 63: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 62

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).

2.1.14 TXSTATUS

TX routine 에 의해서 return code 를 관리하기 위해 이용.

***************************************

* 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

Page 64: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 63

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

2.1.15 TXINFDEF

TXINFORM 을 call 했을 때 결과가 저장되는 data structure.

Page 65: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 64

***************************************

* 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.

Page 66: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 65

2.2 함수들

2.2.1 FINIT

2.2.1.1 이 름

FINIT : 필드 버퍼를 초기화

2.2.1.2 사 용 방 법

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.

2.2.1.3 설 명

FINIT()는 필드 버퍼를 초기화할 때 사용된다. FDL-BUFFER 는 필드버퍼를 위해서 사용되는 레코드이고, 반드시 FDL 버퍼를 위해서는 4 바이트의 align 되어야 한다. FDL-LENGTH IN FDL-REC 은 FDL 버퍼로 초기화 되어야 하는 레코드의 길이다.

2.2.1.4 반 환 값

필드버퍼를 초기화하는데 성공하면, FDL-STATUS in FDL-REC 가 FOK 로 설정된다.실패하면, FDL-STATUS in FDL-REC 가 0 이 아닌 값이 설정되며, 아래와 같다. [FNOSPACE] 필드버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우

Page 67: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 66

2.2.1.5 참 조

FVFTOS

2.2.2 FVFTOS

2.2.2.1 이 름

FVFTOS : 필드버퍼로부터 COBOL 스트럭쳐로 데이터를 복사

2.2.2.2 사 용 방 법

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.

2.2.2.3 설 명

FVFTOS()는 필드버퍼로부터 COBOL record 로 데이터를 넣어둘 때 사용한다.FDL-BUFFER 는 FINIT 에 의해서 초기화된 필드버퍼의 포인터이다. DATA-REC 는 C 스트럭처의 포인터이다. VIEWNAME IN FDL-REC 은 COBOL 레코드를 설명하는 View 이름이다. 필드들은 필드버퍼로부터 VIEWNAME 에 있는 element descriptions 을 기초로한 스트럭처에 복사된다. 만약 필드 버퍼의 필드가 COBOL 레코드에 상대되는 필드가 없으면 무시된다. 만약 COBOL 리코드에 있는 특정한 element 가 필드 버퍼에 상대되는 필드가 없는 경우에는 null 값이 element 에 복사된다. COBOL 레코드에 Array 형태로 저장하기 위해서는, record element 는 OCCURS 로 정의되어야 한다. 만약 버퍼가 record element 보다 적은 갯수의 필드갯수를 가진다면, 남은 element 들은 view file 에서 지정한 default value 들로 채워진다. 반대로, 만약 버퍼가 record element 보다 큰 갯수의 필드를 가진다면, 나머지 occurrences 는 무시된다.

Page 68: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 67

2.2.2.4 반 환 값

성공하면, FDL-STATUS IN FDL-REC 는 FOK 로 설정된다.

실패하면, FDL-STATUS is 0 이 아닌 값으로 아래와 같이 설정된다.

[FBENOENT]

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

[FBENOSPACE]

필드 버페어 데이터를 저장하거나 복사할 공간이 부족할 경우

[FEINVAL]

input 인자로 지정한 값들 중에서 유효하지 않은 인자가 있다

[FBEBADFLD]

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

[FBEBADSTRUCT]

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

2.2.2.5 참 조

FVSTOF

Page 69: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 68

2.2.3 FVSTOF

2.2.3.1 이 름

FVSTOF : C 스트럭쳐로부터 필드버퍼로 데이터를 복사

2.2.3.2 사 용 방 법

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.

2.2.3.3 설 명

FVSTOF()는 C 스트럭처로부터 필드버퍼로 데이터를 전송할 때 사용한다.FDL-BUFFER 는 필드 버퍼를 포함하는 레코드이다. DATA-REC 는 COBOL record 이다. FDL-REC 의 VIEWNAME 은 COBOL record 를 지정하기 위해서 사용한 view 이름이다. FDL-MODE IN FDL-REC 는 필드버퍼에 데이터를 넣어주는 방법을 지정한다.

FDL-MODE 의 네가지 값 :

FUPDATE

FOJOIN

FJOIN

FCONCAT

이 mode 들은 각각 c 함수의 Fupdate(3), Fojoin(3), Fjoin(3), and Fconcat 와 같은 방식으로 동작한다.

Page 70: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 69

2.2.3.4 반 환 값

성공하면, FDL-STATUS IN FDL-REC 에는 FOK 가 설정된다.

실패하면, FDL-STATUS 에는 0 이 아닌 값이 아래와 같이 설정된다.

[FBENOENT]

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

[FBENOSPACE]

필드 버페어 데이터를 저장하거나 복사할 공간이 부족할 경우

[FEINVAL ]

input 인자로 지정한 값들 중에서 유효하지 않은 인자가 있다

[FBEBADFLD]

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

[FBEBADSTRUCT]

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

[FBEMALLOC]

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

2.2.3.5 참 조

FVFTOS

Page 71: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 70

2.2.4 TP_SLEEP

2.2.4.1 이 름

TP_SLEEP : 데이터의 도착을 초 단위로 기다리는 함수 (서버/클라이언트)

2.2.4.2 사 용 방 법

int TP_SLEEP (int sec, cbl_tpstatus_t *status)

2.2.4.3 설 명

TP_SLEEP 은 최대 sec 시간동안 sleep 하다가 그 안에 데이터가 도착하면 즉시 return 한다. sec 는 기다리고자 하는 시간을 초 단위인 양의 정수 값을 입력해야 한다

2.2.4.4 오 류

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

[TPESYSTEM]

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

[TPEOS]

운영 시스템에 에러가 발생하였다

2.2.4.5 반 환 값

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

Page 72: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 71

2.2.4.6 참 고

TPACALL, TPGETRPLY

2.2.5 TPACALL

2.2.5.1 이 름

TPACALL : 비동기 서비스 요청 송신 함수

2.2.5.2 사 용 방 법

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.

2.2.5.3 설 명

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

Page 73: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 72

DATA-REC 의 REC-TYPE 과 SUB-TYPE 은 SERVICE-NAME 가 지원하는 유형들이어야 한다.만약 서비스 요청이 트랜잭션 모드에서 송신되었다면, 각 요청에 대한 응답들은 반드시 수신되어야 한다.

TPSVCDEF-REC 에 설정할 수 있는 값.

TPBLOCK

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

TPNOTRAN

만약 TPACALL 함수 호출자가 트랜잭션 모드 상태에서 이 설정을 이용하여 SERVICE-NAME 을 요청하였다면 , SERVICE-NAME 서비스는 트랜잭션 모드에서 제외되어 수행된다 . 트랜잭션 모드에서 트랜잭션을 지원하지 않는 SERVICE-NAME 를 호출한다면 반드시 이 설정을 이용해야 한다. 트랜잭션 모드 내에서의 TPACALL 함수 호출시 , TPNOTRAN 로 설정되었어도 여전히 트랜잭션 타임아웃 (timeout)에 영향을 받는다 . 만약 TPNOTRAN 으로 호출된 서비스가 실패하였을 경우 , 호출자의 트랜잭션에는 영향을 미치지 않는다 .TPNOREPLY 응답을 기다리지 않고 즉시 return 한다. 서비스가 정상적으로 호출되면 TPOK 가 리턴되고, COMM-HANDLE IN TPSVCDEF-REC 에 0 이 설정된다. 함수 호출자가 트랜잭션 모드에 있을 경우에는 반드시 TPNOTRAN 와 함께 설정해야만 TPNOREPLY 를 사용할 수 있다. TPNOREPLY 의 경우 서비스 상태의 정상 여부를 체크하기 위해서는 TPBLOCK 를 함께 설정해야 한다 . TPBLOCK 를설정하지 않으면 서비스가 NRDY 인 경우에도 에러를 리턴하지 않는다 .

TPNOBLOCK

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

Page 74: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 73

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

TPNOTIME

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

TPSIGRSTRT

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

2.2.5.4 반 환 값

성공하면, TP-STATUS 는 TPOK 로 설정된다.

실패하면, TP-STATUS 는,

[TPEINVAL]

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

[TPENOENT]

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

[TPEITYPE]

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

Page 75: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 74

[TPELIMIT]

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

[TPETRAN]

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

[TPETIME]

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

[TPEBLOCK]

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

[TPEGOTSIG]

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

[TPEPROTO]

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

[TPESYSTEM]

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

Page 76: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 75

[TPEOS]

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

2.2.5.5 참 고

TPCALL, TPCANCEL, TPGETRPLY

2.2.6 TPCALL

2.2.6.1 이 름

TPCALL : 동기형 서비스 요청 송수신 함수

2.2.6.2 사 용 방 법

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.

Page 77: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 76

2.2.6.3 설 명

TPCALL 은 요청을 보내고 응답을 기다린다. 이 함수를 호출하는 것은 TPACALL() 호출 후연속적으로 TPGETRPLY 를 호출하는 것과 동일하다. TPCALL 은 TPSVCDEF-REC 의 SERVICE-NAME 으로 서비스 요청을 주고 받는다. 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 가 input 으로 0 을 갖는 것은 에러이다.

아래의 값들이 TPSVCDEF-REC 에 설정될 수 있다.

TPNOTRAN

만약 호출자가 크랜잭션 모드 상태에서 이 설정이 이용하여 SERVICE-NAME 서비스를 요청하였다면, 트랜잭션 모드에서 제외되어 수행된다. 트랜잭션 모드에서,트랜잭션을 지원하지 않는 서비스를 호출할 때는 이 설정이 반드시 사용되어야 한다. 트랜잭션 모드내에서 TPNOTRAN 을 설정하여 TPCALL 을 사용하여도 여전히트랜잭션 타임아웃의 영향을 받는다. 만약 TRNOTRAN 으로 호출된 서비스가 실패하였을 경우, 호출자의 트랜잭션에는 영향을 미치지 않는다.

Page 78: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 77

TPNOCHANGE

일반적으로 수신된 응답버퍼 ODATA-REC 가 가리키는 버퍼의 유형이 다르다면,버퍼 유형은 수신자가 인식할 수 잇는 한도내에서 수신되 응답버퍼 유형으로 변경된다.그러나 TPNOCHANGE 가 설정되었다면, ODATA-REC 가 가리키는 유형은 변경되지 않는다.즉, 응답된 레코드의 type 과 sub-type 반드시 REC-TYPE IN OTPTYPE-REC 와 SUB-TYPE IN OTPTYPE-REC 과 각각 일치해야 한다.

TPNOBLOCK

TPNOBLOCK 을 설정한 상태에서, 블로킹(blocking)상황을 만나면(예를들어, 내부버퍼가 송신할 메시지들로 가득한 경우), 서비스 요청은 실패한다. TPNOBLOCK 설정없이 호출하면, 블로킹 상황이 발생하면 함수 호출자는 블로킹 상황이 풀리거나 타임아웃(트랜잭션 타이아웃이나 블로킹 타임아웃)이 발생할 때까지 기다리게 된다.

TPNOTIME

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

TPSIGRSTRT

시그널(signal) 인터럽트를 수용하고자할 때 사용한다. 내부에서 시그널 인터럽트가 발생하여 시스템 함수 호출이 방해될 때 시스템 함수 호출이 재실행된다. 만약, 이 값이 설정되지 않은 경우 시그널 인터럽트가 발생하였다면, 함수는 실패되고 TPSTATUS 에 TPGOTSIG 가 설정된다.

2.2.6.4 반 환 값

성공하면, TP-STATUS 에 TPOK 가 설정된다.TP-STATUS 에 TPOK 나 TPESVCFAIL 가 설정될 때, TPSTATUS-REC 의 APPL-RETURN-CODE 는 TPRETURN 의 한 부분으로 보내지는 applicatin 이 지정한 값을 포함한다.

Page 79: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 78

만약 수신되는 메시지의 크기가 지정된 LEN 보다 크면, TPTRUNCATE 가 설정되고, 단지 LEN 만큼의 데이터만 ODATA-REC 에 들어가고 나머지 데이터는 무시된다.

실패하면, 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 어느 것도 지정되지

Page 80: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 79

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

[TPESVCFAIL]

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

[TPESVCERR]

서비스 루틴 수행중이나 TPRETURN 수행 중에 에러가 발생하였다(예를 들어, 잘못된 인수가 전달된 경우). 이 에러가 발생하면 어떠한 응답 데이터도 return 되지않는다 (즉, 이 경우에 OTPTYPE-REC 의 ODATA-REC 와 LEN 모두 변경되지 않는다). 그리고 Tmax 환경파일에 서비스별로 SVCTIMEOUT 을 설정할 수 있는데 서비스의 수행 시간이 이 시간을 초과하게 되면 서비스는 수행을 멈추고 TPESVCERR 를 리턴한다 .

[TPEBLOCK]

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

[TPEGOTSIG]

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

Page 81: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 80

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

[TPESYSTEM]

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

[TPEOS]

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

2.2.7 TPCANCEL

2.2.7.1 이 름

TPCANCEL : 응답 취소 함수

2.2.7.2 사 용 방 법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPCANCEL" USING TPSVCDEF-REC TPSTATUS-REC.

2.2.7.3 설 명

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

2.2.7.4 반 환 값

성공하면, TP-STATUS 는 TPOK 으로 설정된다.

실패하면, TP-STATUS 는 아래의 값들이 설정된다.

Page 82: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 81

[TPEBADDESC]

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

[TPETRAN]

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

[TPEPROTO]

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

[TPESYSTEM]

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

[TPEOS]

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

2.2.7.5 참 고

TPACALL

2.2.8 TPFORWARD

2.2.8.1 이 름

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

2.2.8.2 사 용 방 법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

Page 83: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 82

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

2.2.8.3 설 명

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

이 함수는 DATA-REC 에 저장된 데이터를 사용하여 SERVICE-NAME 로 명명된 서비스에게 요청을 forward 한다. 요청을 forward 하는 서비스 루틴은 어떤 응답도 수신하지 않는다. 요청이 forward 된 후, 서비스 루틴은 Tmax 시스템에게로 returm 된다. 그리고 서버는 자유롭게 다른 작업을 수행할 수 있다. TPFORWARD 는 요청자로부터 아무 응답도 기대하지 않기 때문에, 특별한 에러없이 어떤 서비스에게든지 forward 될 수 있다.

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

최종적으로 TPFORWARD 된 서비스가 TPRETURN 을 이용하여 가장 처음 서비스를 요청한 클라이언트에게 응답을 보낸다. 즉, TPFORARD 는 응답을 기다리고 있는 요청자에게 응답을 송신하는 책임을 다른 서버 프로세스에게 전가하는 것으로, 멀티 노드간에도 서비스가 이루어진다. TPFORWARD 는 서비스 루틴이 요청한 모든 서비스들에 대한 응답을

Page 84: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 83

받은 후에 호출되어야 한다. 수신되지 않은 응답에 대한 구별자들은 무효화되고 FORWARD 요청은 전송되지 않는다.

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

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

2.2.8.4 반 환 값

서비스 루틴은 호출자인 Tmax 시스템에서 어떤 값도 return 하지 않는다 . 즉,

TP-STATUS 는 설정되지 않는다.

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

[TPESVCERR]

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

[TPETIME]

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

Page 85: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 84

2.2.8.5 참 조

TPRETURN

2.2.9 TPGETLEV

2.2.9.1 이 름

TPGETLEV : 트랜잭션 모드에 있는지를 확인하는 함수

2.2.9.2 사 용 방 법

01 TPTRXLEV-REC.

COPY TPTRXLEV.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPGETLEV" USING TPTRXLEV-REC TPSTATUS-REC.

2.2.9.3 설 명

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

현재는, TP-NOT-IN-TRAN and TP-IN-TRAN 2 개의 트랜잭션 모드가 정의되어 있다.

2.2.9.4 반 환 값

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

2.2.10 TPGETRPLY

2.2.10.1 이 름

TPGETRPLY : 비동기적으로 요청한 서비스에 대한 응답 수신 함수

Page 86: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 85

2.2.10.2 사 용 방 법

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.

2.2.10.3 설 명

TPGETRPLY 는 이전에 TPACALL 로 요청한 서비스에 대한 응답을 수신한다 . 성공적으로 데이터를 수신하면, LEN 은 DATA-REC 에 저장된 실제로 저장된 데이터의 길이를 가진다. TPTYPE-REC 의 REC-TYPE 과 SUB-TYPE 은 각각 송신된 데이터 유형과 하위 유형을 갖는다. 보통 이 함수는 COMM-HANDLE 와 일치하는 응답이 수신되거나 또는 타임 아웃이 발생할 때까지 기다린다. 일반적으로 COMM-HANDLE 는 응답이 수신된 후에는 더 이상 유효하지 않다. 만약 LEN 이 0 으로 return 되었다면 , 어떤 응답도 수신되지 않고 LEN 이 지시하는 ODATA-REC 버퍼에 아무런 변화가 없다 . LEN 에 0 이 INPUT 으로 이용될 수는 없다.

만약 응답이 DATA-REC 보다 크면, DATA-REC 에는 그 크기만큼의 데이터만 가진다. 응답의 나머지는 무시되고, TPTRUNCATE 가 설정된다.

아래가 TPSVCDEF-REC 에 설정될 수 있는 값들이다.

TPGETANY 입력값으로 지정한 COMM-HANDLE in TPSVCDEF-REC 를 무시하고, 수신 가능한 응답을 RETURN 하도록 한다. 이 때 COMM-HANDLE 는 응답에 대한 호출 구별자가 된다. 만약 아무런 응답이 없으면, 일반적으로 TPGETRPLY 는 응답이 도착하기를 기다린다.

Page 87: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 86

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

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

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

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

2.2.10.4 반 환 값

성공적으로 처리되면 1 을 return 하며 TPRETURN 으로 전달되는 APPL-RETURN-CODE 전역 변수는 TPGETRPLY 가 성공적으로 return 되었거나 TP-STATUS 가 [TPESVCFAIL]인 경우 , 응용 프로그램 (application)에서 정의한 값을 갖게 된다 . 그렇지 않으면 -1 을 return 하고, TP-STATUS 에 에러 상황에 해당하는 값이 설정된다 .

실패하면, TP-STATUS 에는 아래의 값들이 설정된다.

[TPEINVAL]

Page 88: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 87

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

[TPEBADDESC]

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

[TPEOTYPE]

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

[TPETIME]

타임아웃이 발생하였다. 함수 호출자가 트랜잭션 모드에 있다면, 트랜잭션 타임아웃이 발생하였고 그 트랜잭션은 rollback 될 것이다. 트랜잭션 모드가 아니고 TPNOTIME 과 TPNOBLOCK 어느 것도 지정되지 않았다면, 블로킹 타임아웃이 발생하였다 . 이 두 경우에, DATA-REC 의 내용과 LEN 은 변경되지 않는다. 트랜잭션 타임아웃이 발생하였다면, 새로운 서비스 요청을 송신한다거나 응답을 기다리는 일은 트랜잭션이 rollback 될 때까지 [TPETIME]에러로 실패하게 된다 .

[TPESVCFAIL]

서비스 요청에 대한 응답을 송신하는 서비스 루틴이 응용 프로그램상의 에러가 발생하여 TPFAIL 로 TPRETURN 을 호출하였다 . 서비스 응답이 수신 되었다면 , 그 내용들은 DATA-RECDP 저장되어 사용될 수 있다 . 함수 호출자가 트랜잭션 모드에 있다면, 그 트랜잭션은 rollback 될 것이다. 트랜잭션 타임아웃이 발생하기 전까지는, 트랜잭션이 rollback 되기 전에 다른 통신들이 시도될 수 있다 . 그러한 통신들은 정상적으로 처리될 수도 있고 , 또는 실패할 수도 있다 .

Page 89: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 88

이들이 제대로 수행되기 위해서는 TPNOTRAN 이 설정되어야 한다. 호출자의 트랜잭션 모드에서 수행된 작업들은 트랜잭션 완료 시에 모두 rollback 된다 .

[TPESVCERR]

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

[TPEBLOCK]

TPNOBLOCK 이 설정된 상태에서 , 블로킹 상황이 발생하였다 . 구별자는 유효하다 .

[TPGOTSIG]

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

[TPEPROTO]

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

[TPESYSTEM]

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

[TPEOS]

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

2.2.10.5 참 고

TPACALL, TPCANCEL, TPRETURN

Page 90: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 89

2.2.11 TPRETURN

2.2.11.1 이 름

TPRETURN : Tmax 서비스 종료 함수

2.2.11.2 사 용 방 법

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.

2.2.11.3 설 명

TPRETURN 는 서비스 루틴의 완료를 의미한다. TPRETURN 은 EXIT PROGRAM statement 과 같은 역할로서 TPRETURN 이 호출되면 서비스 루틴은 Tmax 시스템에게 RETURN 된다. Tmax 시스템으로 올바로 RETURN 되기 위해서는, TPRETURN 은 Tmax 시스템이 제어하는 서비스 루틴내에서 호출되는 것이 바람직하다.

TPRETURN 는 서비스의 응답 메시지를 송신한다. 만약 응답을 수신할 프로그램이 TPCALL 이나 TPGETRPLY, 또는 TPRECV 로 응답을 기다리고 있다면, 그 응답은 TPRETURN

호출이 성공한 후 수신자의 버퍼를 통해 전달된다 .

만약 서비스 루틴이 자동 트랜잭션 모드에 있는데, 해당 서비스를 호출한 클라이언트가 명시적으로 트랜잭션을 시작하지 않으면 (즉, TXBEGIN 을 사용하지 않으면 ) TPRETURN 은 트랜잭션의 한 부분으로서 TPSUCCESS 을 사용하면 commit, TPFAIL 을 사용하면 rollback 된다.

Page 91: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 90

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

TPRETURN 은 서비스 루틴에서 요청된 서비스들로부터 모든 응답을 수신한 후에 호출되어야 한다 . 그렇지 않으면 , 서비스 특성에 따라 [TPESVCERR] 에러나

TPEV_SVCERR 이벤트가 서비스 루틴과 통신하는 프로그램에게 return 된다 .

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 로 return 되면 , TPEV_SVCSUCC 이벤트가 발생된다 .

TPFAIL

서비스가 응용 프로그램상의 실패로 종료되었다 . 응답을 수신하는 프로그램에 에러가 return 된다 . 즉, 응답을

Page 92: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 91

수신하는 호출이 실패하고 수신자는 [TPSVCFAIL] 값이나 TPEV_SVCFAIL 이벤트를 수신한다 . 호출자가 트랜잭션 모드에 있고 autotransaction 인 경우 tpreturn()은 트랜잭션을 rollback 되도록 할 것이다 . 그 트랜잭션이 이미 rollback 상태로 결정되어 있을 수도 있다 . 이 인수는 데이터를 송신할 수 없다 .

TPEXIT

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

TPDOWN

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

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

APPL-CODE 에서 넘겨주는 데이터는 TPSTATUS-REC 의 APPL-RETURN-CODE 로 전달되어 사용할 수 있다.

DATA-REC 는 송신되는 송신 데이터이고, LEN 은 송신된 데이터의 길이이다. 만약 DATA-REC 이 길이 명시가 필요 없는 버퍼를 가리킨다면 , LEN 은 무시된다 (보통 0 이 사용된다 ). 만약 REC-TYPE 이 SPACES 이면, DATA-REC 과 LEN 은 무시된다 DATA-REC 이 길이 명시가 필요한 버퍼를 가리킨다면 , LEN 은 0 이 될 수 없다 . 만약 data 가 NULL 이면 , len 은 무시된다 . 이 경우 , 서비스를 호출한 프로그램이 응답을 기대하고 있다면 , 아무 데이터도 없는 응답이 송신된다 . 만약, 응답이 기대되지 않는다면 TPRETURN 은 어떤 데이터든 제거하고, 송신하는 응답없이 return 한다 . REC-TYPE 이 STRNG 이고 LEN 이 0 이면, 요청은 데이터없이 전달된다.

Page 93: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 92

2.2.11.4 반 환 값

서비스 루틴은 호출자, 즉 Tmax 시스템에게 어떤 값도 return 하지 않는다 . 서비스 루틴은 TPRETURN(EXIT PROGRAM 을 포함하는)을 사용하여 종료되는 것이 원칙이다 . 만약 서비스 루틴이 TPRETURN 을 사용하지 않으면서 (예를 들어 , COBOL 의 EXIT PROGRAM 문을 곧바로 사용) return 한다면, 서버는 서비스 요청자에게 서비스 에러를 return 한다 .

만약 서버가 트랜잭션 모드에 있었다면 , 그 트랜잭션은 rollback 이 표시될 것이다.

또한 TPRETURN 이 서비스 루틴 외부에서 사용되었을 경우 , 예를 들어 서비스가 아닌 루틴에서 사용된 경우 , 이는 아무런 일도 하지 않고 단순히 return 하게 된다 .

2.2.11.5 오 류

TPRETURN 이 서비스 루틴을 종료시키기 때문에 , 인수를 처리하는 중에 에러가 발생하면 호출자인 서비스 루틴에게 알려지지 못한다 . 그러한 에러들은 동기와 비동기 통신 , 즉 TPCALL 또는 TPGETRPLY 로 서비스 결과를 수신하는 프로그램에 대해서는 TP-STATUS 가 [TPESVCERR]이 되고 , 대화형 통신 , 즉 TPSEND 나 TPRECV 를 사용하는 프로그램에 대해서는 TPEV_SVCERR 이벤트를 발생시킨다 .

2.2.11.6 참 조

TPCALL, TPGETRPLY

Page 94: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 93

2.2.12 TPSVCSTART

2.2.12.1 이 름

TPSVCSTART : Tmax 서비스를 시작하는 함수

2.2.12.2 사 용 방 법

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.

2.2.12.3 설 명

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

2.2.12.4 반 환 값

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

실패하면, TP-STATUS 에 아래의 값들이 설정된다.

[TPEINVAL]

Page 95: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 94

인수가 유효하지 않다.

[TPEPROTO]

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

[TPESYSTEM]

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

[TPEOS]

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

2.2.12.5 참 고

TPSVRINIT, TPSVRDONE, TXBEGIN, TPCALL

2.2.13 TPSVRDONE

2.2.13.1 이 름

TPSVRDONE : 서버 프로세스를 종료하는 함수

2.2.13.2 사 용 방 법

01 TPSTATUS-REC.

COPY TPSTATUS.

PROCEDURE DIVISION.

* User code

EXIT PROGRAM.

2.2.13.3 설 명

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

Page 96: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 95

트랜잭션이 정의될 수도 있다. 만약 TPSVRDOEN 이 대화형 연결을 유지하고 있다거나 비동기성 응답을 여전히 기다리고 있다거나, 또는 트랜잭션 모드에 있는 동안 RETURN 한다면, Tmax 는 대화형 연결을 종료하고, 기다리고 있던 비동기성 응답 등을 무시하고, 트랜잭션을 중시힐 것이다, 그리고 그 서버는 바로 종료하게 된다.

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

2.2.13.4 참 고

TPSVRINIT

2.2.14 TPSVRINIT

2.2.14.1 이 름

TPSVRINIT : Tmax 서버 초기화 함수

2.2.14.2 사 용 방 법

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.

Page 97: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 96

2.2.14.3 설 명

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

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

성공하면, TP-STATUS 는 TPOK 를 전달하고, 서비스는 성공적으로 요청을 받을 수 있게 된다. TPSVRINIT 수생중에 에러가 발생하면, TP-STATUS 에 -1 을 전달하고 서버는 종료되면서 어떤 서비스 요청도 받을 수 없다.

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

2.2.14.4 참 고

TPSVRDONE

2.2.15 TXBEGIN

2.2.15.1 이 름

TXBEGIN : 전역(global) 트랜잭션을 시작하는 함수

2.2.15.2 사 용 방 법

01 TPTRXDEF-REC.

Page 98: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 97

COPY TPTRXDEF.

CALL "TXBEGIN" USING TPTRXDEF-REC.

2.2.15.3 설 명

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

이나 TPROLLBACK 를 호출하여야 한다. 트랜잭션을 시작하기 위하여

반드시 TXBEGIN 을 직접적으로 호출할 필요가 없는 연속 (chaining) 트랜잭션의 경우도존재한다 . 상세한 내용은 TPCOMMIT 과 TPROLLBACK 를 참조하면 된다 .

2.2.15.4 반 환 값

성공하면, TX-STATUS 는 TX-OK 로 설정된다.

실패하면, TX-STATUS 는

[TX-OUTSIDE]

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

[TX-PROTOCOL-ERROR]

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

[TX-ERROR]

Page 99: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 98

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

[TX-FAIL]

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

2.2.15.5 참 고

TPROLLBACK, TPCOMMIT, TPGETLEV

2.2.16 TXCOMMIT

2.2.16.1 이 름

TXCOMMIT : 전역 트랜잭션(Global transaction)을 commit 하는 함수

2.2.16.2 사 용 방 법

DATA DIVISION.

* Include TX definitions.

01 TX-RETURN-STATUS.

COPY TXSTATUS.

PROCEDURE DIVISION.

CALL "TXCOMMIT" USING TX-RETURN-STATUS.

2.2.16.3 설 명

TXCOMMIT 함수는 트랜잭션 작업을 commit 하는데 사용된다. 만약, transaction-control 특성(TTXSETTRANCTL 참고)이 TX-UNCHAINED 라면, TXCOMMIT 이 return 할 때 호출자는 더이상 트랜잭션 모드에 있지 않다.

Page 100: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 99

그러나 transaction-control 특성(TTXSETTRANCTL 참고)이 TX-CHAINED 라면, TXCOMMIT 이 return 할 때 호출자는 새로운 트랜잭션을 위하여 트랜잭션 모드로 남아있게 된다.

성공적으로 완료하면, TX-RETURN-STATUS 이 반환값으로 이용된다.

2.2.16.4 반 환 값

성공하면, TXCOMMIT 은 음수가 아닌 TX-OK 를 반환한다.실패하면, TX-STATUS 에는 음수값으로 아래의 값들을 RETURN 한다.

[TX-NO-BEGIN]

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

[TX-ROLLBACK]

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

[TX-ROLLBACK-NO-BEGIN]

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

[TX-MIXED]

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

[TX-MIXED-NO-BEGIN]

트랜잭션이 일부는 commit 되었고 일부는 rollback 되었다 . 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상

Page 101: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 100

트랜잭션 모드에 있지 않다 . 이 return 값은 transaction-control 특성이 TX-CHAINED 일 때에만 발생될 수 있다 .

[TX-HAZARD]

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

[TX-HAZARD-NO-BEGIN]

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

[TX-PROTOCOL-ERROR]

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

[TX-FAIL]

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

2.2.16.5 참 고

TXBEGIN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.2.17 TXINFORM

2.2.17.1 이 름

TXINFORM : 전역 트랜잭션 정보를 return 하는 함수

Page 102: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 101

2.2.17.2 사 용 방 법

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.

2.2.17.3 설 명

TXINFORM 는 TX-INFO-AREA 를 통해서 전역 트랜잭션 정보를 알려준다. 트랜잭션 모드에서 TXINFORM 이 수행되면, TX-IN-TRAN 이 설정되고, XID-REC 는 현재 트랜잭션의 brandch identifier 가 되고 TRANSACTION-STATE 는 현재 트랜잭션의 상태가 된다. 호출자가 트랜잭션 모드에 있지 않으면, TX-NOT-IN-TRAN 이 설정되고 XID-REC 는 null XID 를 갖게 된다 (자세한 사항은 TXINTRO 를 참고). 또한, 호출자가 트랜잭션 모드에 있는 것과 관계없이 COMMIT-RETURN, TRANSACTION-CONTROL, 그리고 초단위 TRANSACTION-TIMEOUT 값을 포함한다.

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

2.2.17.4 반 환 값

TX-RETURN-STATUS 를 통해서 반환값을 이용한다.

성공하면, TXINFO 는 음수가 아닌 TX-OK 를 반환하고

(호출자가 트랜잭션 모드에 있다면 1 을 반환하고, 호출자가 트랜잭션 모드에 있지 않다면 0 을 반환한다.)

Page 103: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 102

실패하면, 아래의 음수값을 반환한다.

[TX-PROTOCOL-ERROR]

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

[TX-FAIL]

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

2.2.17.5 참 고

TXOPEN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.2.18 TXROLLBACK

2.2.18.1 이 름

TXROLLBACK : 전역 트랜잭션을 rollback 한다

2.2.18.2 사 용 방 법

01 TPTRXDEF-REC.

COPY TPTRXDEF.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TXROLLBACK" USING TPTRXDEF-REC.

2.2.18.3 설 명

트랜잭션의 rollback 시키는데 사용된다, 만약 transaction-contraol 특성(TXSETTRANSACTIONCONTROL)이 TX-UNCHAINED 라면 TXROLLBACK 이 리턴할 때, 호출자는 더 이상 트랜잭션 모드에 있지

Page 104: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 103

않다. 그러나 TRANSACTION-CONTROL 특성이 TX-CHAINED 라면, TXROLLBACK 이 리턴할 때 호출자는 새로운 트랜잭션을 위한 트랜잭션 모드로 남아있게 된다.

2.2.18.4 반 환 값

성공하면, TX-STATUS 는 TP-OK 로 설정된다.

실패하면, TX-STATUS 에는 아래의 음수값들이 설정된다.

[TX-NO-BEGIN]

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

[TX-MIXED]

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

[TX-MIXED-NO-BEGIN]

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

[TX-HAZARD]

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

[TX-HAZARD-NO-BEGIN]

에러로 인하여 , 트랜잭션이 일부는 commit 되거나 일부는 rollback 되었을 수 있다 . 새로운 트랜잭션은 시작될 수 없고

Page 105: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 104

호출자는 더 이상 트랜잭션 모드에 있지 않다 . 이 return 값은 transaction-control 특성이 TX-CHAINED 일 때에만 발생될 수 있다 .

[TX-COMMITTED]

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

[TX-COMMITTED-NO-BEGIN]

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

[TX-PROTOCOL-ERROR]

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

[TX-FAIL]

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

2.2.18.5 참 고

TXBEGIN, TPCOMMIT, TPGETLEV, TPACALL

2.2.19 TXSETCOMMITRET

2.2.19.1 이 름

TXSETCOMMITRET : commit-return 의 특성을 설정하는 함수

Page 106: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 105

2.2.19.2 사 용 방 법

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.

2.2.19.3 설 명

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

사용 가능한 값은 다음과 같다 .

TX-COMMIT-DECISION-LOGGED

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

Page 107: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 106

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

TX-COMMIT-COMPLETED

TX-COMMIT-COMPLETED 는 2PC 프로토콜이 완전하게 종료된 후에 TXCOMMIT 이 return 하도록 한다 . 이 설정은 트랜잭션이 독자적인 (heuristic) 결과를 갖게 되었거나 또는 그럴 가능성을 알리는 return 코드를 TXCOMMIT 의 호출자에게 보여준다 . 트랜잭션 관리자는 옵션으로 이 특징을 지원하지 않도록 선택할 수 있으며 , 이 때 이 값을 지원하지 않음을 나타내는 [TX-NOT-SUP-PORTED] 값으로 return 하게 된다 .

2.2.19.4 반 환 값

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

2.2.19.5 오 류

다음과 같은 상황에서 , TXSETCOMMITRET 는 commit-return 특성 설정은 변경하지 않고

다음의 음수값 중 하나를 return 한다 .

[TX-EINVAL]

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

Page 108: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 107

[TX-PROTOCOL-ERROR]

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

2.2.19.6 참 고

TXCOMMIT, TXOPEN, TXINFORM, TXGBEGIN, TXROLLBACK

2.2.20 TXSETTIMEOUT

2.2.20.1 이 름

TXSETTIMEOUT : transaction-timeout 설정 함수

2.2.20.2 사 용 방 법

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.

2.2.20.3 설 명

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

Page 109: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 108

TXSETTIMEOUT 은 함수 호출자가 트랜잭션 모드에 있는지와 상관없이 호출 가능하다 . 만약 TXSETTIMEOUT 이 트랜잭션 모드에서 호출된다면, 새로운 타임아웃 값은 다음 트랜잭션때부터 적용된다 .

transaction-timeout 의 초기값은 0 으로써 , 이는 타임아웃 제한이 없음을 의미한다 .

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

성공하면, TXSETTIMEOUT 음수가 아닌 TX-OK 을 반환하고, 실패하면, TXSETTIMEOUT 는기존의 transaction-timeout 값 변경없이 다음의 음수값 중 하나를 return 한다 .

[TX-EINVAL]

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

[TX-PROTOCOL-ERROR]

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

[TX-FAIL]

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

2.2.20.4 참 고

TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM

2.2.21 TXSETTRANCTL

2.2.21.1 이 름

TXSETTRANCTL : transaction_control 특성을 설정하는 함수

Page 110: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 109

2.2.21.2 사 용 방 법

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.

2.2.21.3 설 명

TXSETTRANCTL 은 transaction_control 특성을 TRANSACTION-CONTROL 에 설정된 값으로 설정한다 . 이 특성은 TXCOMMIT 과 TXROLLBACK 이 호출자에게 리턴하기 전에 새로운 트랜잭션을 시작할 지 여부를 결정한다. TXSETTRANCTL 함수는 응용 프로그램이 트랜잭션 모드에 있는지 여부와 관계없이 호출 가능한다. 이 설정은 TXSETTRANCTL 이 재호출에 의햇 변경될 때까지 유효하게 적용된다. TRANSACVTION-CONTROL 특성의 초기 설정값은 TX-UNCHAINED 이다.

Transactioin_control 로 사용 가능한 값은 다음과 같다.

TX-UNCHAINED

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

TX-CHAINED

TXCOMMIT 과 TXROLLBACK 이 그들의 호출자에게 리턴하기 전에 새로운 트랜잭션을 시작하도록 한다.성공하면, TXSETTRANCTL 은 음수가 아닌 TX-OK 을 반환하고,

Page 111: Tmax Cobol Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · Tmax COBOL Guide 2 본 서는 Tmax Standard와 옵션 중에 굵게 기울임꼴로 인쇄되어 있는 내용을

Tmax COBOL Guide 110

실패하면, TXSETTRANCTL 은 기존의 TRANSACTION-CONTROL 특성 변경없이, 아래의 음수값을 리턴한다.

[TX-EINVAL]

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

[TX-PROTOCOL-ERROR]

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

[TX-FAIL]

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

2.2.21.4 참 고

TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM