Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL...

92
Tmax COBOL User Guide Tmax v5.0 SP1 Copyright © 2009 TmaxSoft Co., Ltd. All Rights Reserved.

Transcript of Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL...

Page 1: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

Tmax

COBOL User Guide

Tmax v5.0 SP1

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

Page 2: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

Copyright Notice

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

대한민국 경기도 성남시 분당구 서현동 263 분당스퀘어(AK프라자) 12층

Restricted Rights Legend

All TmaxSoft Software (Tmax®) and documents are protected by copyright laws and the Protection Act of Com

puter Programs, and international convention. TmaxSoft software and documents are made available under the

terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms of this

agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any

means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd.

이 소프트웨어(Tmax®) 사용설명서의 내용과 프로그램은 저작권법, 컴퓨터프로그램보호법 및 국제 조약에 의해

서 보호받고 있습니다. 사용설명서의 내용과 여기에 설명된 프로그램은 TmaxSoft Co., Ltd.와의 사용권 계약 하에

서만 사용이 가능하며, 사용권 계약을 준수하는 경우에만 사용 또는 복제할 수 있습니다. 이 사용설명서의 전부 또

는 일부분을 TmaxSoft의 사전 서면 동의 없이 전자, 기계, 녹음 등의 수단을 사용하여 전송, 복제, 배포, 2차적 저

작물작성 등의 행위를 하여서는 안 됩니다.

Trademarks

Tmax®, Tmax WebtoB® and JEUS® are registered trademark of TmaxSoft Co., Ltd. Other products, titles or

services may be registered trademarks of their respective companies.

Tmax®, Tmax WebtoB® 와 JEUS®는 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각

각 해당 소유주의 상표로서 참조용으로만 사용됩니다.

Open Source Software Notice

This product includes various open source software that has been developed and/or licensed by “OpenSSL”, “RSA

Data Security, Inc.”, “Apache Foundation”, or “Jean-loup Gailly and Mark Adler.” TmaxSoft fully respects the

aforementioned parties and the open source software used in this product. More details can be found within the

directory “${INSTALL_PATH}/license/oss_licenses”

본 제품은 “OpenSSL”, “RSA Data Security, Inc.”, “Apache Foundation” 및 “Jean-loup Gailly와 Mark Adler”에 의

해 개발 또는 라이선스된 오픈 소스 소프트웨어를 포함합니다. 오픈 소스 소프트웨어와 개발자에 대해 경의를 표

합니다. 관련 상세 정보는 제품의 디렉터리 “${INSTALL_PATH}/license/oss_licenses”에 기재된 사항을 참고해 주

십시오.

안내서 정보

안내서 제목: Tmax COBOL User Guide

발행일: 2009-08-10

소프트웨어 버전: Tmax v5.0 SP1

안내서 버전: v2.1.1

Page 3: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

내용 목차

안내서에 대하여 ............................................................................................................................ v

제1장 환경설정 ........................................................................................................................... 1

1.1. 디렉터리 구조 .............................................................................................................. 1

1.2. 환경 변수 설정 ............................................................................................................. 2

1.3. 환경 파일 설정 ............................................................................................................. 2

1.4. Sample 파일 설치 ......................................................................................................... 4

제2장 프로그램 작성 ................................................................................................................... 7

2.1. 데이터 저장 ................................................................................................................. 7

2.1.1. TPSTATUS ........................................................................................................ 7

2.1.2. TPTYPE ........................................................................................................... 8

2.1.3. TPSVCDEF ....................................................................................................... 8

2.1.4. TPINFDEF ........................................................................................................ 9

2.1.5. TPSVCRET ..................................................................................................... 10

2.1.6. TPTRXDEF ..................................................................................................... 10

2.1.7. TPCMTDEF .................................................................................................... 10

2.1.8. TPAUTDEF ..................................................................................................... 10

2.1.9. TPPRIDEF ...................................................................................................... 11

2.1.10. TPTRXLEV ................................................................................................... 11

2.1.11. TPBCTDEF ................................................................................................... 11

2.1.12. FDL-INFO ..................................................................................................... 12

2.1.13. TPEVTDEF ................................................................................................... 13

2.1.14. TXSTATUS .................................................................................................... 14

2.1.15. TXINFDEF .................................................................................................... 15

2.2. 함수 목록 ................................................................................................................... 16

2.2.1. FINIT .............................................................................................................. 16

2.2.2. FVFTOS ......................................................................................................... 17

2.2.3. FVSTOF ......................................................................................................... 18

2.2.4. TP_SLEEP ...................................................................................................... 19

2.2.5. TPACALL ........................................................................................................ 20

2.2.6. TPCALL .......................................................................................................... 23

2.2.7. TPCANCEL ..................................................................................................... 26

2.2.8. TPFORWARD ................................................................................................. 27

2.2.9. TPGETLEV ..................................................................................................... 29

2.2.10. TPGETRPLY ................................................................................................. 30

2.2.11. TPRETURN .................................................................................................. 32

2.2.12. TPSVCSTART ............................................................................................... 35

2.2.13. TPSVRDONE ................................................................................................ 36

2.2.14. TPSVRINIT ................................................................................................... 36

2.2.15. TXBEGIN ...................................................................................................... 37

2.2.16. TXCOMMIT ................................................................................................... 39

Tmax iii

Page 4: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2.17. TXINFORM ................................................................................................... 40

2.2.18. TXROLLBACK ............................................................................................... 41

2.2.19. TXSETCOMMITRET ...................................................................................... 43

2.2.20. TXSETTIMEOUT ........................................................................................... 44

2.2.21. TXSETTRANCTL .......................................................................................... 46

제3장 예제 ................................................................................................................................ 49

3.1. 서비스 프로그램 ......................................................................................................... 49

3.1.1. 예제 프로그램 .................................................................................................. 49

3.1.2. Makefile .......................................................................................................... 54

3.2. FDL 버퍼 사용 프로그램 ............................................................................................. 57

3.2.1. FDL 파일 만들기 .............................................................................................. 58

3.2.2. 뷰 파일 만들기 ................................................................................................. 58

3.2.3. COBOL용 뷰 파일 만들기 ................................................................................. 59

3.2.4. 서비스 작성하기 .............................................................................................. 60

3.3. 전역 트랜잭션 프로그램 .............................................................................................. 70

3.3.1. 예제 프로그램 .................................................................................................. 70

3.3.2. 서비스 컴파일 및 기동 ...................................................................................... 72

3.3.3. 서비스 호출 테스트 .......................................................................................... 73

3.4. TPSVRINIT/TPSVRDONE 이용 ................................................................................... 73

3.4.1. TPSVRINIT ..................................................................................................... 73

3.4.2. TPSVRDONE .................................................................................................. 74

3.4.3. 서비스 컴파일 및 기동 ...................................................................................... 76

3.4.4. 서비스 호출 테스트 .......................................................................................... 76

3.5. 서비스에서 서비스 호출 프로그램 ................................................................................ 76

3.5.1. 예제 프로그램 .................................................................................................. 76

3.5.2. 서비스 호출 컴파일 및 기동 .............................................................................. 79

3.5.3. 서비스 호출 테스트 .......................................................................................... 79

iv Tmax COBOL User Guide

Page 5: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

안내서에 대하여

안내서의 대상

본 안내서는 Tmax®(이하 Tmax) 시스템에서 COBOL로 사용자 프로그램을 작성하는 개발자를 위해 기술

되었다. COBOL로 프로그램 개발을 하기 위한 기본 환경 설정과 COBOL로 작성된 서버 프로그램의 구조,

COBOL로 작성된 서버용 Makefile 내용 이해, 서버 프로그램 기동 / 테스트 / 종료하는 방법에 대해 설명한

다.

안내서의 전제 조건

본 안내서를 읽기 전에 Tmax의 기본 개념을 숙지하고 있어야 한다. Tmax 엔진은 이미 설치되어 있다는

것을 가정하고 진행한다.

대부분의 예제가 ORACLE 데이터베이스를 사용하게 되고, ORACLE에서 제공하는 Pre-compiler가 32bit

용만 제공되고 있으므로, Tmax 엔진 또한 32bit용을 사용한다. Tmax엔진을 64bit용을 사용한다면 실행화

일중에는 sdlc대신 sdlc32를, 64bit 라이브러리 대신 32bit용 라이브러리를 반드시 사용해야 한다. 본 안내

서에서 사용한 예제는 Tmax 3.8.15 32bit 엔진을 기반으로 작성되어 있다.ht

본 안내서에서는 작성된 서비스 프로그램의 작동을 테스트하기 위해서 클라이언트 프로그램을 작성하지

않고, Tmax에서 제공하는 tmd 유틸리티를 이용한다. tmd는 환경화일에 지정된 환경변수

TMAX_HOST_ADDR, TMAX_HOST_PORT 를 이용하여 Tmax에 접속하므로, 반드시 환경 파일에 위의

두 환경변수를 설정한다.

안내서의 제한 조건

Tmax 시스템의 기본적인 용어들(예를 들어, 도메인, 노드, 서버그룹, 서버, 서비스 등)은 이미 알고 있다고

가정하고 진행한다.

참고

Tmax 시스템 개발에 대한 기본적인 내용은 "Tmax Administration Guide"나 "Tmax Application Devel

oment Guide"를 참고한다. Tmax에서 제공하는 명령어와 C API에 대한 설명은 “Tmax Reference

Guide”를 참고한다.

안내서에 대하여 v

Page 6: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

안내서 구성

Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다.

각 장의 주요 내용은 다음과 같다.

● 제1장: 환경설정

COBOL로 프로그램을 개발하기 위한 환경설정을 기술한다.

● 제2장: 프로그램 작성

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

● 제3장: 예제

서비스 프로그램, 전역 트랜잭션 프로그램 등 예제 프로그램과 설명을 기술한다.

vi Tmax COBOL User Guide

Page 7: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

안내서 규약

의미표기

프로그램 소스 코드의 파일명<AaBbCc123>

Ctrl과 C를 동시에 누름<Ctrl>+C

GUI의 버튼 또는 메뉴 이름[Button]

강조진하게

다른 관련 안내서 또는 안내서 내의 다른 장 및 절 언급" "(따옴표)

화면 UI에서 입력 항목에 대한 설명'입력항목'

메일계정, 웹 사이트하이퍼링크

메뉴의 진행 순서>

하위 디렉터리 또는 파일 있음+----

하위 디렉터리 또는 파일 없음|----

참고 또는 주의사항참고

그림 이름[그림 1.1]

표 이름[표 1.1]

명령어, 명령어 수행 후 화면에 출력된 결과물, 예제코드AaBbCc123

안내서에 대하여 vii

Page 8: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

시스템 사용 환경

요구 사항

IBM AIX 5.xPlatform

HP-UX 11.xx

Solaris 7~9 (SunOS 5.7~5.9)

최소 120MB 하드디스크 공간Hardware

256MB 이상 메모리 공간

1GB 이상 하드디스크와 512MB 이상 메모리 공간 권장

Oracle 9i 또는 10gDatabase

viii Tmax COBOL User Guide

Page 9: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

관련 안내서

설명안내서

Tmax를 설치하는 과정을 기술한 안내서이다.Tmax

Installation Guide

Tmax를 이용하기 위한 환경설정을 하는 방법과 시스템 운영방식을

기술한 안내서이다.

Tmax

Administration Guide

Tmax 애플리이션 프로그램 개발에 사용하는 클라이언트와 서버의

연결, 통신에서 사용하는 함수에 대한 사용 방법과 예제를 기술한 안

내서이다.

Tmax

Reference Guide

Tmax FDL 함수 정의와 예제 프로그램을 통하여 FDL이 제공하는 기

능을 활용하는 방법을 기술한 안내서이다.

Tmax

FDL Reference Guide

안내서에 대하여 ix

Page 10: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

연락처

Korea

TmaxSoft Co., Ltd

263 BundangSquare (AK Plaza) 12th floor, Seohyeon-dong, Bundang-gu,

Seongnam-si, Gyeonggi-do, 463-824

South Korea

Tel: +82-31-8018-1000

Fax: +82-31-8018-1115

Email: [email protected]

Web (Korean): http://www.tmax.co.kr

기술지원: http://technet.tmaxsoft.com

USA

TmaxSoft, Inc.

560 Sylvan Avenue Englewood Cliffs, NJ 07632

U.S.A

Tel: 1-201-567-8266

Fax: 1-201-567-7339

Email: [email protected]

Web (English): http://www.tmaxsoft.com

Japan

TmaxSoft Japan Co., Ltd.

5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073

Japan

Tel: +81-3-5765-2550

Fax: +81-3-5765-2567

Email: [email protected]

Web (Japanese): http://www.tmaxsoft.co.jp

x Tmax COBOL User Guide

Page 11: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

China

TmaxSoft China Co., Ltd.

Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan,

Chaoyang District, Beijing, China, 100027

China

Tel: +86-10-6410-6145~8

Fax: +86-10-6410-6144

Email: [email protected]

Web (Chinese): http://www.tmaxsoft.com.cn

ASEAN Office

TmaxSoft Pte. Ltd.

30 Cecil Street, Level 15 Unit 05 Prudential Tower, Singapore 049712

Singapore

Tel: +65-6232-2889

Fax: +65-6232-2919

Email: [email protected]

Web (English): http://asean.tmaxsoft.com

안내서에 대하여 xi

Page 12: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은
Page 13: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

제1장 환경설정

1.1. 디렉터리 구조다음은 COBOL 관련 디렉터리에 대한 설명이다.

$TMAXDIR

|--lib

|--cobinc

|--config

|--ucblinc

+--sample

|-- cobserver

|-- cobserver

lib

COBOL용 라이브러리 파일이 저장된다.

cobinc

COBOL용 헤더인 *.cbl 파일이 저장된다.

config

COBOL용 sample을 테스트할 수 있는 Tmax 환경 파일이 저장된다.

ucblinc

필드버퍼를 사용하는 sample을 위해서 필요한 field key, view file 등이 위치한다.

sample

의미표기

서비스의 저장 경로이다.sample/cobserver

클라이언트의 저장 경로이다.sample/cobclient

참고

Tmax 엔진의 설치에 대한 자세한 내용은 "Tmax Installation Guide"를 참고한다.

제1장 환경설정 1

Page 14: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 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.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

주의

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

1.3. 환경 파일 설정다음은 Tmax 환경 파일을 생성하는 과정이다.

1. 환경 파일을 작성한다.

*DOMAIN

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

2 Tmax COBOL User Guide

Page 15: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

*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

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

제1장 환경설정 3

Page 16: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

$ gst

$ 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 Administration Guide”를 참고한다.

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. Sample 파일 설치안내서에서 사용하는 예제는 cobolsample.tar라는 파일명으로 제공된다. 제공되는 파일에는 환경파일,

서버 프로그램, 서버 Makefile 및 sample로 제공되는 서비스가 정상적으로 작동하는지를 테스트할 수 있

는 tmd 모듈들이 포함되어 있다. COBOL용 예제 파일은 Tmax 엔진이 이미 설치되어 있다는 것을 가정하

고 COBOL용으로 필요한 부분만을 복사하므로 반드시 설치 후에 cobolsanmple.tar를 시스템에 설치한다.

$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

$ 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

4 Tmax COBOL User Guide

Page 17: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

참고

Tmax 엔진의 설치에 대한 자세한 내용은 "Tmax Installation Guide"를 참고한다.

제1장 환경설정 5

Page 18: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은
Page 19: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

제2장 프로그램 작성

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.

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.

제2장 프로그램 작성 7

Page 20: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

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.

8 Tmax COBOL User Guide

Page 21: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

88 TPNOREPLY VALUE 1.

05 TPACK-FLAG PIC S9(9) COMP-5 REDEFINES TPREPLY-FLAG.

88 TPNOACK VALUE 0.

88 TPACK VALUE 1.

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

88 TPTIME VALUE 0.

88 TPNOTIME VALUE 1.

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

88 TPNOSIGRSTRT VALUE 0.

88 TPSIGRSTRT VALUE 1.

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

88 TPGETHANDLE VALUE 0.

88 TPGETANY VALUE 1.

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

88 TPSENDONLY VALUE 0.

88 TPRECVONLY VALUE 1.

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

88 TPCHANGE VALUE 0.

88 TPNOCHANGE VALUE 1.

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

88 TPREQRSP VALUE IS 0.

88 TPCONV VALUE IS 1.

*

05 APPKEY PIC S9(9) COMP-5.

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

05 SERVICE-NAME PIC X(15).

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장 프로그램 작성 9

Page 22: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.1.5. TPSVCRET

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

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

* TPSVCRET.cbl

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

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

88 TPSUCCESS VALUE 0.

88 TPFAIL VALUE 1.

88 TPEXIT VALUE 2.

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

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 레벨 특성을 설정하기 위해서 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

10 Tmax COBOL User Guide

Page 23: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

88 TPNOAUTH VALUE 0.

88 TPSYSAUTH VALUE 1.

88 TPAPPAUTH VALUE 2.

2.1.9. TPPRIDEF

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

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

* TPPRIDEF.cbl

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

05 PRIORITY PIC S9(9) COMP-5.

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

88 TPABSOLUTE VALUE 0.

88 TPRELATIVE VALUE 1.

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()와 TPBROADCAST()에서 사용된다.

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

* TPBCTDEF.cbl

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

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

88 TPBLOCK VALUE 0.

88 TPNOBLOCK VALUE 1.

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

88 TPTIME VALUE 0.

88 TPNOTIME VALUE 1.

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

제2장 프로그램 작성 11

Page 24: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

12 Tmax COBOL User Guide

Page 25: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

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장 프로그램 작성 13

Page 26: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.1.14. TXSTATUS

TX routine에 의해서 반환 코드를 관리하기 위해 이용한다.

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

* TXSTATUS.cbl

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

05 TX-STATUS PIC S9(9) COMP-5.

88 TX-NOT-SUPPORTED VALUE 1.

* Normal execution

88 TX-OK VALUE 0.

* Normal execution

88 TX-OUTSIDE VALUE -1.

* Application is in an RM local transaction

88 TX-ROLLBACK VALUE -2.

* Transaction was rolled back

88 TX-MIXED VALUE -3.

* Transaction was partially committed and partially

* rolled back

88 TX-HAZARD VALUE -4.

* Transaction may have been partially committed and

* partially rolled back

88 TX-PROTOCOL-ERROR VALUE -5.

* Routine invoked in an improper context

88 TX-ERROR VALUE -6.

* Transient error

88 TX-FAIL VALUE -7.

* Fatal error

88 TX-EINVAL VALUE -8.

* Invalid arguments were given

88 TX-COMMITTED VALUE -9.

* The transaction was heuristically committed

88 TX-NO-BEGIN VALUE -100.

* Transaction committed plus new transaction could not

* be started

88 TX-ROLLBACK-NO-BEGIN VALUE -102.

* Transaction rollback plus new transaction could not

* be started

88 TX-MIXED-NO-BEGIN VALUE -103.

* Mixed plus new transaction could not be started

88 TX-HAZARD-NO-BEGIN VALUE -104.

* Hazard plus new transaction could not be started.

88 TX-COMMITTED-NO-BEGIN VALUE -109.

* Heuristically committed plus transaction could not

* be started

14 Tmax COBOL User Guide

Page 27: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.1.15. TXINFDEF

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

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

* TXINFDEF.cbl

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

05 XID-REC.

* XID record

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

* A value of -1 in FORMAT-ID means that the XID is null

10 GTRID-LENGTH PIC S9(9) COMP-5.

10 BRANCH-LENGTH PIC S9(9) COMP-5.

10 XID-DATA PIC X(128).

05 TRANSACTION-MODE PIC S9(9) COMP-5.

* Transaction mode settings

88 TX-NOT-IN-TRAN VALUE 0.

88 TX-IN-TRAN VALUE 1.

05 COMMIT-RETURN PIC S9(9) COMP-5.

* Commit_return settings

88 TX-COMMIT-COMPLETED VALUE 0.

88 TX-COMMIT-DECISION-LOGGED VALUE 1.

05 TRANSACTION-CONTROL PIC S9(9) COMP-5.

* Transaction_control settings

88 TX-UNCHAINED VALUE 0.

88 TX-CHAINED VALUE 1.

05 TRANSACTION-TIMEOUT PIC S9(9) COMP-5.

* Transaction_timeout value

88 NO-TIMEOUT VALUE 0.

05 TRANSACTION-STATE PIC S9(9) COMP-5.

* Transaction_state information

88 TX-ACTIVE VALUE 0.

88 TX-TIMEOUT-ROLLBACK-ONLY VALUE 1.

88 TX-ROLLBACK-ONLY VALUE 2.

제2장 프로그램 작성 15

Page 28: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2. 함수 목록

2.2.1. FINIT

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

● 사용방법

01 FDL-BUFFER.

05 FDL-ALIGN PIC S9(9) USAGE IS COMP.

05 FDL-DATA PIC X(사용자지정 길이).

01 FDL-REC

COPY FDLINFO.

CALL "FINIT" USING FDL-BUFFER FDL-REC.

설명항목

필드버퍼를 위해서 사용되는 레코드이고, 반드시 FDL 버퍼를 위해서는 4Byte

가 할당되어야 한다.

FDL-BUFFER

FDL버퍼로 초기화 되어야 하는 레코드의 길이다.FDL-LENGTH IN FDL-

REC

● 반환값

설명수행 결과

필드버퍼를 초기화하는데 성공하면 FDL-STATUS in FDL-REC가 FOK로 설

정된다.

성공

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

● 오류

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

설명에러 코드

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

● 참조

FVFTOS

16 Tmax COBOL User Guide

Page 29: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2.2. FVFTOS

필드버퍼로부터 COBOL 구조체로 데이터를 복사하는 함수로 필드버퍼로부터 COBOL 레코드에 데이터

를 넣을 때 사용한다.

● 사용방법

01 DATA-REC.

COPY User data.

01 FDL-BUFFER.

05 FDL-ALIGN PIC S9(9) USAGE IS COMP.

05 FDL-DATA PIC X(applen).

01 FDL-REC COPY FDLINFO.

CALL "FVFTOS" USING FDL-BUFFER DATA-REC FDL-REC.

CALL "FVFTOS32" USING FDL-BUFFER DATA-REC FDL-REC.

설명항목

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

C 구조체의 포인터이다.DATA-REC

COBOL 레코드를 설명하는 뷰 이름이다.VIEWNAME IN FDL-REC

필드들은 필드버퍼로부터 VIEWNAME에 있는element descriptions을 기초

로한 구조체에 복사된다.

필드 버퍼의 필드가 COBOL 레코드에 상대되는 필드가 없으면 무시된다.

COBOL 레코드에 있는 특정한 element가 필드 버퍼에 상대되는 필드가 없는

경우에는 NULL 값이 element에 복사된다. COBOL 레코드에 Array 형태로

저장하기 위해서는 레코드 element는 OCCURS로 정의되어야 한다. 버퍼가

레코드 element보다 적은 갯수의 필드갯수를 가진다면 남은 element는 뷰 파

일에서 지정한 기본값으로 채워진다.

반대로 버퍼가 레코드 element보다 큰 갯수의 필드를 가진다면, 나머지 occur

rences는 무시된다.

● 반환값

설명수행 결과

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

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

● 오류

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

제2장 프로그램 작성 17

Page 30: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

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

수 없는 경우에 설정된다.

[FBENOENT]

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

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

정된다.

[FEINVAL]

유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를

사용하여 컴파일되지 않은 필드키가 사용되었을 때 설정된다.

[FBEBADFLD]

유효하지 않은 구조체가 사용되었다. 일반적으로 Tmax시스템에서 알아보지

못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었

을 경우에 설정된다.

[FBEBADSTRUCT]

● 참조

FVSTOF

2.2.3. FVSTOF

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

● 방법

01 DATA-REC.

COPY User data.

01 FDL-BUFFER.

05 FDL-ALIGN PIC S9(9) USAGE IS COMP.

05 FDL-DATA PIC X(applen).

01 FDL-REC

COPY FDLINFO.

CALL "FVSTOF" USING FDL-BUFFER DATA-REC FDL-REC.

CALL "FVSTOF32" USING FDL-BUFFER DATA-REC FDL-REC.

설명항목

COBOL 레코드이다.DATA-REC

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

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

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

- FUPDATE

- FOJOIN

18 Tmax COBOL User Guide

Page 31: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명항목

- FJOIN

- FCONCAT

모드는 각각 C 함수의 Fupdate(3), Fojoin(3), Fjoin(3), and Fconcat와 같은

방식으로 동작한다.

● 반환값

설명수행 결과

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

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

● 오류

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

설명에러 코드

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

수 없는 경우에 설정된다.

[FBENOENT]

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

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

정된다.

[FEINVAL]

유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를

사용하여 컴파일되지 않은 필드키가 사용되었을 때 설정된다.

[FBEBADFLD]

유효하지 않은 구조체가 사용되었다. 일반적으로 Tmax 시스템에서 알아보

지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되

었을 경우에 설정된다.

[FBEBADSTRUCT]

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

● 참조

FVFTOS

2.2.4. TP_SLEEP

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

다가 그 안에 데이터가 도착하면 즉시 반환한다.

제2장 프로그램 작성 19

Page 32: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

● 사용방법

int TP_SLEEP (int sec, cbl_tpstatus_t *status)

설명파라미터

기다리고자 하는 시간을 초 단위인 양의 정수 값을 입력해야 한다sec

● 반환값

sec 시간까지 데이터가 도착하지 않으면 0을 반환하고, 데이터가 도착하면 양의 정수를 반환한다. 에러

가 발생하면 -1을 반환하고, tperrno변수 값이 설정된다.

● 오류

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

설명에러 코드

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

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

● 참조

TPACALL, TPGETRPLY

2.2.5. TPACALL

비동기 서비스 요청 송신 함수이다. TPACALL 함수는 SERVICE-NAME IN TPSVCDEF-REC 에 명명된

서비스에게 서비스 요청메시지를 송신한다. TPACALL 함수는 비동기 통신으로 메시지를 송신한 후에 결

과를 받을 때까지 기다리지 않고 바로 반환된다. 결과는 나중에 TPGETRPLY 함수를 이용하여 응답을 받

을 수도 있고, 또는 TPCANCEL 함수를 이용하여 응답을 취소할 수 있다.

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPACALL" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

20 Tmax COBOL User Guide

Page 33: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

– 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이면, 데이터 없이 요청된다. DATA-REC 의 REC-TYPE 과

SUB-TYPE 은 SERVICE-NAME가 지원하는 유형들이어야 한다.

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

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

설명설정값

플래그없이 tpacall() 함수가 사용된 경우 svc 에 호출된 서비스가 없거나 잘못된

결과가 반환되었어도 정상적인 결과가 반환된다.

TPBLOCK

tpgetrply() 함수를 호출할 때 에러가 반환된다. 플래그를 이용해 tpacall() 함수를

호출할 때 서비스 상태의 정상 여부를 확인할 수 있다.

TPACALL 함수 호출자가 트랜잭션 모드 상태에서 이 설정을 이용하여 SERVICE-

NAME을 요청하였다면, SERVICE-NAME 서비스는 트랜잭션 모드에서 제외되어

수행된다.

TPNOTRAN

트랜잭션 모드에서 트랜잭션을 지원하지 않는 SERVICE-NAME를 호출한다면 반

드시 이 설정을 이용해야 한다. 트랜잭션 모드 내에서의 TPACALL함수가 호출될

때, TPNOTRAN로 설정되었어도 여전히 트랜잭션 타임아웃(timeout)에 영향을 받

는다.

TPNOTRAN으로 호출된 서비스가 실패하였을 경우, 호출자의 트랜잭션에는 영향

을 미치지 않고 TPNOREPLY의 응답을 기다리지 않고 즉시 반환한다. 서비스가

정상적으로 호출되면 TPOK가 반환되고, COMM-HANDLE IN TPSVCDEF-REC

에 0이 설정된다.

함수 호출자가 트랜잭션 모드에 있을 경우에는 반드시 TPNOTRAN와 함께 설정

해야만 TPNOREPLY를 사용할 수 있다.

TPNOREPLY의 경우 서비스 상태의 정상 여부를 체크하기 위해서는 TPBLOCK

를 함께 설정해야 한다. TPBLOCK를 설정하지 않으면 서비스가 NRDY 인 경우에

도 에러를 반환하지 않는다.

TPNOBLOCK를 설정한 상태에서 블로킹 (blocking) 상황을 만나면 (예를 들어, 내

부버퍼가 송신할 메시지들로 가득 찬 경우) 서비스 요청은 실패한다.

TPNOBLOCK

제2장 프로그램 작성 21

Page 34: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

TPNOBLOCK 설정 없이 TPACALL이 호출되면 블로킹 상황이 발생하면 함수호출

자는 블로킹 상황이 풀리거나 타임아웃 (트랜잭션 타임아웃 또는 블로킹타임아웃)

이 발생할 때까지 기다리게 된다.

TPNOTIME는 함수 호출자가 블로킹 타임아웃을 무시하고 응답이 수신될 때까지

무한정 기다리겠다는 것을 의미한다. 트랜잭션 타임아웃에서 TPACALL을 한 경

우에는 여전히 트랜잭션 타임아웃이 적용된다.

TPNOTIME

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

될 때 시스템 함수 호출이 재실행된다. 이 플래그가 설정되지 않은 상태에서 신호

인터럽트가 발생하였다면 함수는 실패하고 tperrno에 TPGOTSIG가 설정된다.

TPSIGRSTRT

● 반환값

설명수행 결과

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

TP-STATUS는 다음의 값이 설정된다.실패

● 오류

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

설명에러 코드

파라미터가 유효하지 않다. 예를 들어, SERVICE-NAME이 SPACES 이거나

TPSVCDEF-REC가 비정상이다.

[TPEINVAL]

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

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

처리되지 않은 비동기성 서비스 요청 수가 최대 한계에 도달했기 때문에 호

출자의 서비스 요청이 송신되지 않았다.

[TPELIMIT]

SERVICE-NAME는 트랜잭션을 지원하지 않는 서비스이고, 이 때 TPNOTRAN

이 설정되지 않았다.

[TPETRAN]

타임아웃이 발생하였다. 함수 호출자가 트랜잭션 모드에 있다면, 트랜잭션타

임아웃이 발생한 것이며 트랜잭션은 rollback된다. 그렇지 않다면 TPNOTIME

[TPETIME]

이나 TPNOBLOCK이 모두 설정되지 않은 상황에서 블로킹 타임아웃이 발생

한다. 트랜잭션 타임아웃이 발생되면 트랜잭션이 rollback 될 때까지 새로운

서비스 요청을 송신한다거나 아직 수신되지 않은 응답을 기다리는일은 모두

[TPETIME] 에러로 실패한다.

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

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

22 Tmax COBOL User Guide

Page 35: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

트랜잭션 모드에서의 TPNOREPLY 서비스가 호출되면 TPNOTRAN 플래그

를 설정하지 않는 경우 등의 부적절한 상황에서 발생한다.

[TPEPROTO]

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

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

● 참조

TPCALL, TPCANCEL, TPGETRPLY

2.2.6. TPCALL

동기형 서비스 요청 송수신 함수이다. TPCALL은 요청을 보내고 응답을 기다린다. 이 함수를 호출하는 것

은 TPACALL() 호출 후연속적으로 TPGETRPLY를 호출하는 것과 동일하다. TPCALL은 TPSVCDEF-REC

의 SERVICE-NAME으로 서비스 요청을 주고 받는다.

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 ITPTYPE-REC.

COPY TPTYPE.

01 IDATA-REC.

COPY User data.

01 OTPTYPE-REC.

COPY TPTYPE.

01 ODATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPCALL" USING TPSVCDEF-REC ITPTYPE-REC IDATA-REC OTPTYPE-REC

ODATA-REC TPSTATUS-REC.

– ITPTYPE-REC에서 IDATA-REC는 보내는 데이터이고, LEN은 보내지는 데이터의 길이를 지정한다.

IDATA-REC이 지정된 길이를 요구하지 않는 타입의 레코드이면, LEN은 무시된다(보통 0이 사용된

다).

– ITPTYPE-REC의 REC-TYPE이 SPACES이면, IDATA-REC 와 ITPYPE-REC의 LEN 은 무시되고 데

이터없이 요청된다. ITPTYPE-REC이 STRING이면서 ITPTYPE-REC의 LEN이 0이면, 데이터 없이

요청된다.

ITPTYPE-REC의 REC-TYPE 과 SUB-TYPE은 SERVICE-NAME가 지원하는 유형이어야 한다. 응답

을 실어서 보내는데 사용될 ODATA-REC과 ODATA-REC에 실어질 데이터의 최대 길이를 고려하여

제2장 프로그램 작성 23

Page 36: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

ODATA-REC의 LEN이 지정되어야 한다. 데이터를 주고 받는데 같은 레코드를 사용한다면 ODATA-

REC은 IDATA-REC을 REDEFINES해야만 한다.

– 성공적으로 TPCALL이 수행되면, ODATA-REC에는 OTPTYPE-REC의 LEN만큼의 응답이 수신된다.

OTPTYPE-REC의 REC-TYPE과 SUB-TYPE는 각각 응답 type과 sub-type 을 포함한다. 응답이 ODAT-

REC보다 크면, ODATA-REC 레코드에 맞는 데이터만큼만 포함하게 된다. 응답의 나머지는 버려지

고, TPTRUNCATE가 설정된다.

성공적인 수신에서 OTPTYPE-REC의 LEN이 0이면, 응답은 데이터 부분을 갖지 않고, ODATA-REC

는 데이터가 수신되지 않는다. OTPTYPE-REC의 LEN가 입력값으로 0을 갖는 것은 에러이다.

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

설명설정값

호출자가 크랜잭션 모드 상태에서 이 설정이 이용하여 SERVICE-NAME 서비스를

요청하였다면 트랜잭션 모드에서 제외되어 수행된다.

TPNOTRAN

트랜잭션 모드에서 트랜잭션을 지원하지 않는 서비스를 호출할 때는 이 설정이 반

드시 사용되어야 한다. 트랜잭션 모드내에서 TPNOTRAN을 설정하여 TPCALL을

사용하여도 여전히 트랜잭션 타임아웃의 영향을 받는다.

TRNOTRAN으로 호출된 서비스가 실패하였을 경우, 호출자의 트랜잭션에는 영향

을 미치지 않는다.

일반적으로 수신된 응답버퍼 ODATA-REC가 가리키는 버퍼의 유형이 다르다면

버퍼 유형은 수신자가 인식할 수 있는 한도내에서 수신된 응답버퍼 유형으로 변경

된다.

TPNOCHANGE

TPNOCHANGE가 설정되었다면 ODATA-REC가 가리키는 유형은 변경되지 않는

다.

응답된 레코드의 type과 sub-type 반드시 REC-TYPE IN OTPTYPE-REC와 SUB-

TYPE IN OTPTYPE-REC과 각각 일치해야 한다.

TPNOBLOCK을 설정한 상태에서, 블로킹(blocking) 상황을 만나면(예를 들어, 내

부버퍼가 송신할 메시지들로 가득한 경우) 서비스 요청은 실패한다.

TPNOBLOCK

TPNOBLOCK 설정없이 호출하면, 블로킹 상황이 발생하면 함수 호출자는 블로킹

상황이 풀리거나 타임아웃(트랜잭션 타이아웃이나 블로킹 타임아웃)이 발생할 때

까지 기다리게 된다.

TPNOTIME은 함수 호출자가 블로킹 타임아웃을 무시하고 응답이 수신될 때까지

무한정 기다리겠다는 것을 의미한다.

TPNOTIME

트랜잭션 타임아웃내에서 TPCALL을 한 경우에는 여전히 트랜잭션 타임아웃이

적용된다.

24 Tmax COBOL User Guide

Page 37: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

시그널(signal) 인터럽트를 수용하고자할 때 사용한다. 내부에서 시그널 인터럽트

가 발생하여 시스템 함수 호출이 방해될 때 시스템 함수 호출이 재실행된다.

TPSIGRSTRT

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

TPSTATUS에 TPGOTSIG가 설정된다.

● 반환값

설명수행 결과

TP-STATUS 에 TPOK가 설정된다.성공

TP-STATUS에 TPOK나 TPESVCFAIL가 설정될 때, TPSTATUS-REC의

APPL-RETURN-CODE는 TPRETURN의 한 부분으로 보내지는 응용 프로그

램이 지정한 값을 포함한다. 수신되는 메시지의 크기가 지정된 LEN보다 크

면, TPTRUNCATE가 설정되고, 단지 LEN만큼의 데이터만 ODATA-REC에

들어가고 나머지 데이터는 무시된다.

TP-STATUS는 다음의 값이 설정된다.실패

● 오류

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

설명에러 코드

인수가 유효하지 않다. 예를 들어, SERVICE-NAME이 SPACES이거나

TPSVCDEF-REC가 비정상이다.

[TPEINVAL]

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

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

수신된 응답버퍼의 유형이나 하위유형이 호출자가 알지 못하는 유형이다. 플

래그가 TPNOCHANGE로 설정되었는데 ODATA-REC의 REC-TYPE 과 SUB-

[TPEOTYPE]

TYPE이 수신된 응답버퍼의 유형 및 하위 유형과 맞지 않는다. 이 경우 OTP

TYPE-REC의 ODATA-REC와 LEN 모두 변경되지 않는다.

호출자가 트랜잭션 모드에서 서비스를 요청하였다면, 그 트랜잭션은 응답이

무시되었기 때문에 rollback될 것이다.

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

되지 않았다.

[TPETRAN]

타임아웃이 발생하였다.[TPETIME]

제2장 프로그램 작성 25

Page 38: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

함수 호출자가 트랜잭션 모드에 있다면, 트랜잭션 타임아웃이 발생하였다.

트랜잭션 모드가 아니고 TPNOTIME과 TPNOBLOCK 어느 것도 지정되지 않

았다면, 블로킹 타임아웃이 발생하였다. 이 두 경우에 OTPTYPE-REC의

ODATA-REC와 LEN 모두 변경되지 않는다.

트랜잭션 타임아웃이 발생하였다면, 새로운 서비스 요청을 송신한다거나 응

답을 기다리는 일은 트랜잭션이 rollback 될 때까지 [TPETIME] 에러로 실패

하게 된다.

서비스 요청에 대한 응답을 송신하는 서비스 루틴이 응용 프로그램상의 에러

가 발생하여 TPFAIL로 TPRETURN()을 호출하였다.

[TPESVCFAIL]

서비스 응답이 수신 되었다면 ODATA-REC의 내용들을 이용할 수 있다. 트

랜잭션 타임아웃이 발생하기 전까지는 트랜잭션이 rollback 되기 전에 다른

통신들이 시도될 수 있다. 그러한 통신들은 정상적으로 처리될 수도 있고, 또

는 실패할 수도 있다. 이들이 제대로 수행되기 위해서는 TPNOTRAN이 설정

되어야한다.

호출자의 트랜잭션 모드에서 수행된 작업들은 트랜잭션 완료시에 모두 rollback

된다.

서비스 루틴 수행중이나 TPRETURN 수행 중에 에러가 발생하였다.(예를 들

어, 잘못된 인수가 전달된 경우).

[TPESVCERR]

에러가 발생하면 어떠한 응답 데이터도 반환되지 않는다. 이 경우에 OTPTYPE-

REC의 ODATA-REC와 LEN 모두 변경되지 않는다.

Tmax 환경파일에 서비스별로 SVCTIMEOUT을 설정할 수 있는데 서비스의

수행 시간이 이 시간을 초과하게 되면 서비스는 수행을 멈추고 TPESVCERR

를 반환한다.

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

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

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

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

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

2.2.7. TPCANCEL

응답 취소 함수이다. TPACALL이 반환한 호출 구별자인 COMM-HANDLE IN TPSVCDEF-REC를 취소한

다. 전역 트랜잭션과 관련된 서비스는 취소할 수 없다. 서비스 응답이 성공적으로 취소되면 호출구별자는

무효화됨에 따라 이를 통하여 받은 응답들도 모두 무시된다.

26 Tmax COBOL User Guide

Page 39: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPSTATUS-REC.

COPY TPSTATUS.

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

● 반환값

설명수행 결과

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

TP-STATUS는 다음의 값이 설정된다.실패

● 오류

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

설명에러 코드

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

COMM-HANDLE이 호출자의 트랜잭션과 관련되어 있다. COMM-HANDLE

는 여전히 유효하고, 호출자의 현재 트랜잭션은 영향을 받지 않는다.

[TPETRAN]

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

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

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

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

● 참조

TPACALL

2.2.8. TPFORWARD

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

TPFORWARD는 자신의 서비스 처리를 종료하고 클라이언트의 요청을 다른 서비스로 전달한다. TPFOR

WARD는 EXIT PROGRAM 를 포함하고 있어서 마치 TPRETURN처럼 작동한다. TPRETURN과 마찬가

지로 TPFORWARD가 Tmax 시스템으로 올바로 반환되기 위해서는 TPFORWARD는 Tmax 시스템이 제

어하는 서비스 루틴내에서 호출되어야 한다. 대화형 서비스에서는 TPFORWARD가 호출될 수 없다.

제2장 프로그램 작성 27

Page 40: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

COPY TPFORWAR REPLACING TPSVCDEF-REC BY TPSVCDEF-REC

TPTYPE-REC BY TPTYPE-REC

DATA-REC BY DATA-REC

TPSTATUS-REC BY TPSTAUS-REC

– DATA-REC에 저장된 데이터를 사용하여 SERVICE-NAME 로 명명된 서비스에게 요청을 전달한다.

요청을 전달하는 서비스 루틴은 어떤 응답도 수신하지 않는다. 요청이 전달된 후 서비스 루틴은 Tmax

시스템에게로 반환된다. 그리고 서버는 자유롭게 다른 작업을 수행할 수 있다. TPFORWARD는 요청

자로부터 아무 응답도 기대하지 않기 때문에, 특별한 에러없이 어떤 서비스에게든지 전달될 수 있다.

– 서비스 루틴이 트랜잭션 모드에 있다면, 그 트랜잭션은 트랜잭션 시작자(Cordinator)가 TXCOMMIT

또는 TXROLLBACK 중의 하나를 실행하여 트랜잭션을 완료할 때 비로소 완료될 수 있다. 트랜잭션이

그 서비스 루틴내에서 TXBEGIN을 사용하여 시작된 것이라면, 그 트랜잭션은 TPFORWARD 호출 전

에 TXCOMMIT 또는 TXROLLBACK 둘 중의 하나로 먼저 완료되어야 한다. TPFORWARD로 연결된

모든 서비스들은 모두가 트랜잭션 모드에 있든지, 아니면 모두가 트랜잭션 모드가 아니어야 한다.

– 최종적으로 TPFORWARD된 서비스가 TPRETURN을 이용하여 가장 처음 서비스를 요청한 클라이

언트에게 응답을 보낸다. TPFORWARD는 응답을 기다리고 있는 요청자에게 응답을 송신하는 책임

을 다른 서버 프로세스에게 전가하는 것으로, 멀티 노드간에도 서비스가 이루어진다. TPFORWARD

는 서비스 루틴이 요청한 모든 서비스들에 대한 응답을 받은 후에 호출되어야 한다. 수신되지 않은 응

답에 대한 구별자들은 무효화되고 전달 요청은 전송되지 않는다.

– DATA-REC은 보내지는 레코드이고, TPTYPE-REC의 LEN 은 보낸지는 송신될 데이터의 길이이다.

DATA-REC이 길이의 명시가 필요없는 버퍼를 가리킨다면, LEN은 무시된다. (보통 0이 사용된다.)

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

청이 송신된다.

– 서비스 루틴 작성자는 TPFORWARD 호출 후 다시 제어권을 획득할 수 없기 때문에, TPSIGRSTRT

가 암시적으로 정의된 형태의 블로킹 송신에 사용된다. TPFORWARD수행 중에 시그널이 발생하여

수행이 중지되더라도 재수행되며, 블로킹 상황을 만나더라도 타임아웃 발생 전까지는 기다려서 송신

한다. 현재 TPSVCDEF-REC는 사용되지 않으며 지정된 값은 무시된다.

28 Tmax COBOL User Guide

Page 41: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

● 반환값

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

● 오류

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

설명에러 코드

서비스 루틴 수행중이나 TPRETURN 수행 중에 에러가 발생하였다. 예를 들

면, 잘못된 인수가 전달된 경우에 발생한다. 에러가 발생하면 어떠한 응답 데

[TPESVCERR]

이터도 반환되지 않는다. 이 경우에 OTPTYPE-REC의 ODATA-REC와 LEN

모두 변경되지 않는다.

서비스 루틴 작업 중이나 또는 요청을 전송하는 중에 트랜잭션 타임아웃이

발생한 경우에 TPETIME 에러가 반환된다.

[TPETIME]

● 참조

TPRETURN

2.2.9. TPGETLEV

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

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

● 사용방법

01 TPTRXLEV-REC.

COPY TPTRXLEV.

01 TPSTATUS-REC.

COPY TPSTATUS.

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

● 반환값

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

트랜잭션 모드일 때는 TP-IN-TRAN가 설정된다.

제2장 프로그램 작성 29

Page 42: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2.10. TPGETRPLY

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

청한 서비스에 대한 응답을 수신한다.

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPGETRPLY" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

– 성공적으로 데이터를 수신하면, LEN은 DATA-REC에 저장된 실제로 저장된 데이터의 길이를 가진다.

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

– 함수는 COMM-HANDLE와 일치하는 응답이 수신되거나 또는 타임아웃이 발생할 때까지 기다린다.

일반적으로 COMM-HANDLE는 응답이 수신된 후에는 더 이상 유효하지 않다.

– LEN이 0으로 반환 되었다면, 어떤 응답도 수신되지 않고 LEN이 지시하는 ODATA-REC 버퍼에 아무

런 변화가 없다. LEN에 0이 INPUT으로 이용될 수는 없다. 응답이 DATA-REC보다 크면, DATA-REC

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

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

설명설정값

입력값으로 지정한 COMM-HANDLE in TPSVCDEF-REC 를 무시하고, 수신 가능

한 응답을 반환하도록 한다.

TPGETANY

COMM-HANDLE는 응답에 대한 호출 구별자가 된다. 아무런 응답이 없으면, 일반

적으로 TPGETRPLY는 응답이 도착하기를 기다린다.

수신된 응답버퍼와 REC-TYPE이 가리키는 버퍼의 유형이 다르다면, ODATA-REC

의 버퍼 유형은 수신자가 인식할 수 있는 한도 내에서 수신된 응답버퍼의 유형으

로 변경된다.

TPNOCHANGE

플래그가 설정되었다면, REC-TYPE이 가리키는 버퍼의 유형은 변경되지 못한다.

수신된 응답 버퍼의 유형 및 하위 유형은 가리키는 버퍼의 유형 및 하위 유형과 반

드시 일치해야 한다.

30 Tmax COBOL User Guide

Page 43: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

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

능한 응답이 있다면 이를 반환한다. TPNOBLOCK가 지정되지 않았고 수신 가능

TPNOBLOCK

한 응답이 없다면, 함수 호출자는 응답이 도착하거나 또는 타임아웃 (트랜잭션 타

임아웃이나 블로킹 타임아웃)이 발생할 때까지 기다리게 된다.

TPNOTIME은 함수 호출자가 블로킹 타임아웃을 무시하고 응답이 수신될 때까지

무한정 기다리겠다는 것을 의미한다.

TPNOTIME

트랜잭션 모드에서 TPGETRPLY를 사용한 경우에는 여전히 트랜잭션 타임아웃

이 적용된다.

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

될 때 시스템 함수 호출이 재실행된다.

TPSIGRSTRT

● 반환값

설명수행 결과

성공적으로 처리되면 1을 반환하며 TPRETURN으로 전달되는APPL-RETURN-

CODE 전역 변수는 TPGETRPLY가 성공적으로 반환되었거나 TP-STATUS

가 [TPESVCFAIL]인 경우, 응용 프로그램에서 정의한 값을 갖게 된다.

성공

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

● 오류

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

설명에러 코드

파라미터가 유효하지 않다. 예를 들어, SERVICE-NAME이 SPACES이거나

TPSVCDEF-REC가 비정상이다.

[TPEINVAL]

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

수신된 응답의 유형 또는 하위 유형이 호출자가 알지 못하는 유형이다. TP

NOCHANGE가 설정되어 있는데 REC-TYPE와 SUB-TYPE가 수신된 데이터

[TPEOTYPE]

의 유형 또는 하위 유형과 일치하지 않는다. DATA-REC과 LEN은 모두 변경

되지 않는다. 만약 응답이 호출자의 트랜잭션 모드에서 수신되었다면, 그 트

랜잭션은 응답이 무시되었기 때문에 rollback이 된다.

타임아웃이 발생하였다. 함수 호출자가 트랜잭션 모드에 있다면, 트랜잭션

타임아웃이 발생하였고 그 트랜잭션은 rollback 된다. 트랜잭션 모드가 아니

[TPETIME]

고 TPNOTIME과 TPNOBLOCK 어느 것도 지정되지 않았다면, 블로킹 타임

아웃이 발생한다. 이 두 경우에, DATA-REC의 내용과 LEN은 변경되지 않는

다. 트랜잭션 타임아웃이 발생하였다면, 새로운 서비스 요청을 송신한다거나

제2장 프로그램 작성 31

Page 44: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

응답을 기다리는 일은 트랜잭션이 rollback 될 때까지 [TPETIME]에러로 실패

하게 된다.

서비스 요청에 대한 응답을 송신하는 서비스 루틴이 응용 프로그램상의 에러

가 발생하여 TPFAIL로 TPRETURN을 호출하였다. 서비스 응답이 수신 되었

[TPESVCFAIL]

다면, 그 내용들은 DATA-RECDP 저장되어 사용될 수 있다. 함수 호출자가

트랜잭션 모드에 있다면, 그 트랜잭션은 rollback 될 것이다.

트랜잭션 타임아웃이 발생하기 전까지는, 트랜잭션이 rollback 되기 전에 다

른 통신들이 시도될 수 있다. 그러한 통신들은 정상적으로 처리될 수도 있고,

또는 실패할 수도 있다. 수행되기 위해서는 TPNOTRAN이 설정되어야 한다.

호출자의 트랜잭션 모드에서 수행된 작업들은 트랜잭션 완료 시에 모두 roll

back 된다.

유효하지 않은 구별자를 사용한 경우, 트랜잭션 모드에서 xa operation이 실

패한 경우에 발생한다. (TXBEGIN, TXCOMMIT, TXROLLBACK)

[TPESVCERR]

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

효하다.

[TPEBLOCK]

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

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

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

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

● 참조

TPACALL, TPCANCEL, TPRETURN

2.2.11. TPRETURN

Tmax 서비스 종료 함수이다. TPRETURN는 서비스 루틴의 완료를 의미한다. TPRETURN은 EXIT PRO

GRAM statement과 같은 역할로서 TPRETURN이 호출되면 서비스 루틴은 Tmax 시스템에게 반환된다.

Tmax 시스템으로 올바르게 반환되기 위해서 TPRETURN은 Tmax 시스템이 제어하는 서비스 루틴 내에

서 호출되는 것이 바람직하다.

TPRETURN는 서비스의 응답 메시지를 송신한다. 응답을 수신할 프로그램이 TPCALL이나 TPGETRPLY,

또는 TPRECV로 응답을 기다리고 있다면, 그 응답은 TPRETURN 호출이 성공한 후 수신자의 버퍼를 통

해 전달된다.

서비스 루틴이 자동 트랜잭션 모드에 있는데, 해당 서비스를 호출한 클라이언트가 명시적으로 트랜잭션

을 시작하지 않으면 (즉, TXBEGIN 을 사용하지 않으면 ) TPRETURN은 트랜잭션의 한 부분으로서 TPSUC

CESS을 사용하면 commit, TPFAIL 을 사용하면 rollback 된다. 서비스는 동일한 트랜잭션 (Global Trans

32 Tmax COBOL User Guide

Page 45: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

action)의 한 부분으로써 여러 번 호출될 수도 있다. 그래서 TXBEGIN을 사용한 트랜잭션 시작자가 TXCOM

MIT 또는 TXROLLBACK 중 하나를 호출하여 트랜잭션을 완료하기 전까지는 완전히 commit 또는 rollback

되지 않는다.

TPRETURN은 서비스 루틴에서 요청된 서비스들로부터 모든 응답을 수신한 후에 호출되어야 한다. 그렇

지 않으면 서비스 특성에 따라 [TPESVCERR] 에러나 TPEV_SVCERR 이벤트가 서비스 루틴과 통신하는

프로그램에게 반환된다.

● 사용방법

01 TPSVCRET-REC.

COPY TPSVCRET.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC

TPTYPE-REC BY TPTYPE-REC

DATA-REC BY DATA-REC

TPSTATUS-REC BY TPSTATUS-REC.

– TP-RETURN-VAL의 인수로는 다음 값이 사용될 수 있다. 아래에 존재하지 않는 TP-RETURN-VAL

값은 모두 TPFAIL 로 간주된다.

설명설정값

서비스가 성공적으로 종료되었다. 데이터가 존재하고 TPRETURN 수행 중에 에

러가 발생하지 않는다면 데이터는 송신된다.

TPSUCCESS

호출자가 트랜잭션 모드에 있다면 이 트랜잭션의 한 부분을 commit 가능 상태로

결정한다. 트랜잭션이 최종적으로 완료될 때 트랜잭션에 속한 나머지 서비스가 모

두 성공적으로 완료되어 commit 가능 상태라면 commit, 하나라도 실패하면 rollback

이 된다. TPRETURN 에 대한 호출이 반드시 전체 트랜잭션을 완료하는 것이 아님

에 유의해야 한다.

호출자가 TPSUCCESS로 TPRETURN 하더라도 기다리는 응답이나 대화형 연결

이 존재하거나, 혹은 서비스 내에서 행해진 어떤 작업이 트랜잭션을 rollback 되게

했다면, 그 때는 서비스 실패로 메시지가 송신된다. 응답의 수신자가 [TPESVCERR]

표시 또는 TPEV_SVCERR 이벤트를 수신한다. 서비스 루틴 내에서 트랜잭션이

rollback 되게 되면, TP-RETURN-VAL은 TPFAIL로 설정됨에 유의해야 한다.

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

된다.

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

가 반환된다. 응답을 수신하는 호출이 실패하고 수신자는 [TPSVCFAIL] 값이나

TPFAIL

제2장 프로그램 작성 33

Page 46: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

TPEV_SVCFAIL 이벤트를 수신한다. 호출자가 트랜잭션 모드에 있고 autotransac

tion인 경우 tpreturn()은 트랜잭션을 rollback 한다. 그 트랜잭션이 이미 rollback 상

태로 결정되어 있을 수도 있다. 이 파라미터는 데이터를 송신할 수 없다.

서비스 호출 후 반환할 경우 서버 프로세스를 강제 종료하고자 할 때 사용된다.

TPEXIT로 종료된 프로세스는 RESTART=Y가 설정되어 있으면 TMM에 의해 다

시 자동으로 기동된다.

TPEXIT

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

지 않는다.

TPDOWN

– 응용 프로그램에서 사용자에 의해 정의되는 반환 코드값인 APPL-CODE는 서비스 응답을 수신하는

프로그램에게 송신된다. TP-RETURN-VAL의 값과 상관없이 응답이 클라이언트로 무사히 송신될 수

있는 한, 즉 수신하는 호출이 성공하거나 [TPSVCFAIL] 로 반환하거나 또는 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이 될 수 없다.

데이터가 NULL이면, LEN은 무시된다. 이 경우, 서비스를 호출한 프로그램이 응답을 기대하고 있다

면, 아무 데이터도 없는 응답이 송신된다. 응답이 기대되지 않는다면 TPRETURN은 어떤 데이터든

제거하고, 송신하는 응답없이 반환한다.

REC-TYPE이 STRNG이고 LEN이 0이면, 요청은 데이터없이 전달된다.

● 반환값

– 서비스 루틴은 호출자인 Tmax 시스템에게 어떤 값도 반환하지 않는다. 서비스 루틴은 TPRETURN(EXIT

PROGRAM을 포함하는)을 사용하여 종료되는 것이 원칙이다. 서비스 루틴이 TPRETURN을 사용하

지 않으면서 (예를 들어, COBOL의 EXIT PROGRAM 문을 곧바로 사용) 반환한다면, 서버는 서비스

요청자에게 서비스 에러를 반환한다.

– 서버가 트랜잭션 모드에 있었다면, 그 트랜잭션은 rollback이 표시된다.

– TPRETURN이 서비스 루틴 외부에서 사용되었을 경우, 예를 들어 서비스가 아닌 루틴에서 사용된 경

우, 이는 아무런 일도 하지 않고 단순히 반환한다.

● 오류

34 Tmax COBOL User Guide

Page 47: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

TPRETURN이 서비스 루틴을 종료시키기 때문에, 파라미터를 처리하는 중에 에러가 발생하면 호출자

인 서비스 루틴에게 알려지지 못한다. 그러한 에러들은 동기와 비동기 통신, 즉 TPCALL 또는

TPGETRPLY로 서비스 결과를 수신하는 프로그램에 대해서는 TP-STATUS가 [TPESVCERR]이 된다.

대화형 통신, 즉 TPSEND나 TPRECV를 사용하는 프로그램에 대해서는 TPEV_SVCERR 이벤트를 발

생시킨다.

● 참조

TPCALL, TPGETRPLY

2.2.12. TPSVCSTART

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

시스템 루틴이다. 사실, 서비스 루틴에서 TPSVCSTART를 부르기전에 다른 것을 수행하면 에러가 난다.

TPVCSTART는 서비스의 파라미터와 데이터를 가져오는데 이용한다. 이 루틴은 TPCALL이나 TPACALL

를 통해서 수신된 요청을 서비스에서 사용할 수 있게 한다.

● 사용방법

01 TPSVCDEF-REC.

COPY TPSVCDEF.

01 TPTYPE-REC.

COPY TPTYPE.

01 DATA-REC.

COPY User data.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TPSVCSTART" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

● 반환값

설명수행 결과

TP-STATUS에 TPOK을 설정된다. 수신된 메세지가 정의된 LEN보다 길면,

TPTRUNCATE가 설정되고 LEN만큼의 데이터만 DATA-REC에 옮겨지고 나

머지는 무시된다.

성공

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

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

설명설정값

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

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

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

제2장 프로그램 작성 35

Page 48: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

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

● 참조

TPSVRINIT, TPSVRDONE, TXBEGIN, TPCALL

2.2.13. TPSVRDONE

서버 프로세스를 종료하는 함수이다.

Tmax 응용 서버에서 TPSVRDONE은 서비스의 요청 처리를 모두 마치고 프로세스가 종료되기 전에 호출

된다. 이 루틴이 실행될 때, 그 서버 프로세스는 여전히 시스템의 일부이기는 하지만 서비스는 지원하지

않는다. 그러므로 tpsvrdone 루틴 내에서 Tmax 통신이 수행되거나 트랜잭션이 정의될 수도 있다.

TPSVRDOEN이 대화형 연결을 유지하고 있다거나 비동기성 응답을 여전히 기다리고 있거나 트랜잭션

모드에 있는 동안 반환한다면, Tmax는 대화형 연결을 종료하고 기다리고 있던 비동기성 응답 등을 무시

하고 트랜잭션을 중지한다. 그리고 그 서버는 바로 종료하게 된다.

응용 프로그램에서 TPSVRDONE 루틴을 제공하지 않는다면, Tmax가 제공하는 기본(DEFAULT) 루틴이

대신 호출된다. 디폴트 TPSVRDONE은 트랜잭션을 처리하는 서버 그룹에 포함된 서버이면, TXCLOSE와

USERLOG를 호출하여 서버가 곧 종료할 것임을 알린다.

TPRETURN이나 TPFORWARD중 하나가 TPSVRDONE내에서 호출된다면 루틴들은 아무런 작동없이

단순히 반환한다.

● 사용방법

01 TPSTATUS-REC.

COPY TPSTATUS.

PROCEDURE DIVISION.

* User code

EXIT PROGRAM.

● 참조

TPSVRINIT

2.2.14. TPSVRINIT

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

36 Tmax COBOL User Guide

Page 49: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

프로세스가 기동된 후, 아직 어떤 서비스 요청도 처리되기 전에 호출된다. 그러므로 TPSVRINIT 루틴 내

에서 Tmax 통신이 수행되거나 트랜잭션이 정의될 수도 있다. 응용 프로그램에서 TPSVRINIT 루틴이 제

공되지 않는다면, Tmax가 제공하는 기본(default) 루틴이 대신 호출된다. 기본적인 TPSVRINIT은 트랜잭

션을 처리하는 서버 그룹에 포함된 서버이면 TXOPEN과 USERLOG를 호출하여 서버가 성공적으로 시작

되었음을 알린다.

응용 프로그램 명령어 라인 옵션(CLOPT)은 ARGC와 ARGV를 통해서 전달된다. ARGC에는 파라미터의

갯수가 전달되고 ARGV는 SPACE 문자(하나)로 구분된 인자들을 포함한다. TPRETURN이나 TPFORWARD

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

● 사용방법

LINKAGE SECTION.

01 CMD-LINE.

05 ARGC PIC 9(4) COMP-5.

05 ARGV.

10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC.

01 TPSTATUS-REC.

COPY TPSTATUS.

PROCEDURE DIVISION USING CMD-LINE TPSTATUS-REC.

* User code

EXIT PROGRAM.

● 반환값

설명수행 결과

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

게 된다.

성공

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

수 없다.

실패

● 참조

TPSVRDONE

2.2.15. TXBEGIN

전역 트랜잭션을 시작하는 함수이다. Tmax 시스템에서 트랜잭션은 모두 성공하거나 모두 실패하도록하

는 한 개의 논리적인 작업 단위를 정의하는데 사용된다.

TXBEGIN 함수는 전역 트랜잭션을 시작하는 것으로서 함수 호출자는 트랜잭션 모드가 된다. 호출 프로세

스가 트랜잭션을 시작하기 전에, 먼저 TXOPEN으로 자원 관리자와 연결되어 있어야 한다. TXBEGIN 함

제2장 프로그램 작성 37

Page 50: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

수는 호출자가 이미 트랜잭션 모드에 있거나 또는 TXOPEN이 호출되지 않았다면 실패하게 되고, [TX-

PROTOCOL-ERROR]를 반환한다.

트랜잭션이 시작되면 호출 프로세스는 현재 트랜잭션을 완료하기 위해서 TPCOMMIT이나 TPROLLBACK

을 호출하여야 한다. 트랜잭션을 시작하기 위하여 반드시 TXBEGIN을 직접적으로 호출할 필요가 없는 연

속 (chaining) 트랜잭션의 경우도 존재한다. 상세한 내용은 TPCOMMIT과 TPROLLBACK을 참조한다.

● 사용방법

01 TPTRXDEF-REC.

COPY TPTRXDEF.

CALL "TXBEGIN" USING TPTRXDEF-REC.

● 반환값

설명수행 결과

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

TX-STATUS에 다음의 값들이 설정된다.실패

● 오류

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

설명에러 코드

트랜잭션 관리자가 전역 트랜잭션을 시작할 수 없다. 그 이유는 현재 호출 프

로세스가 외부의 전역 트랜잭션에 참여하고 있기 때문이다. 그러한 작업들이

[TX-OUTSIDE]

모두 완료되어야만 전역 트랜잭션을 시작할 수 있다. 참여하고 있는 트랜잭

션에는 영향을 주지 않는다.

함수가 부적절한 상황에서 호출되었다. 예를 들어, 호출자가 이미 트랜잭션

에 있는 경우이다. 현재 트랜잭션에는 영향을 주지 않는다.

[TX-PROTOCOL-ER

ROR]

트랜잭션 관리자 또는 리소스 관리자가 트랜잭션을 시작하는 중에 일시적으

로 에러를 만났다. 이 에러가 반환 되면, 호출자는 트랜잭션 모드에 있지 않게

된다. 에러의 정확한 원인은 제품의 특성에 따라 결정된다.

[TX-ERROR]

치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자는 더 이상 응용

로그램을 위하여 작업을 실행할 수 없다. 이 에러가 반환되면, 호출자는 트랜

[TX-FAIL]

잭션 모드에 있지 않게 된다. 에러의 정확한 원인은 제품의 특성에 따라 다르

다.

● 참조

TPROLLBACK, TPCOMMIT, TPGETLEV

38 Tmax COBOL User Guide

Page 51: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2.16. TXCOMMIT

전역 트랜잭션을 commit하는 함수이다. TXCOMMIT 함수는 트랜잭션 작업을 commit하는데 사용된다.

transaction-control 특성이 TX-UNCHAINED라면, TXCOMMIT이 반환할 때 호출자는 더이상 트랜잭션 모

드에 있지 않다. transaction-control 특성이 TX-CHAINED라면, TXCOMMIT이 반환할 때 호출자는 새로운

트랜잭션을 위하여 트랜잭션 모드로 남아있게 된다. 성공적으로 완료하면, TX-RETURN-STATUS이 반환

값으로 이용된다.

● 사용방법

DATA DIVISION.

* Include TX definitions.

01 TX-RETURN-STATUS.

COPY TXSTATUS.

PROCEDURE DIVISION.

CALL "TXCOMMIT" USING TX-RETURN-STATUS.

● 반환값

설명수행 결과

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

TX-STATUS에는 다음의 음수값들을 반환한다.실패

● 오류

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

설명에러 코드

트랜잭션이 성공적으로 commit 되었다. 새로운 트랜잭션은 시작될 수 없고

호출자는 더 이상 트랜잭션 모드에 있지 않다.

[TX-NO-BEGIN]

반환값은 transaction control 특성이 TX-CHAINED 일 때에만 발생될 수 있

다.

트랜잭션이 rollback 되었다. transaction-control 특성이 TX-CHAINED 라면

새로운 트랜잭션이 시작된다.

[TX-ROLLBACK]

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

이상 트랜잭션 모드에 있지 않다.

[TX-ROLLBACK-NO-BE

GIN]

반환값은 transaction-control 특성이TX-CHAINED일 때에만 발생될 수 있다.

트랜잭션이 일부는 commit 되었고 일부는 rollback 되었다. transaction--control

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

[TX-MIXED]

제2장 프로그램 작성 39

Page 52: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

트랜잭션이 일부는 commit 되었고 일부는 rollback 되었다. 새로운 트랜잭션

은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다.

[TX-MIXED-NO-BEGIN]

반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수 있다.

에러 때문에 트랜잭션이 일부는 commit 되거나 일부는 rollback 되었을 수 있

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

다.

[TX-HAZARD]

에러 때문에, 트랜잭션이 일부는 commit 되거나 일부는 rollback 되었을 수

있다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에

있지 않다.

[TX-HAZARD-NO-BE

GIN]

반환값은 transaction-control 특성이 TX-CHAINED일 때에만 발생될 수있다.

함수가 부적절한 상황에서 호출되었다. 예를 들어, 호출자가 트랜잭션 모드

에 있지 않는 경우이다. 트랜잭션과 관련된 호출자의 상태는 변함없다.

[TX-PROTOCOL-ER

ROR]

치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자가 더 이상 응용

프로그램을 위하여 작업할 수 없다. 에러의 정확한 원인은 제품의 특성에 따

라 다르다. 트랜잭션과 관련된 호출자의 상태는 알 수 없다.

[TX-FAIL]

● 참조

TXBEGIN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.2.17. TXINFORM

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

를 알려준다.

트랜잭션 모드에서 TXINFORM이 수행되면, TX-IN-TRAN이 설정되고, XID-REC는 현재 트랜잭션의 branch

identifier가 되고 TRANSACTION-STATE는 현재 트랜잭션의 상태가 된다. 호출자가 트랜잭션 모드에 있

지 않으면, TX-NOT-IN-TRAN이 설정되고 XID-REC는 NULL XID를 갖게 된다. 또한, 호출자가 트랜잭션

모드에 있는 것과 관계없이 COMMIT-RETURN, TRANSACTION-CONTROL, 그리고 초단위 TRANSAC

TION-TIMEOUT 값을 포함한다.

반환된 트랜잭션 타임아웃 값은 다음 트랜잭션이 시작될 때부터 사용된다. 그것은 호출자의 현재 전역 트

랜잭션에 대한 TIMEOUT 값이 아닐 수도 있다. 현재 트랜잭션이 시작된 후에 TXSETTIMEOUT 호출을 통

해 TRANSACTION-TIMEOUT 값을 변경했을 수도 있기 때문이다.

● 사용방법

DATA DIVISION.

* Include TX definitions.

40 Tmax COBOL User Guide

Page 53: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

01 TX-RETURN-STATUS.

COPY TXSTATUS.

01 TX-INFO-AREA.

COPY TXINFDEF.

PROCEDURE DIVISION.

CALL "TXINFORM" USING TX-INFO-AREA, TX-RETURN-STATUS.

● 반환값

설명수행 결과

TXINFO는 음수가 아닌 TX-OK를 반환한다. 호출자가 트랜잭션 모드에 있다

면 1을 반환하고, 호출자가 트랜잭션 모드에 있지 않다면 0을 반환한다.

성공

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

● 오류

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

설명에러 코드

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

을 호출하지 않았다.

[TX-PROTOCOL-ER

ROR]

치명적인 에러가 발생하여 트랜잭션 관리자는 더 이상 응용프로그램을 위한

작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

[TX-FAIL]

● 참조

TXOPEN, TXSETCOMMITRET, TXSETTRANCTL, TXSETTIMEOUT

2.2.18. TXROLLBACK

전역 트랜잭션을 rollback한다. 트랜잭션을 rollback시키는데 사용된다. transaction-contraol 특성(TXSET

TRANSACTIONCONTROL)이 TX-UNCHAINED라면 TXROLLBACK이 반환할 때, 호출자는 더 이상 트랜

잭션 모드에 있지 않다. 그러나 TRANSACTION-CONTROL 특성이 TX-CHAINED라면, TXROLLBACK이

리턴할 때 호출자는 새로운 트랜잭션을 위한 트랜잭션 모드로 남아있게 된다.

● 사용방법

01 TPTRXDEF-REC.

COPY TPTRXDEF.

01 TPSTATUS-REC.

COPY TPSTATUS.

CALL "TXROLLBACK" USING TPTRXDEF-REC.

제2장 프로그램 작성 41

Page 54: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

● 반환값

설명수행 결과

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

TX-STATUS에는 다음의 음수값들이 설정된다.실패

● 오류

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

설명에러 코드

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

이상 트랜잭션 모드에 있지 않다.

[TX-NO-BEGIN]

반환값은 transaction-control 특성이TX-CHAINED일 때에만 발생될 수 있다.

트랜잭션이 일부는 commit 되었고 일부는 rollback 되었다. TRANSACTION-

CONTROL 특성이 TX-CHAINED 라면, 새로운 트랜잭션을 시작한다.

[TX-MIXED]

트랜잭션이 일부는 commit 되었고 일부는 rollback 되었다. 새로운 트랜잭션

은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에 있지 않다.

[TX-MIXED-NO-BEGIN]

반환값은 TRANSACTION-CONTROL 특성이 TX-CHAINED일 때에만 발생

될 수 있다.

에러로 인하여 트랜잭션이 일부는 commit 되거나 일부는 rollback 되었을 수

있다. TRANSACTION-CONTROL 특성이 TX-CHAINED라면 새로운 트랜잭

션이 시작된다.

[TX-HAZARD]

에러로 인하여 트랜잭션이 일부는 commit 되거나 일부는 rollback 되었을 수

있다. 새로운 트랜잭션은 시작될 수 없고 호출자는 더 이상 트랜잭션 모드에

있지 않다.

[TX-HAZARD-NO-BE

GIN]

반환값은 TRANSACTION-CONTROL 특성이 TX-CHAINED 일 때에만 발생

될 수 있다.

트랜잭션이 독자적으로 commit된다. TRANSACTION-CONTROL 특성이 TX-

CHAINED라면 새로운 트랜잭션이 시작된다.

[TX-COMMITTED]

트랜잭션이 독자적으로 commit 되었다. 새로운 트랜잭션은 시작될 수 없고

호출자는 더 이상 트랜잭션 모드에 있지 않다.

[TX-COMMITTED-NO-

BEGIN]

반환값은 TRANSACTION-CONTROL 특성이 TX-CHAINED일 때만 발생될

수 있다.

함수가 부적절한 상황에서 호출되었다. 예를 들어, 호출자가 트랜잭션 모드

에 있지 않다. 트랜잭션과 관련된 호출자의 상태는 변함없다.

[TX-PROTOCOL-ER

ROR]

42 Tmax COBOL User Guide

Page 55: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

치명적인 에러가 발생하여 트랜잭션 관리자나 리소스 관리자는 더 이상 응용

프로그램을 위한 작업을 실행할 수 없다. 에러의 정확한 원인은 제품의 특성

에 따라 다르다. 트랜잭션과 관련된 호출자의 상태는 알 수 없다.

[TX-FAIL]

● 참조

TXBEGIN, TPCOMMIT, TPGETLEV, TPACALL

2.2.19. TXSETCOMMITRET

commit-return의 특성을 설정하는 함수이다. TXSETCOMMITRET는 commit-return특성을 COMMIT-RE

TURN 에 설정한다. TXCOMMIT이 함수 호출자에게 제어권을 반환하는 방식을 결정한다. TXSETCOM

MITRET는 함수 호출자가 트랜잭션 모드에 있는 것과 관계 없이 호출가능하다. 설정은 TXSETCOMMITRET

재호출로 인해 변경될 때까지 유효하게 적용된다.

● 사용방법

DATA DIVISION.

* Include TX definitions.

01 TX-RETURN-STATUS.

COPY TXSTATUS.

01 TX-INFO-AREA.

COPY TXINFDEF.

PROCEDURE DIVISION.

CALL "TXSETCOMMITRET" USING TX-INFO-AREA TX-RETURN-STATUS.

commit-return 특성에 사용 가능한 값은 다음과 같다. commit-return 특성에 대한 초기 설정은 TX-

COMMIT-COMPLETED 이다.

설명설정값

TXCOMMIT이 2PC(Two-Phase Commit) 프로토콜 중 첫번째 단계에서 로깅

된 후, 아직 두번째 단계는 완료되기 전에 반환하도록 한다.

TX-COMMIT-DECISION-

LOGGED

TXCOMMIT이 호출자에게 보다 빠르게 응답할 수 있다. 트랜잭션이 독자적

(heuristic)인 결과를 갖게 될 위험이 있고, 그런 경우에 호출자는 TXCOMMIT

으로부터 반환 된 코드로 발생된 상황을 제대로 알 수 없다. 정상적인 경우,

첫번째 단계에서 트랜잭션을 commit 하기로 한 트랜잭션 참여자는 두번째

단계에서 제대로 commit 하게 된다.

네트워크나 노드 장애가 길게 지속되는 등의 비정상적인 경우에는 2 단계 완

료가 가능하지 않을 수 있으며, 독자적인 결과를 초래할 수도 있다. 트랜잭션

제2장 프로그램 작성 43

Page 56: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명설정값

관리자는 옵션으로 이 특성을 지원하지 않도록 선택할 수 있으며, 이 때 이 값

을 지원하지 않음을 나타내는 [TX-NOT-SUPPORTED] 값으로 반환한다.

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

ED트랜잭션이 독자적인 (heuristic) 결과를 갖게 되었거나 또는 그럴 가능성을

알리는 반환 코드를 TXCOMMIT의 호출자에게 보여준다. 트랜잭션 관리자는

옵션으로 이 특징을 지원하지 않도록 선택할 수 있으며, 이 때 이 값을 지원하

지 않음을 나타내는 [TX-NOT-SUP-PORTED] 값으로 반환한다.

● 반환값

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

이 TX-COMMIT-COMPLETED 또는 TX-COMMIT-DECISION-LOGGED으로 설정되지 않았다면, 함수

는 음이 아닌 값으로 [TX-NOT-SUPPORTED]를 반환한다. COMMIT-RETURN 특성은 현재 적용되고

있는 값이 여전히 유효하다.

트랜잭션 관리자는 COMMIT-RETURN 을 최소한 TX-COMMIT-COMPLETED나 TX-COMMIT-DECISION-

LOGGED 중의 하나로는 설정해야 한다.

● 오류

다음과 같은 상황에서, TXSETCOMMITRET는 commit-return 특성 설정은 변경하지 않고 다음의 음수

값 중 하나를 반환한다.

설명에러 코드

COMMIT-RETURN이 TX-COMMIT-COMPLETED 나 TX-COMMIT-DECISION-

LOGGED 로 설정되어 있지 않다.

[TX-EINVAL]

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

은 상태이다.

[TX-PROTOCOL-ER

ROR]

● 참조

TXCOMMIT, TXOPEN, TXINFORM, TXGBEGIN, TXROLLBACK

2.2.20. TXSETTIMEOUT

transaction-timeout 설정하는 함수이다. TXSETTIMEOUT은 transaction-timeout 특성을 timeout 값으로

설정한다. 이 값은 트랜잭션 타임아웃이 발생하기 전에 트랜잭션을 완료해야 하는 시간이다. TXBEGIN

과 TXCOMMIT 또는 TXBEGIN과 TXROLLBACK 사이의 시간이 된다.

44 Tmax COBOL User Guide

Page 57: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

TXSETTIMEOUT은 함수 호출자가 트랜잭션 모드에 있는지와 상관없이 호출이 가능하다. TXSETTIMEOUT

이 트랜잭션 모드에서 호출된다면, 새로운 타임아웃 값은 다음 트랜잭션때부터 적용된다. transaction-

timeout 의 초기값은 0 으로 타임아웃 제한이 없음을 의미한다.

TRANSACTION-TIMEOUT 인수는 트랜잭션 타임아웃이 발생하기 전까지 허용된 시간을 초단위 숫자로

지정하는데 시스템별로 정의된 S9(9) COMP-5 타입의 최대값까지 설정가능하다.

● 사용방법

DATA DIVISION.

* Include TX definitions.

01 TX-RETURN-STATUS.

COPY TXSTATUS.

*

01 TX-INFO-AREA.

COPY TXINFDEF.

PROCEDURE DIVISION.

CALL "TXSETTIMEOUT" USING TX-INFO-AREA TX-RETURN-STATUS.

● 반환값

설명수행 결과

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

TXSETTIMEOUT는 기존의 transaction-timeout 값 변경없이 다음의 음수값

중 하나를 반환한다.

실패

● 오류

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

설명에러 코드

지정된 타임아웃 값이 유효하지 않다.[TX-EINVAL]

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

을 호출하지 않았다.

[TX-PROTOCOL-ER

ROR]

치명적인 에러가 발생하여 트랜잭션 관리자가 더 이상 응용 프로그램을 위한

작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

[TX-FAIL]

● 참조

TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM

제2장 프로그램 작성 45

Page 58: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2.2.21. TXSETTRANCTL

transaction_control 특성을 설정하는 함수이다. TXSETTRANCTL은 transaction_control 특성을 TRANS

ACTION-CONTROL에 설정된 값으로 설정한다.

TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션을 시작할지 여부를 결정한

다. TXSETTRANCTL 함수는 응용 프로그램이 트랜잭션 모드에 있는지 여부와 관계없이 호출이 가능하

다. 이 설정은 TXSETTRANCTL이 재호출에 의해서 변경될 때까지 유효하게 적용된다.

● 사용방법

DATA DIVISION.

* Include TX definitions.

01 TX-RETURN-STATUS.

COPY TXSTATUS.

*

01 TX-INFO-AREA.

COPY TXINFDEF.

PROCEDURE DIVISION.

CALL "TXSETTRANCTL" USING TX-INFO-AREA TX-RETURN-STATUS.

transactioin_control로 사용 가능한 값은 다음과 같다. TRANSACVTION-CONTROL 특성의 초기 설정

값은 TX-UNCHAINED 이다.

설명설정값

TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션

을 시작하지 않도록 한다. 호출자는 새로운 트랜잭션을 시작하려면 TXBEGIN

을 실행해야 한다.

TX-UNCHAINED

TXCOMMIT과 TXROLLBACK이 호출자에게 반환하기 전에 새로운 트랜잭션

을 시작한다.

TX-CHAINED

● 반환값

설명수행 결과

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

TXSETTRANCTL은 기존의 transactioin_control 특성 변경없이, 다음의 음수

값을 반환한다.

실패

● 오류

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

46 Tmax COBOL User Guide

Page 59: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

설명에러 코드

지정된 타임아웃 값이 유효하지 않다.[TX-EINVAL]

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

을 호출하지 않았다.

[TX-PROTOCOL-ER

ROR]

치명적인 에러가 발생하여 트랜잭션 관리자가 더 이상 응용 프로그램을 위한

작업을 수행할 수 없다. 에러의 정확한 원인은 제품의 특성에 따라 다르다.

[TX-FAIL]

● 참조

TXBEGIN, TXCOMMIT, TXOPEN, TXROLLBACK, TXINFORM

제2장 프로그램 작성 47

Page 60: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은
Page 61: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

제3장 예제

3.1. 서비스 프로그램다음은 서비스 프로그램 작성 과정이다.

예제 프로그램에서 설명하는 서비스는 XA 서버 그룹에 속한 서버로서 Tmax의 AUTOTRAN 기능을 이용

하므로, 반드시 Tmax 환경파일에서 해당 서비스에 대해서 “AUTOTRAN=Y” 설정이 필요하다.

3.1.1. 예제 프로그램

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

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

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

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

IDENTIFICATION DIVISION.

PROGRAM-ID. CARRAYAUTO.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

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

* TMAX ATMI 함수를 위한 definitions

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

01 TPSVCRET-REC.

COPY TPSVCRET.

*

제3장 예제 49

Page 62: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

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.

50 Tmax COBOL User Guide

Page 63: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

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

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

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.

제3장 예제 51

Page 64: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

200-EXIT.

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

DATA-REC BY SEND-STRING.

900-TPRETURNFAIL-X.

52 Tmax COBOL User Guide

Page 65: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

서비스명 설정

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

PROGRAM-ID. CARRAYAUTO.

버퍼 정의

클라이언트와 데이터 송수신에 사용되는 버퍼를 정의한다. 서비스 호출자와 데이터를 주고 받을 때 사용

할 버퍼를 정의한다.

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

* User defined data records

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

01 RECV-STRING PIC X(100).

01 SEND-STRING PIC X(100).

서비스 시작

서비스를 시작한다. 서비스를 시작하면서 서비스 호출자가 보낸 데이터를 "버퍼 정의"에서 정의한 버퍼에

받아낸다. 이 sample에서는 RECV-STRING에 서비스호출자가 전송한 데이터가 저장된다. 어떤 에러가

발생하면 “ IF NOT TPOK “에서 검사될 것이며, 서비스 호출자가 보낸 데이터보다 버퍼(RECV-STRING)

의 사이즈가 작으면 TPTRUNCATE 에러가 발생한다.

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.

제3장 예제 53

Page 66: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

서비스 종료

성공적인 서비스를 종료한다.

SET TPSUCCESS TO TRUE.

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-STRING.

에러 처리

로직의 에러로 실패를 반환한다.

비지니스 로직의 완료 후에 서비스호출자에게 응답을 주기 위해서는 TPRETURN을 사용한다. 서비스 수

행이 실패한 경우에는 TPFAIL을 이용한다. TPFAIL을 이용하여 TPRETURN하는 경우에는 서비스 호출

자는 에러코드로 C 언어에서는 tperrno=11(TPESVCFAIL), COBOL 언어에서는 TP-STATUS=11(TPESVC

FAIL)을 반환받는다.

SET TPFAIL TO TRUE.

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

MOVE LENGTH OF SEND-STRING TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-STRING.

3.1.2. Makefile

사용자가 작성한 서비스 프로그램과 Tmax에서 제공하는 라이브러리, DB벤더에서 제공하는 라이브러리

들이 묶어서 하나의 실행파일을 만들게 된다.

실행파일을 만드는 과정은 다음과 같다.

1. *.pco   *.cob

ProCOBOL 프로그램을 precompile한다.

54 Tmax COBOL User Guide

Page 67: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2. *.cob   *.o

COBOL 프로그램을 compile하여 오브젝트 파일 생성한다.

3. *.o + *.a   실행파일 :

Tmax에서 제공하는 라이브러리, DB벤더에서 제공하는 라이브러리를 link하여 실행파일을 생성한다.

COBOL로 작성한 서비스가 1개이면서 1서버가 이 서비스 1개로 이루어지는 경우에는 위의 세 단계를 1

개의 Makefile에서 처리한다. 그러나 일반적으로 1개의 서버에는 복수개의 서비스가 존재하게 된다. 즉,

*.pco .cob, *.cob   *.o 의 단계는 각 서비스별로 이루어져야 하고, *.o + 라이브러리 파일들을 묶어서 서버

를 만드는 과정은 1회 이루어지면 된다.

그래서 *.pco  *.o 는 shell프로그램에서 처리하고, 실행파일을 만드는 과정은 Makefile에서 처리한다.

$ 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. COBOL object 파일을 shell에서 생성한다.

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

주의

1. procob18 또는 cob 의 compile option은 운영체제 별로 달라지므로 확인 후 작업한다. Procob18

에서 사용하는 option은 $ORACLE_HOME/precomp/demo/procob/demo_procob.mk 파일을 참조한

다.

제3장 예제 55

Page 68: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

2. carray_xa.sh 에는 carrayauto.pco, carraynauto.pco 를 pre-compile, compile과정을 거치므로, 예

제 프로그램에서 carrayauto.pco, carraynauto.pco가 모두 필요하다.

2. 실행파일을 만들기 위한 Makefile을 생성한다.

#Makefile

TARGET = carray_xa -----(1)

TMAXCBLSTUB = cblstub -----(2)

TMAXCBLSTUBOBJ = $(TMAXCBLSTUB).o

COBOBJS = carrayauto.o carraynauto.o -----(3)

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 -----(4)

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

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

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

56 Tmax COBOL User Guide

Page 69: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

clean:

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

(1) TARGET = carray_xa

서버(실행파일)명을 설정한다.

(2) TMAXCBLSTUB = cblstub

Tmax에서 제공하는 stub 파일명을 설정한다.

(3) COBOBJS = carrayauto.o carraynauto.o

COBOL로 작성한 서비스의 object 파일명을 설정한다.

(4) LIBS = -loras -lcbls

Tmax에서 제공하는 라이브러리 파일명을 설정한다.

3. Makefile의 생성이 완료되면 컴파일한다.

$ make -f carray_xa.mk

4. 서버 프로그램을 기동한다.

$ tmboot -s carray_xa

5. 서비스 프로그램을 테스트한다.

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

$TMAXDIR/cobclient 디렉터리에 포함되어 있는 tmd_CARRAYAUTO 파일을 이용하여 CARRAYAUTO

서비스를 테스트한다.

$ cd $TMAXDIR/cobclient

$ tmd -i t md_CARRAYAUTO

output: 성공적 처리

3.2. FDL 버퍼 사용 프로그램COBOL 서비스 프로그램에서 FDL 버퍼를 직접 사용할 수 없기 때문에, Struct 구조와의 상호변환 작업이

요구된다. 그리고 FDL 버퍼와 뷰 (필드와 struct을 mapping시킨 파일)을 이용하기 위해서는 사전 작업이

필요하다.

제3장 예제 57

Page 70: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

cobolsanple.tar를 풀면, 뷰 sample은 ucblinc 디렉터리에 viewdemo.v 라는 이름으로 존재하고 FDL sample

은 fdldemo.f 라는 이름으로 존재한다.

Fdl : $TMAXDIR/ucblinc/fdldemo.f

View : $TMAXDIR/ucblinc/viewdemo.v

3.2.1. FDL 파일 만들기

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

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

output으로 생성된 tmax.fdl 파일은 환경변수에 지정한 $FDLFILE에 지정된 디렉터리에 위치시킨다.

cobolsample.tar 파일을 이용하는 경우에는 $TMAXDIR/ucblinc 디렉터리에 fdldemo.f 파일이 생성되므로,

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

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

참고

필드 버퍼 사용에 관련된 자세한 정보는 Tmax 안내서 중에 “Tmax FDL Reference Guide”를 참조한

다.

3.2.2. 뷰 파일 만들기

COBOL에서는 필드 버퍼를 사용할 수 없기 때문에 뷰(struct구조)를 생성하여 요청자로부터 전달된(또는

전달할) 필드 버퍼의 내용을 특정 함수를 이용하여 변환할 때 사용한다.

58 Tmax COBOL User Guide

Page 71: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

< 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

output으로 생성된 tmax.sdl 파일은 환경변수에 지정한 $SDLFILE 에 정의한 디렉터리에 위치시킨다.

cobolsample.tar 파일을 이용하는 경우에는 $TMAXDIR/ucblinc 디렉터리에 viewdemo.v 파일이 생성되므

로, 이 디렉터리에서 sdlc 작업을 수행하여 $SDLFILE 에 $TMAXDIR/ucblinc 가 지정되도록 한다.

$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

3.2.3. COBOL용 뷰 파일 만들기

$ sdlc -C -v viewdemo.v

$ls -l total 48

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 >

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

제3장 예제 59

Page 72: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

이 파일은 COBOL에서 COPY 명령어를 통해서 소스내에서 이용되어야 하므로, $COBCPY 에 지정된 디

렉터리에 위치시킨다. Cobolsample.tar 파일을 이용하는 경우에는 $TMAXIDIR/ucblinc 디렉터리에 이 파

일이 위치하게 된다.

주의

관리의 효율성을 위해서 Tmax에서 제공하는 COBOL 용 헤더파일과 분리하여 다른 디렉터리에 저

장하는 것을 권장한다.

export COBCPY=$TMAXDIR/cobinc:$TMAXDIR/ucblinc로 환경을 설정하고, 사용자가 생성한 뷰 파일들

은 $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

3.2.4. 서비스 작성하기

다음은 필드 버퍼를 이용하여 서비스 프로그램을 작성하는 과정이다.

1. 필드 선언한다.

2. 클라이언트로부터 필드 버퍼를 전달 받는다.

3. FIELD 버퍼를 struct로 변환한다.

4. COBOL 소스 내에서 데이터 조작한다.

5. 전송할 때 사용할 필드 버퍼 생성한다.

6. Struct 를 필드 버퍼로 변환한다.

60 Tmax COBOL User Guide

Page 73: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

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

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

제3장 예제 61

Page 74: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

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

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

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

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

62 Tmax COBOL User Guide

Page 75: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

MOVE SERVICE-NAME TO LOGMSG-SVC.

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

PERFORM 800-USERLOG.

100-EXIT.

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

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

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

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

제3장 예제 63

Page 76: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

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

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

800-USERLOG.

DISPLAY LOGMSG.

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

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

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

900-TPRETURNSCS.

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

64 Tmax COBOL User Guide

Page 77: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

필드 선언

다음은 필드 선언에 대한 예제이다. RECV-BUFFER/SEND-BUFFER는 서비스 호출자로부터 전송된 데

이터를 받거나 보낼때 사용하는 버퍼이고 VIEWDEMO는 필드 버퍼와 뷰를 상호 전환할 때 사용하는 구조

체이다.

01 FML-REC.

COPY FMLINFO.

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

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

* VIEWFILE: "viewdemo.v"

* VIEWNAME: "viewdemo"

제3장 예제 65

Page 78: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

*

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

필드 버퍼 전달

서비스 호출자로부터 전송된 데이터를 받기위해서는 반드시 서비스 시작가 시작될 때 가장 처음에

TPSVCSTART를 수행해야만 한다.

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

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

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

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.

66 Tmax COBOL User Guide

Page 79: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

필드 버퍼를 struct로 변환

서비스 호출자로부터 전송받은 필드 버퍼의 데이터를 COBOL에서 사용할 struct로 변환할 때 사용한다.

서비스 호출자가 필드 버퍼에 실어서 보낸 데이터가 FVFTOS를 통하여, COBOL의 struct에 저장된다. array

를 사용할 때, 전송된 데이터갯수가 array 개수에 모자라는 경우에는 뷰 파일에서 정의한 기본값이 채워진

다.

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

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

필드 버퍼 생성

서비스 호출자에게 데이터를 전송할 때 사용할 버퍼는, 받은 버퍼를 그대로 사용해도 되고, 새로운 버퍼를

생성하여 사용해도 된다. 새로운 버퍼를 사용하는 경우에는 FINIT을 사용한다.

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

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

제3장 예제 67

Page 80: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

데이터 조작

비즈니스로직을 수행할 데이터를 조작한다.

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.

struct를 필드 버퍼로 변환

서비스 호출자에게 필드 타입의 데이터를 전송하기 위해서 COBOL에서 사용한 struct 데이터를 필드 타

입의 데이터로 변환한다.

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.

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

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

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

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

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

900-TPRETURNSCS.

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

PERFORM 800-USERLOG.

SET TPSUCCESS TO TRUE.

68 Tmax COBOL User Guide

Page 81: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

MOVE LENGTH OF SEND-BUFFER TO LEN.

COPY TPRETURN REPLACING

DATA-REC BY SEND-BUFFER.

900-TPRETURNSCS-X.

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

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

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

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

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.

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

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

제3장 예제 69

Page 82: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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의 값을 확인한다.

3.3. 전역 트랜잭션 프로그램

3.3.1. 예제 프로그램

다음은 전역 트랜잭션을 사용하는 서비스 프로그램에 대한 예제이다.

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

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

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

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

IDENTIFICATION DIVISION.

PROGRAM-ID. CARRAYNAUTO.

……

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.

70 Tmax COBOL User Guide

Page 83: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

……

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

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.

제3장 예제 71

Page 84: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

200-EXIT.

명시적 트랜잭션을 시작하는 서비스는 Tmax 환경파일에서 AUTOTRAN=N(Tmax3.8.9이후, default)로

반드시 설정되어 있어야 한다.

Tmax 환경파일에 AUTOTRAN=Y 로 설정되어 있으면, 서비스 시작하면서 자동으로 전역 트랜잭션을 시

작하게 되므로 서비스에서 명시적으로 TXBEGIN을 사용할 때 TPEPROTO 에러를 반환받게 된다.

AUTOTRAN=N 일지라도 클라이언트에서 명시적 트랜잭션을 시작하고, 서비스에서도 명시적 트랜잭션

을 시작하게되면 서비스에서 수행한 TXBEGIN은 TPEPROTO 에러를 반환 받으므로 주의한다.

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

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.

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

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.

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

CALL "TXROLLBACK" USING TX-RETURN-STATUS

IF NOT TPOK

MOVE "txrollback ERROR " TO LOGMSG-TEXT

PERFORM 800-USERLOG

END-IF.

3.3.2. 서비스 컴파일 및 기동

$ sh carray_xa.sh $ make –f carray_xa.mk $ tmboot –s carray_xa

72 Tmax COBOL User Guide

Page 85: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

3.3.3. 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient $ tmd -i t md_CARRAYNAUTO output: 성공적 처리

3.4. TPSVRINIT/TPSVRDONE 이용

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

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.

*

제3장 예제 73

Page 86: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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.

3.4.2. TPSVRDONE

Tmax 서버를 종료하는 함수이다. Tmax서버가 종료될 때 최후에 1회만 수행된다. 일반적으로 Non-xa 서

버그룹에 속하는 서버들이 DB연결을 해제하는 로직을 수행한다. tpsvrdone.pco라는 이름으로 cobolsam

ple.tar에 포함되어 있고, 컴파일과정(.o를 생성)을 거쳐서 서버프로그램 object와 함께 link된다.

74 Tmax COBOL User Guide

Page 87: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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

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

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

IDENTIFICATION DIVISION.

PROGRAM-ID. TPSVRDONE.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

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.

제3장 예제 75

Page 88: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

SET TPEINVAL IN SERVER-DONE-STATUS TO TRUE.

EXIT PROGRAM.

3.4.3. 서비스 컴파일 및 기동

$ 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

3.4.4. 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient

$ tmd -i tmd_CARRAYNXA

output: 성공적 처리 from CARRAYNXA

3.5. 서비스에서 서비스 호출 프로그램

3.5.1. 예제 프로그램

다음은 서비스에서 서비스 호출하는 프로그램에 대한 예제이다.

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

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

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

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

IDENTIFICATION DIVISION.

PROGRAM-ID. SVCTPCALL.

AUTHOR. TMAX DEVELOPMENT.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

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

* TMAX ATMI 함수를 위한 definitions

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

76 Tmax COBOL User Guide

Page 89: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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.

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

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

제3장 예제 77

Page 90: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

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

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.

서비스에서 서비스 호출

서비스 호출자는 Tmax 클라이언트 또는 서비스가 될 수 있다. Tmax 서비스에서도 또 다른 Tmax 서비스

를 호출할 수 있다는 의미이다.

78 Tmax COBOL User Guide

Page 91: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은

위의 예제처럼 또 다른 서비스를 호출하기 위해서는 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

3.5.2. 서비스 호출 컴파일 및 기동

$ make -f svctpcall.mk

$ tmboot -s svctpcall

3.5.3. 서비스 호출 테스트

$ cd $TMAXDIR/sample/cobclient

$ tmd -i tmd_SVCTPCALL

output: 성공적 처리 from CARRAYNXA

제3장 예제 79

Page 92: Tmax COBOL User Guide - 티맥스소프트 -TmaxSoft · 2019-04-09 · 안내서 구성 Tmax COBOL User Guide는 총 3개의 장으로 구성되어 있다. 각 장의 주요 내용은