예제

본 장에서는 AnyLink Tmax 어댑터를 사용한 예제를 설명한다.

1. 개요

사용된 전문은 모두 WebtStringBuffer 방식을 기본으로 한다. Tmax 및 WebT에 관한 자세한 내용은 Tmax 안내서를 참고한다.

다음은 Tmax 기본 거래 구성이다.

figure tmax tutorial 1 info
기본 거래 구성도

다음은 거래 순서를 수행하는 과정에 대한 설명이다.

  1. Sample Tmax Client Java 프로그램을 통해 요청 입력 전문을 Tmax의 SENDCLNT 서비스로 전송한다.

  2. Tmax에서 전문 수신 후 JAVA GW를 통해 AnyLink로 전문을 전송한다.

  3. 인바운드 어댑터로 전문 수신 후 서비스 플로우를 수행한다.

  4. 서비스 플로우에서 요청 입력 전문을 요청 출력 전문으로 매핑한다.

  5. 아웃바운드 어댑터를 통해 요청 출력 전문을 Tmax Server의 TEST_SERVICE 서비스를 요청한다.

  6. Tmax Server에서 아웃바운드 어댑터로 응답 입력 전문을 전송한다.

  7. 서비스 플로우에서 응답 입력 전문을 응답 출력 전문으로 매핑한다.

  8. 인바운드 어댑터로 응답 출력 전문을 Tmax Java GW로 전송한다.

  9. Tmax JAVA GW는 응답 출력 전문을 Sample Tmax Client로 전송한다.

 

전문 구성

다음은 예제에서 사용할 전문 구성이다.

  • 요청 입력

    • 헤더 전문

      필드명 설명 타입 크기

      kind_code

      종별코드

      Char

      4

      tx_code

      거래코드

      Char

      4

      date

      날짜

      Char

      8

      id

      아이디

      Char

      10

    • 바디 전문

      필드명 설명 타입 크기

      branch_number

      지점번호

      Number

      3

      teller_number

      담당자번호

      Char

      5

      name

      이름

      Char

      10

      account

      계정

      Char

      12

      data

      데이터

      Char

      50

  • 요청 출력

    • 헤더 전문

      필드명 설명 타입 크기

      tx_code

      거래코드

      Char

      4

      id

      아이디

      Char

      10

    • 바디 전문

      필드명 설명 타입 크기

      name

      이름

      Char

      10

      account

      계정

      Char

      12

      data

      데이터

      Char

      50

  • 응답 입력

    • 헤더 전문

      필드명 설명 타입 크기

      return_code

      응답 코드

      Char

      4

      id

      아이디

      Char

      10

    • 바디 전문

      필드명 설명 타입 크기

      transactionDate

      응답일자

      Char

      8

      transferType

      관리정보

      Char

      4

  • 응답 출력

    • 헤더 전문

      필드명 설명 타입 크기

      kind_code

      종별코드

      Char

      4

      tx_code

      거래코드

      Char

      4

      date

      날짜

      Char

      8

      id

      아이디

      Char

      10

    • 바디 전문

      필드명 설명 타입 크기

      return_code

      응답코드

      Char

      4

      transferType

      관리정보

      Char

      4

2. 어댑터 생성

AnyLink WebAdmin에 로그인한 후 초기 화면에서 [구성관리] > [어댑터]를 선택한 후 어댑터 목록 화면[Add] 버튼을 클릭하면 어댑터 등록 화면이 나타난다. 어댑터 생성에 대한 자세한 내용은 어댑터 설정을 참고한다.

AnyLink WebAdmin의 접속 및 사용법에 관한 자세한 내용은 AnyLink WebAdmin 안내서를 참고한다.

2.1. 인바운드 어댑터 생성

다음은 Tmax 인바운드 어댑터를 생성하는 예제이다.

figure create tmax in adapter
인바운드 어댑터 등록 화면
  • 기본정보

    항목 설정

    어댑터 아이디

    TMAX_IN_ADT

    어댑터 이름

    TMAX_IN_ADT

    어댑터 종류

    Tmax

    설명

    TMAX 인바운드 어댑터

    업무시스템

    ANL001

  • [상세설정] 탭

    항목 설정

    아웃바운드 스레드 풀 아이디

    사용 안함

2.2. 아웃바운드 어댑터 생성

다음은 Tmax 아웃바운드 어댑터를 생성하는 예제이다.

figure create tmax out adapter
아웃바운드 어댑터 등록 화면
  • 기본정보

    항목 설정

    어댑터 아이디

    TMAX_OUT_ADT

    어댑터 이름

    TMAX_OUT_ADT

    어댑터 종류

    Tmax

    설명

    TMAX 아웃바운드 어댑터

    업무시스템

    ANL001

  • [상세설정] 탭

    항목 설정

    아웃바운드 스레드 풀 아이디

    사용 안함

3. 엔드포인트 생성

어댑터 생성이 완료되면 [어댑터] 탭에서 등록된 어댑터를 조회하고, 조회된 어댑터를 클릭하면 어댑터 상세정보 화면으로 이동한다.

[엔드포인트 목록] 탭 아래 [Add] 버튼을 클릭하면 엔드포인트 등록 화면이 나타난다. 엔드포인트 생성에 대한 자세한 설명은 엔드포인트 설정을 참고한다.

3.1. 인바운드 엔드포인트 생성

다음은 Tmax 인바운드 엔드포인트를 등록하는 예제이다.

  • 기본정보

    figure tutorial ep in basic info
    인바운드 엔드포인트 등록 화면 - 기본정보
    항목 설정

    엔드포인트 아이디

    TMAX_IN_EP

    엔드포인트 이름

    TMAX_IN_EP

    엔드포인트 상태

    Running

    부팅 초기값

    Running

    통신 방향

    Inbound

    설명

    Tmax 인바운드 엔드포인트

  • [연결정보] 탭

    figure tutorial ep in connect info
    인바운드 엔드포인트 등록 화면 - [연결정보]
    항목 설정

    연결 방식

    Server

    스레드 최대값

    10

    포트

    31000

    최대 연결 수

    10

  • [상세설정] 탭

    figure tutorial ep in detail info
    인바운드 엔드포인트 등록 화면 - [상세설정]
    항목 설정

    거래그룹/거래

    manual.tmax.tmaxCase1.tx01 (거래그룹/거래 항목은 직접 입력해도 되고 차후 거래그룹/거래 생성 후 선택하여도 무방하다.)

3.2. 아웃바운드 엔드포인트 생성

다음은 Tmax 아웃바운드 엔드포인트를 등록하는 예제이다. [상세설정] 탭은 설정하지 않는다.

  • 기본정보

    figure tutorial ep out basic info
    아웃바운드 엔드포인트 등록 화면 - 기본정보
    항목 설정

    엔드포인트 아이디

    TMAX_OUT_EP

    엔드포인트 이름

    TMAX_OUT_EP

    엔드포인트 상태

    Running

    부팅 초기값

    Running

    통신 방향

    Outbound

    설명

    Tmax 아웃바운드 엔드포인트

  • [연결정보] 탭

    figure tutorial ep out connect info
    아웃바운드 엔드포인트 등록 화면 - [연결정보]
    항목 설정

    연결 방식

    Client

    스레드 최대값

    10

    IP/호스트

    192.168.15.75 (Sample Tmax 서가 구동되어 있는 장비의 장비의 IP를 지정한다.)

    포트

    7282

    Read 타임아웃

    30000

    연결 타임아웃

    3000

    최대 연결 수

    10

4. 스튜디오 리소스 생성

본 절에서는 스튜디오에서 리소스를 생성하는 방법에 대해서 설명한다.

AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다.

4.1. 거래그룹 생성

거래그룹 네비게이터에서 프로젝트를 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [거래 / 거래그룹]을 선택한다.

figure tutorial txgrp create
거래그룹 생성
항목 설정

패키지 이름

manual.tmax

거래 ID

tmaxCase1

거래 이름

tmaxCase1

4.2. 거래 생성

거래그룹 네비게이터에서 거래그룹을 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [거래 / 거래그룹]을 선택한다.

figure tutorial tx create
거래 생성
항목 설정

노드 타입

거래

거래 ID

tx01

거래 이름

tx01

4.3. 메시지 생성

요청 입력 헤더/바디, 요청 출력 헤더/바디, 응답 입력 헤더/바디, 응답 출력 헤더/바디 메시지를 생성한다.

메시지 설정에 관한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다.

4.4. 아웃바운드 룰 생성

거래그룹 네비게이터에서 거래를 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [아웃바운드 룰] > [Tmax 아웃바운드 룰]을 선택한다.

figure tutorial outboundrule create
아웃바운드 룰 생성
항목 설정

아웃바운드 아이디

tmaxOutbound

아웃바운드 이름

Tmax아웃바운드

4.5. 플로우 생성

거래그룹 네비게이터에서 거래를 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [플로우]를 선택한다.

figure tutorial flow create
플로우 룰 생성
항목 설정

플로우 아이디

TmaxFlow

플로우 이름

Tmax플로우

5. 스튜디오 리소스 설정

본 절에서는 생성한 리소스를 설정하는 방법에 대해서 설명한다.

AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다.

다음은 리소스를 모두 설정한 후 조회되는 거래그룹 네비게이터이다.

figure tutorial navigator
거래그룹 네비게이터

5.1. 거래그룹 설정

본 절에서는 거래그룹을 설정하는 예제를 설명한다. [파싱 옵션] 탭은 설정하지 않는다.

  • [거래그룹 정보] 탭

    figure tutorial txgrp edit
    거래그룹 설정 - [거래그룹 정보]
    항목 설정

    요청 메시지

    요청입력헤더

    정상 응답 메시지

    응답출력헤더

    Bypass 설정

    NO

    XA 설정

    NO

    오류 응답 방식

    NONE

  • [거래그룹 옵션] 탭

    figure tutorial txgrp edit opt
    거래그룹 설정 - [거래그룹 옵션]
    항목 설정

    거래 플로우 타임아웃(ms)

    60000

    응답 유무

    REQUEST_RESPONSE

    거래 우선순위

    MEDIUM

  • [파싱정보] 탭

    figure tutorial txgrp edit parsing
    거래그룹 설정 - [파싱 정보]
    항목 설정

    하위 거래 식별 방법

    MESSAGE

    메시지 ID

    ReqInHeader.umsg

    필드 ID

    tx_code

5.2. 거래 설정

다음은 거래를 설정하는 예제이다. [파싱 옵션] 탭은 설정하지 않는다.

  • [거래정보] 탭

    figure tutorial tx edit
    거래 설정 - [거래정보]
    항목 설정

    요청 메시지

    요청입력바디

    정상 응답 메시지

    응답출력바디

    Bypass 설정

    NO

    XA 설정

    NO

    오류 응답 방식

    PARENT

    서비스 타입

    FLOW

    서비스 이름

    TmaxFlow_Message_STRT_Event_697118(랜덤으로 생성됨)

  • [거래 옵션] 탭

    figure tutorial tx edit opt
    거래 설정 - [거래 옵션]
    항목 설정

    거래 플로우 타임아웃(ms)

    미설정

    타임아웃 설정 안함

    체크

    응답 유무

    PARENT

    거래 우선순위

    MEDIUM

  • [파싱 정보] 탭

    figure tutorial tx edit parsing
    거래 설정 - [파싱 정보]
    • 거래 식별코드

      항목 설정

      코드값

      A001

      종류

      REQUEST

5.3. 아웃바운드 룰 설정

다음은 Tmax 아웃바운드 룰 설정 예제이다.

figure tutorial outboundrule edit
아웃바운드 룰 설정
항목 설정

요청처리 타임아웃(ms)

10000

Endpoint

TMAX_OUT_EP

Tmax 응답 유무

true

Tmax XA 트랜잭션

false

Tmax 서비스 타임아웃

5000

Tmax 서비스 ID

TEST_SERVICE

요청 메시지

요청출력헤더(ReqOutHeader)

요청출력바디(ReqOutBody)

정상 응답 메시지

응답입력헤더(ResInHeader)

응답입력바디(ResInBody)

5.4. 플로우 설정

다음의 과정으로 플로우를 설정한다.

  1. 플로우 그리기

  2. 변수 설정

  3. 메시지 이벤트 설정

  4. 아웃바운드 호출 설정

  5. 응답 호출 설정

 

플로우 그리기

다음은 예제에 대한 서비스 플로우이다.

figure tutorial flow
서비스 플로우 에디터 - 기본 그림

 

변수 설정

변수 설정을 하기 위해 플로우 에디터 바탕의 컨텍스트 메뉴에서 [Property]를 선택한다.

figure tutorial flow add variable
Property Preference - 변수 설정

 

메시지 이벤트 설정

플로우 에디터의 [메시지 이벤트]의 컨텍스트 메뉴에서 [Property]를 선택한다. Event Preference 화면에서 [파라미터 설정]을 선택한다.

figure tutorial flow event param
Event Preference - 파라미터 설정

 

아웃바운드 호출 설정

다음의 과정으로 아웃바운드 호출을 설정한다.

  1. 플로우 에디터의 [아웃바운드 호출] > [아웃바운드 룰]의 컨텍스트 메뉴에서 [Property]를 선택한다. Activity Preference 화면에서 [파라미터 설정]을 선택한다.

    figure tutorial flow outbound param
    아웃바운드 호출 - 파라미터 설정
  2. Activity Preference 화면에서 [아웃바운드 룰(서비스) 설정]을 선택한다.

    figure tutorial flow outbound rule
    아웃바운드 호출 - 아웃바운드 룰(서비스) 설정
  3. Activity Preference 화면에서 '요청 매핑 사용''응답 매핑 사용'을 체크하고 [Mapping] 버튼을 클릭해서 각 매핑정보를 설정한다.

    figure tutorial flow outbound rule req mapping
    아웃바운드 호출 - 아웃바운드 룰(서비스) 설정 - 요청 매핑
    figure tutorial flow outbound rule res mapping
    아웃바운드 호출 - 아웃바운드 룰(서비스) 설정 - 응답 매핑

 

응답 호출 설정

다음의 과정으로 응답 호출을 설정한다.

  1. 플로우 에디터의 [응답 송신] > [Reply 메시지]의 컨텍스트 메뉴에서 [Property]를 선택한다. Activity Preference 화면에서 [Reply Message]를 선택한다.

    figure tutorial flow reply reply message
    응답 송신 - Reply Message
  2. 'Use Mapping'을 체크하고 [Reply Mapping] 버튼을 클릭해서 각 매핑정보를 설정한다.

    Mapping 화면의 Source 영역의 컨텍스트 메뉴에서 [Add source]를 선택하여 ReqInHeader, ResInHeader, ResInBody를 선택한후 매핑한다.

    figure tutorial flow reply reply mapping
    응답 송신 - Reply Message - 서비스 매핑 - Reply Mapping

6. 배포

거래그룹/거래 배포정보를 설정한다.

figure tutorial deploy
거래그룹 / 거래 배포

거래 배포 설정화면에 대한 자세한 사용법은 AnyLink 스튜디오 안내서를 참고한다.

7. 거래 테스트

본 절에서는 거래 테스트를 위한 클라이언트 프로그램, Tmax 환경 설정 및 서버 프로그램과 테스트 수행하는 방법을 설명한다.

7.1. 클라이언트 프로그램

Tmax 클라이언트 프로그램을 사용하기 위해서는 Tmax 라이브러리(webt.jar , jclient.jar)가 필요하다.

<TmaxClient.java>

package manual.tmax;

import tmax.webt.WebtAttribute;
import tmax.webt.WebtBuffer;
import tmax.webt.WebtConnection;
import tmax.webt.io.WebtStringBuffer;

public class TmaxClient {
    String host;
    int port;
    String serviceName;

    public TmaxClient(String host, int port, String serviceName) {
        this.host = host;
        this.port = port;
        this.serviceName = serviceName;
    }

    public String call(String inputMessage) {
        WebtBuffer sndBuffer = makeWebtBuffer(inputMessage);
        WebtConnection connection = new WebtConnection(host, port);
        WebtBuffer recvBuffer = connection.tpcall(sndBuffer, serviceName, WebtAttribute.TPNOFLAGS);
        return new String(recvBuffer.getBytes());
    }

    public WebtBuffer makeWebtBuffer(String message) {
        WebtBuffer webtBuffer = new WebtStringBuffer();
        webtBuffer.setString(message);
        return webtBuffer;
    }

    public static void main(String[] args) {
        try {
            TmaxClient client = new TmaxClient("192.168.1.87", 7282, "SENDCLNT");

            String sendMessage = "AAAAA00120160701KIMKILSU  B01P1034MOONYOU   KNIGHT      THISISSAMPLEDATA                                  ";

            System.out.println("SEND:" + sendMessage);
            String recvMessage = client.call(sendMessage);
            System.out.println("RECV:" + recvMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

7.2. Tmax 환경 설정 및 서버 프로그램

Tmax 환경 설정 및 프로그램 빌드에 관한 자세한 내용은 Tmax 안내서를 참고한다.

  • Tmax JAVA GW 설정

    *SERVICE
    SENDCLNT        SVRNAME = jgw_t1toa1
    
    *GATEWAY
    jgw_t1toa1      GWTYPE=JEUS_ASYNC,
                    NODENAME="tmaxi7",
                    PORTNO=8801,
                    RGWADDR="192.168.14.106",
                    RGWPORTNO=31000,
                    CLOPT = "-r"
  • Tmax 서비스 설정

    *SERVICE
    TEST_SERVICE            SVRNAME = server_test
  • Tmax 서비스 프로그램

    <server_test.c>

    #include <usrinc/atmi.h>
    #include <stdio.h>
    #include <string.h>
    
    TEST_SERVICE(TPSVCINFO *msg)
    {
            char *rcvbuf;
            char *recvData;
    
            recvData = (char *)tpalloc("STRING", NULL, msg->len + 1);
            memcpy(recvData, msg->data, msg->len);
    
            printf(" Data recv = %s\n", recvData);
            printf(" Data Length = %d\n", msg->len);
    
            rcvbuf=(char *)tpalloc("STRING", NULL, 1024);
            if(rcvbuf==NULL) {
                    printf("tpalloc failed (rcvbuf) : %s\n", tpstrerror(tperrno));
                    tpreturn(TPFAIL, -1, NULL, 0, 0);
            }
    
            strcpy(rcvbuf, "1000KIMKILSU  20160720SP01");
            printf(" Data send = %s\n", rcvbuf);
    
            tpfree(recvData);
    
            tpreturn( TPSUCCESS, 0, rcvbuf, 0 , 0 );
    }

7.3. 테스트 수행

  • 클라이언트 결과 화면

    SEND:AAAAA00120160701KIMKILSU  B01P1034MOONYOU   KNIGHT      THISISSAMPLEDATA
    [2016.08.03 19:42:46:819] (main)webt.properties file is not found
    [2016.08.03 19:42:46:857] (main)[WEBT-1109][000000] start to connect server 192.168.1.87:7282 for 20000 msec
    [2016.08.03 19:42:46:877] (main)[WEBT-1102][000000] connection established socket(192.168.1.87:7282)
    [2016.08.03 19:42:46:880] (main)[WEBT-1111][000000] socket list add tmax.webt.io.WebtSocket@5901d85a
    [2016.08.03 19:42:46:882] (main)[WEBT-1037][000000] buffer transmitted
    [_tpstart(0x0):seq(0):msgtype(1):cd(1):errcode(0):rcode(0):asize(76):reserved(0x0):
    magic(0x270f)][xid:00 00 00 00 : 00 00 00 00 : 00 00 00 00 : F
    [2016.08.03 19:42:46:882] (main)[WEBT-1034][000000] receive start for 60000 msec
    [2016.08.03 19:42:46:882] (main)[WEBT-1035][000000] buffer received [---(0x0):seq(0):
    msgtype(1001):cd(8):errcode(0):rcode(16):asize(56):reserved(0x0):magic(0x270f)]
    [xid:00 00 00 00 : 00 00 00 00 : 00 00 00 1e : F
    [2016.08.03 19:42:46:882] (main)[WEBT-1041][000000] matching received.. seqno(0:0), type(1:1001)
    [2016.08.03 19:42:46:883] (main)[WEBT-1042][000000] matching result.. seqno match = true, type match = true
    [2016.08.03 19:42:46:883] (main)[WEBT-1305][000000] set maximum dialoge session size 8
    [2016.08.03 19:42:46:883] (main)[WEBT-1003][000000] tmax session established.. tmax version [5.0.2.1]
    [2016.08.03 19:42:46:883] (main)[WEBT-1005][000000] node count [1]
    [2016.08.03 19:42:46:883] (main)[WEBT-1006][000000] rq count [0]
    [2016.08.03 19:42:46:883] (main)[WEBT-1007][000000] topend product count [0]
    [2016.08.03 19:42:46:884] (main)[WEBT-1056][000000] node registered [0:tmaxi7]
    [2016.08.03 19:42:46:884] (main)[WEBT-1011][000000] compress threshold -1 byte
    [2016.08.03 19:42:46:885] (main)[WEBT-1037][000000] buffer transmitted [SENDCLNT(0x0):
    seq(1):msgtype(3):cd(0):errcode(0):rcode(0):asize(107):reserved(0x0):magic(0x270f)]
    [xid:00 00 00 00 : 00 00 00 00 : 00 00 00 00 : F
    [2016.08.03 19:42:46:885] (main)[WEBT-1034][000000] receive start for 30000 msec
    [2016.08.03 19:42:46:935] (main)[WEBT-1035][000000] buffer received [---(0x0):seq(1):
    msgtype(1003):cd(0):errcode(0):rcode(0):asize(1024):reserved(0x0):magic(0x270f)]
    [xid:00 00 00 00 : 00 00 00 00 : 00 00 00 00 : F
    [2016.08.03 19:42:46:935] (main)[WEBT-1041][000000] matching received..
    seqno(1:1), type(3:1003)
    [2016.08.03 19:42:46:936] (main)[WEBT-1042][000000] matching result..
    seqno match = true, type match = true
    RECV:AAAAA00120160701KIMKILSU  1000SP01
  • 서버 결과 화면(Tmax ulog)

     Data recv = A001KIMKILSU  MOONYOU   KNIGHT      THISISSAMPLEDATA
     Data Length = 86
     Data send = 1000KIMKILSU  20160720SP01