TUXEDO 프로그래밍 가이드
목 차 ● SF2000 C/S Application 개발 환경 ● TRANSACTION & X/OPEN DTP 목 차 ● SF2000 C/S Application 개발 환경 ● TRANSACTION & X/OPEN DTP ● TUXEDO Program의 기본 유형 - Client Program(XA사용 안함 : 조회 업무 ) Server Program(XA사용 안함 : ““ ) - Client Program(XA사용 : 저장 업무 ) Server Program(XA사용 : ““ ) ● Service/Server/Group 정의 ● 프로그램 작성 시 유의 사항 ● Debuging 방안 ● 자주 발생하는 Error 유형 및 해결 방안 ● Manual 참조
SF2000 C/S Application 개발 환경 CLIENT SERVER Client Application Delphi 4.0 System/WS Module Tuxedo v6.3 TCP/IP Windows95 Server Application C & ESQL System/T Module Tuxedo v6.3 TCP/IP HP-UX 10.x
TRANSACTION & X/OPEN DTP ▶ 자원을 하나의 일관된 상태에서 다른 일관된 상태로 변화시키는 일의 단위 ▶ 한 Transaction은 두가지 상태만 존재 : 모두 수행 또는 모두 수행 안됨 (참조) 관련 TUXEDO ATMI 함수 : tpbegin(), tpcommit(), tpabort() 등 ▷ Distributed Transaction 처리란 ? ▶ 분산된 자원(Database 등)과 관련 있는 Transaction을 처리 ▶ X/OPEN DTP 구성도 응용 프로그램 Server Client ESQL ATMI XA 자원 관리자 (RM) 트랜잭션 관리자 (TM)
TUXEDO Program의 기본 유형 : Client Program(XA사용 안함 : 조회 업무) procedure TForm.FormCreate(Sender: TObject); begin tpinit(); end ① ① System/T에 접속 procedure TForm.ObjectNameEventName(Sender: TObject); begin ② tpalloc(); ③ Fchg(); ... ④ tpcall(“Service Name”, TPNOTRAN) ⑤ Fget(); ⑥ tpfree() end ② Buffer 할당 ③ 보낼 Message를 Buffer에 넣음 ④ Service 요구 (NOTRAN mode) ⑤ 받은 Message를 Buffer에서 가져 옴 ⑥ Buffer free procedure TForm.FormClose(Sender: TObject); begin ⑦ tpterm(); end ⑦ System/T와 접속 끊음
TUXEDO Program의 기본 유형 : Server Program(XA사용 안함 : 조회 업무) tpsvrinit(int argc, char **argv) { ① EXEC SQL CONNECT :userid IDENTIFIED BY :passwd; } ① Resource Open ② Buffer 재 할당 ③ 받은 Message를 Buffer에서 가져 옴 ④ Buffer 초기화 ⑤ 보낼 Message를 Buffer에 넣음 ⑥ Message Buffer를 Client로 보냄 ⑦ Resource Close ServiceName(msg) TPSVCINFO *msg; { ② tprealloc(); ③ Fget(); ... ④ Finit(); +------------------+ | Bussiness logic | ⑤ Fchg(); ⑥ tpreturn() } tpsvrdone() { ⑦ EXEC SQL ROLLBACK WORK RELEASE; }
TUXEDO Program의 기본 유형 : Client Program(XA 사용 : 저장 업무) procedure TForm.FormCreate(Sender: TObject); begin tpinit(); end ① ① System/T에 접속 procedure TForm.ObjectNameEventName(Sender: TObject); begin ② tpalloc(); ③ Fchg(); ... ④ tpbegin(); ⑤ tpcall(“Service Name”) ⑥ tpcommit()/tpabort(); ⑦ Fget(); ⑧ tpfree() end ② Buffer 할당 ③ 보낼 Message를 Buffer에 넣음 ④ Transaction 시작 ⑤ Service 요구 ⑥ Transaction 종료 ⑦ 받은 Message를 Buffer에서 가져 옴 ⑧ Buffer free procedure TForm.FormClose(Sender: TObject); begin ⑨ tpterm(); end ⑨ System/T와 접속 끊음
TUXEDO Program의 기본 유형 : Server Program(XA 사용 : 저장 업무) tpsvrinit(int argc, char **argv) { ① tpopen(); } ① Resource Open ② Buffer 재 할당 ③ 받은 Message를 Buffer에서 가져 옴 ④ Buffer 초기화 ⑤ 보낼 Message를 Buffer에 넣음 ⑥ Message Buffer를 Client로 보냄 ⑦ Resource Close ServiceName(msg) TPSVCINFO *msg; { ② tprealloc(); ③ Fget(); ... ④ Finit(); +------------------+ | Bussiness logic | ⑤ Fchg(); ⑥ tpreturn() } tpsvrdone() { ⑦ tpclose(); }
..... Service/Server/Group 정의 ▷ Service/Server/Group 이란 ? service1( ) .pc .pc .pc Compile & Link Compile & Link server1 server2 실행 모듈 실행 모듈 group1
▷ UBB 구성화일에서 Service/Server/Group ....... *GROUPS NONXAGRP GRPNO=1 LMID=SITE1 XAGRP GRPNO=2 LMID=SITE1 TMSNAME=TMS_ORACLE7 TMSCOUNT=2 OPENINFO="Oracle_XA:Oracle_XA+ ..... *SERVERS server1 SRVGRP=NONXAGRP SRVID=101 server2 SRVGRP=XAGRP SRVID=201 *SERVICES GROUP SECTIONS SERVER SECTIONS SERVICE SECTIONS
▷ 화면 설계를 기준으로 Service 목록 작성 방안 #1 인사 정보 조회 Service() #2 저장/삭제 Service() #3 부서목록 조회 Service()
▷ Service를 Server로 building하는 방안 ▶ 1 ~ 50개 Services를 묶어 1개의 Server를 작성 (참조) 기준 항목에는 서비스 중요도, 서비스 수행시간 등이 있음. ▶ 효율적 관리를 위해 기본적으로 업무 단위 고려하여 Server 작성 ▶ DB 변경 서비스와 조회 서비스는 구분하여 Server 작성 (참조) XA를 사용할 경우, 미사용시 보다 10 ~ 25% Overhead 발생하므로 조회성 업무는 NON-XA 사용을 권유 함. ▶ 자주 call되는 서비스 는 분리 ▶ Batch 성격의 서비스, 즉 수행 시간이 오래 걸리는 서비스는 분리 ▷ Server를 Group으로 구분 방안 ▶ SUB-SYSTEM 단위로 Group 구분 ▶ 관련된 Resource Manager(RM), 또는 open 하는 user에 따라 구분
프로그램 작성 시 유의 사항 ▷ Buisiness Logic은 가급적 Client에 두지 말 것. 특히 변경 가능성이 있는 Logic은 반드시 Server Logic에 포함시킬 것. ▷ Field Header 화일에 define된 Field Name 및 Field Id 는 유일 해야 함. ▷ FML buffer 사용 시 Field Header 화일은 Client와 Server간에 반드시 일치 시켜야 함. ▷ malloc() 함수를 사용할 경우에는 반드시 free() 함수를 사용 할 것. <주의> TUXEDO Server Program은 항상 기동되어 있으므로 free를 않하였을 때 전체 System에 critical한 문제를 발생 시킴. <참조> Programming using TUXEDO 시에 가급적 malloc()을 사용하지 말것을 권유 함. ▷ tpalloc() 함수를 사용할 경우에는 반드시 tpfree() 함수를 사용 할 것. <참조> tpreturn() 함수에는 내부적으로 tpfree() 함수가 포함되어 있음. ▷ fopen() 함수를 사용할 경우에는 반드시 fclose() 함수를 사용 할 것. ▷ Server Buffer Size = 1Kbytes, if Client Message Size <= 1K Client Message Size, if Client Message Size > 1K 이므로, Buffer Size가 더 필요한 경우는 tprealloc()를 사용하여 Buffer를 재할 당 해야 함.
▷ Finit() 함수를 사용하여 불필요한 데이타가 Network Traffic을 유발하지 않도록 주의. <주의> Client에서 send한 message를 clear하지 않으면 tpreturn시 받은 message를 다시 Client로 보내어 짐에 유의. ▷ Tuxedo 함수 사용, 또는 ESQL statement 다음에는 반드시 error 처리를 할 것. <예제> tpalloc() 혹은 tprealloc() 사용시 “NULL”로 Check하여 에러 처리. SQL 사용시 “sqlca.sqlcode != 0”로 Check하여 에러 처리. tpcommit(), tpcall()등 TUXEDO ATMI 사용시 “-1”로 Check하여 에러 처리.
Debugging 방안 ▷ 관련 함수 함 수 기 능 에 제 ▶ userlog (char _TM_FAR *, ...) 함 수 기 능 에 제 ▶ userlog (char _TM_FAR *, ...) #include <userlog.h> ▶ printf (const char *,...) #include <stdio.h> ▶ Fprint(FBFR *) #include <fml.h> ▶ Fprint32(FBFR32 *) #include <fml32.h> “ULOGPFX” Parameter가 설정된 ULOG 화일에 write 함. (참조) default로 newline이 뒤에 삽입 됨. Standard out 화일에 write 함. “svropt”에 -o option이 정의되어 있다면, 정의된 해당 화일에 write되고, 정의되어 있지않으면 $APPDIR/stdout에 write 됨. FML buffer 내용을 standard out으로 write (16 bit field id) write (32 bit field id) userlog(“%s”, “test”); printf(“%s\n”, “test”); FBFR *transf; Fprint(transf); FBFR32 *transf; Fprint32(transf);
▷ 관련 전역 변수 함 수 기 능 에 제 ▶ char *tpstrerror (int) 함 수 기 능 에 제 ▶ char *tpstrerror (int) #include <atmi.h> ▶ char *Fstrerror #include <fml.h> ▶ char *Fstrerror32 #include <fml32.h> System/T error의 message를 return 함. FML error의 message를 return 함. tpstrerror(tperrno); Fstrerror(Ferror); ▷ 관련 전역 변수 변 수 기 능 에 제 ▶ int tperrno #include <atmi.h> ▶ int Ferror #include <fml.h> ▶ int Ferror32 #include <fml32.h> System/T error number를 return 함. FML error의 number를 return 함. tpstrerror(tperrno); Fstrerror(Ferror);
(참고) Error 유형 및 해결 방안은 추후 계속 공지 하겠음. 함 수 Error Message 원 인 및 해 결 방 안 ▶ tpinit() ▶ tpcall() tpacall() TPESYSTEM - internal system error TPENOENT - no entry found TPESVCFAIL - application level service failure 원인) Tuxedo/T와 접속할 수없음. 해결책) 1. Network 장애 check 2. Tuxedo 장애 check 3. WSL process 장애 check 4. 환경변수(WSNADDR) 확인(Client) 원인) Tuxedo B.B 정보에 해당 항목 (service) 정보가 없음. 1. 해당 service가 booting 되었는 지 check 원인) Service(Application) routine에서 tpreturn(TPFAIL)로 return 함. 1. Service routine에서 DB오류, 또는 Tuxedo함수 오류등 Appli- cation Level의 오류 check (참고) Error 유형 및 해결 방안은 추후 계속 공지 하겠음.
MANUAL 참조 방안 ▷ TUXEDO 기본 과정 교육 교재 ▷ TUXEDO MANUAL (총 7 권) ▷ TUXEDO On-Line MANUAL (WebBrowser)