예제
본 장에서는 AnyLink Tmax 어댑터를 사용한 예제를 설명한다.
1. 개요
사용된 전문은 모두 WebtStringBuffer 방식을 기본으로 한다. Tmax 및 WebT에 관한 자세한 내용은 Tmax 안내서를 참고한다.
다음은 Tmax 기본 거래 구성이다.
다음은 거래 순서를 수행하는 과정에 대한 설명이다.
-
Sample Tmax Client Java 프로그램을 통해 요청 입력 전문을 Tmax의 SENDCLNT 서비스로 전송한다.
-
Tmax에서 전문 수신 후 JAVA GW를 통해 AnyLink로 전문을 전송한다.
-
인바운드 어댑터로 전문 수신 후 서비스 플로우를 수행한다.
-
서비스 플로우에서 요청 입력 전문을 요청 출력 전문으로 매핑한다.
-
아웃바운드 어댑터를 통해 요청 출력 전문을 Tmax Server의 TEST_SERVICE 서비스를 요청한다.
-
Tmax Server에서 아웃바운드 어댑터로 응답 입력 전문을 전송한다.
-
서비스 플로우에서 응답 입력 전문을 응답 출력 전문으로 매핑한다.
-
인바운드 어댑터로 응답 출력 전문을 Tmax Java GW로 전송한다.
-
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 안내서를 참고한다. |
3. 엔드포인트 생성
어댑터 생성이 완료되면 [어댑터] 탭에서 등록된 어댑터를 조회하고, 조회된 어댑터를 클릭하면 어댑터 상세정보 화면으로 이동한다.
[엔드포인트 목록] 탭 아래 [Add] 버튼을 클릭하면 엔드포인트 등록 화면이 나타난다. 엔드포인트 생성에 대한 자세한 설명은 엔드포인트 설정을 참고한다.
3.1. 인바운드 엔드포인트 생성
다음은 Tmax 인바운드 엔드포인트를 등록하는 예제이다.
-
기본정보
인바운드 엔드포인트 등록 화면 - 기본정보항목 설정 엔드포인트 아이디
TMAX_IN_EP
엔드포인트 이름
TMAX_IN_EP
엔드포인트 상태
Running
부팅 초기값
Running
통신 방향
Inbound
설명
Tmax 인바운드 엔드포인트
-
[연결정보] 탭
인바운드 엔드포인트 등록 화면 - [연결정보]항목 설정 연결 방식
Server
스레드 최대값
10
포트
31000
최대 연결 수
10
-
[상세설정] 탭
인바운드 엔드포인트 등록 화면 - [상세설정]항목 설정 거래그룹/거래
manual.tmax.tmaxCase1.tx01 (거래그룹/거래 항목은 직접 입력해도 되고 차후 거래그룹/거래 생성 후 선택하여도 무방하다.)
3.2. 아웃바운드 엔드포인트 생성
다음은 Tmax 아웃바운드 엔드포인트를 등록하는 예제이다. [상세설정] 탭은 설정하지 않는다.
-
기본정보
아웃바운드 엔드포인트 등록 화면 - 기본정보항목 설정 엔드포인트 아이디
TMAX_OUT_EP
엔드포인트 이름
TMAX_OUT_EP
엔드포인트 상태
Running
부팅 초기값
Running
통신 방향
Outbound
설명
Tmax 아웃바운드 엔드포인트
-
[연결정보] 탭
아웃바운드 엔드포인트 등록 화면 - [연결정보]항목 설정 연결 방식
Client
스레드 최대값
10
IP/호스트
192.168.15.75 (Sample Tmax 서가 구동되어 있는 장비의 장비의 IP를 지정한다.)
포트
7282
Read 타임아웃
30000
연결 타임아웃
3000
최대 연결 수
10
4. 스튜디오 리소스 생성
본 절에서는 스튜디오에서 리소스를 생성하는 방법에 대해서 설명한다.
AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다. |
4.1. 거래그룹 생성
거래그룹 네비게이터에서 프로젝트를 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [거래 / 거래그룹]을 선택한다.
항목 | 설정 |
---|---|
패키지 이름 |
manual.tmax |
거래 ID |
tmaxCase1 |
거래 이름 |
tmaxCase1 |
4.2. 거래 생성
거래그룹 네비게이터에서 거래그룹을 선택한 다음 컨텍스트 메뉴에서 [새로만들기] > [거래 / 거래그룹]을 선택한다.
항목 | 설정 |
---|---|
노드 타입 |
거래 |
거래 ID |
tx01 |
거래 이름 |
tx01 |
4.3. 메시지 생성
요청 입력 헤더/바디, 요청 출력 헤더/바디, 응답 입력 헤더/바디, 응답 출력 헤더/바디 메시지를 생성한다.
메시지 설정에 관한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다. |
5. 스튜디오 리소스 설정
본 절에서는 생성한 리소스를 설정하는 방법에 대해서 설명한다.
AnyLink 스튜디오 사용법에 대한 자세한 내용은 AnyLink 스튜디오 안내서를 참고한다. |
다음은 리소스를 모두 설정한 후 조회되는 거래그룹 네비게이터이다.
5.1. 거래그룹 설정
본 절에서는 거래그룹을 설정하는 예제를 설명한다. [파싱 옵션] 탭은 설정하지 않는다.
-
[거래그룹 정보] 탭
거래그룹 설정 - [거래그룹 정보]항목 설정 요청 메시지
요청입력헤더
정상 응답 메시지
응답출력헤더
Bypass 설정
NO
XA 설정
NO
오류 응답 방식
NONE
-
[거래그룹 옵션] 탭
거래그룹 설정 - [거래그룹 옵션]항목 설정 거래 플로우 타임아웃(ms)
60000
응답 유무
REQUEST_RESPONSE
거래 우선순위
MEDIUM
-
[파싱정보] 탭
거래그룹 설정 - [파싱 정보]항목 설정 하위 거래 식별 방법
MESSAGE
메시지 ID
ReqInHeader.umsg
필드 ID
tx_code
5.2. 거래 설정
다음은 거래를 설정하는 예제이다. [파싱 옵션] 탭은 설정하지 않는다.
-
[거래정보] 탭
거래 설정 - [거래정보]항목 설정 요청 메시지
요청입력바디
정상 응답 메시지
응답출력바디
Bypass 설정
NO
XA 설정
NO
오류 응답 방식
PARENT
서비스 타입
FLOW
서비스 이름
TmaxFlow_Message_STRT_Event_697118(랜덤으로 생성됨)
-
[거래 옵션] 탭
거래 설정 - [거래 옵션]항목 설정 거래 플로우 타임아웃(ms)
미설정
타임아웃 설정 안함
체크
응답 유무
PARENT
거래 우선순위
MEDIUM
-
[파싱 정보] 탭
거래 설정 - [파싱 정보]-
거래 식별코드
항목 설정 코드값
A001
종류
REQUEST
-
5.3. 아웃바운드 룰 설정
다음은 Tmax 아웃바운드 룰 설정 예제이다.
항목 | 설정 |
---|---|
요청처리 타임아웃(ms) |
10000 |
Endpoint |
TMAX_OUT_EP |
Tmax 응답 유무 |
true |
Tmax XA 트랜잭션 |
false |
Tmax 서비스 타임아웃 |
5000 |
Tmax 서비스 ID |
TEST_SERVICE |
요청 메시지 |
요청출력헤더(ReqOutHeader) 요청출력바디(ReqOutBody) |
정상 응답 메시지 |
응답입력헤더(ResInHeader) 응답입력바디(ResInBody) |
5.4. 플로우 설정
다음의 과정으로 플로우를 설정한다.
-
플로우 그리기
-
변수 설정
-
메시지 이벤트 설정
-
아웃바운드 호출 설정
-
응답 호출 설정
플로우 그리기
다음은 예제에 대한 서비스 플로우이다.
변수 설정
변수 설정을 하기 위해 플로우 에디터 바탕의 컨텍스트 메뉴에서 [Property]를 선택한다.
메시지 이벤트 설정
플로우 에디터의 [메시지 이벤트]의 컨텍스트 메뉴에서 [Property]를 선택한다. Event Preference 화면에서 [파라미터 설정]을 선택한다.
아웃바운드 호출 설정
다음의 과정으로 아웃바운드 호출을 설정한다.
-
플로우 에디터의 [아웃바운드 호출] > [아웃바운드 룰]의 컨텍스트 메뉴에서 [Property]를 선택한다. Activity Preference 화면에서 [파라미터 설정]을 선택한다.
아웃바운드 호출 - 파라미터 설정 -
Activity Preference 화면에서 [아웃바운드 룰(서비스) 설정]을 선택한다.
아웃바운드 호출 - 아웃바운드 룰(서비스) 설정 -
Activity Preference 화면에서 '요청 매핑 사용'과 '응답 매핑 사용'을 체크하고 [Mapping] 버튼을 클릭해서 각 매핑정보를 설정한다.
아웃바운드 호출 - 아웃바운드 룰(서비스) 설정 - 요청 매핑아웃바운드 호출 - 아웃바운드 룰(서비스) 설정 - 응답 매핑
응답 호출 설정
다음의 과정으로 응답 호출을 설정한다.
-
플로우 에디터의 [응답 송신] > [Reply 메시지]의 컨텍스트 메뉴에서 [Property]를 선택한다. Activity Preference 화면에서 [Reply Message]를 선택한다.
응답 송신 - Reply Message -
'Use Mapping'을 체크하고 [Reply Mapping] 버튼을 클릭해서 각 매핑정보를 설정한다.
Mapping 화면의 Source 영역의 컨텍스트 메뉴에서 [Add source]를 선택하여 ReqInHeader, ResInHeader, ResInBody를 선택한후 매핑한다.
응답 송신 - Reply Message - 서비스 매핑 - Reply Mapping
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