Server Program(XA사용 : ““ )

Download Report

Transcript Server Program(XA사용 : ““ )

TUXEDO 프로그래밍 가이드
목
차
● 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
Server Application
C & ESQL
System/WS Module
Tuxedo v6.3
System/T Module
Tuxedo v6.3
TCP/IP
TCP/IP
Windows95
HP-UX 10.x
TRANSACTION & X/OPEN DTP
▷ Transaction 이란 ?
▶ 자원을 하나의 일관된 상태에서 다른 일관된 상태로 변화시키는 일의 단위
▶ 한 Transaction은 두가지 상태만 존재 : 모두 수행 또는 모두 수행 안됨
(참조) 관련 TUXEDO ATMI 함수 : tpbegin(), tpcommit(), tpabort() 등
▷ Distributed Transaction 처리란 ?
▶ 분산된 자원(Database 등)과 관련 있는 Transaction을 처리
▶ X/OPEN DTP 구성도
응용 프로그램
Server
Client
ESQL
자원 관리자
(RM)
ATMI
XA
트랜잭션 관리자
(TM)
TUXEDO Program의 기본 유형 : Client Program(XA사용 안함 : 조회 업무)
procedure TForm.FormCreate(Sender: TObject);
begin
① tpinit();
end
① System/T에 접속
procedure TForm.ObjectNameEventName(Sender: TObject);
begin
② tpalloc();
② Buffer 할당
③ Fchg();
...
③ 보낼 Message를 Buffer에
넣음
④ tpcall(“Service Name”, TPNOTRAN)
④ Service 요구 (NOTRAN mode)
⑤ Fget();
...
⑤ 받은 Message를 Buffer에서
가져 옴
⑥ tpfree()
⑥ Buffer free
end
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
ServiceName(msg)
TPSVCINFO *msg;
{
② tprealloc();
② Buffer 재 할당
③ Fget();
...
③ 받은 Message를 Buffer에서
가져 옴
④ Finit();
+------------------+
| Bussiness logic |
+------------------+
⑤ Fchg();
...
⑥ tpreturn()
}
tpsvrdone()
{
⑦ EXEC SQL ROLLBACK WORK RELEASE;
}
④ Buffer 초기화
⑤ 보낼 Message를 Buffer에
넣음
⑥ Message Buffer를 Client로
보냄
⑦ Resource Close
TUXEDO Program의 기본 유형 : Client Program(XA 사용 : 저장 업무)
procedure TForm.FormCreate(Sender: TObject);
begin
① tpinit();
end
① System/T에 접속
procedure TForm.ObjectNameEventName(Sender: TObject);
begin
② tpalloc();
② Buffer 할당
③ Fchg();
...
③ 보낼 Message를 Buffer에
넣음
④ tpbegin();
⑤ tpcall(“Service Name”)
⑥ tpcommit()/tpabort();
④ Transaction 시작
⑤ Service 요구
⑥ Transaction 종료
⑦ Fget();
...
⑦ 받은 Message를 Buffer에서
가져 옴
⑧ tpfree()
end
⑧ 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
ServiceName(msg)
TPSVCINFO *msg;
{
② tprealloc();
② Buffer 재 할당
③ Fget();
...
③ 받은 Message를 Buffer에서
가져 옴
④ Finit();
+------------------+
| Bussiness logic |
+------------------+
⑤ Fchg();
...
⑥ tpreturn()
}
tpsvrdone()
{
⑦ tpclose();
}
④ Buffer 초기화
⑤ 보낼 Message를 Buffer에
넣음
⑥ Message Buffer를 Client로
보냄
⑦ Resource Close
Service/Server/Group 정의
▷ Service/Server/Group 이란 ?
service1( )
service3( )
service4( )
.....
service2( )
.pc
.pc
.pc
Compile & Link
Compile & Link
server1
server2
실행 모듈
group1
실행 모듈
▷ UBB 구성화일에서 Service/Server/Group
.......
GROUP SECTIONS
*GROUPS
NONXAGRP
GRPNO=1
LMID=SITE1
XAGRP
GRPNO=2
LMID=SITE1
TMSNAME=TMS_ORACLE7
TMSCOUNT=2
OPENINFO="Oracle_XA:Oracle_XA+ .....
.......
SERVER SECTIONS
*SERVERS
server1
SRVGRP=NONXAGRP
SRVID=101
server2
SRVGRP=XAGRP
SRVID=201
.......
*SERVICES
.......
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 *, ...)
#include <userlog.h>
기
능
“ULOGPFX” Parameter가 설정된
ULOG 화일에 write 함.
(참조) default로 newline이 뒤에
에
제
userlog(“%s”, “test”);
삽입 됨.
▶ printf
(const char *,...)
#include <stdio.h>
Standard out 화일에 write 함.
printf(“%s\n”, “test”);
“svropt”에 -o option이 정의되어 있다면,
정의된 해당 화일에 write되고,
정의되어 있지않으면 $APPDIR/stdout에
write 됨.
▶ Fprint(FBFR *)
#include <fml.h>
FML buffer 내용을 standard out으로
write (16 bit field id)
FBFR *transf;
Fprint(transf);
FML buffer 내용을 standard out으로
▶ Fprint32(FBFR32 *)
#include <fml32.h>
write (32 bit field id)
FBFR32 *transf;
Fprint32(transf);
함
수
기
능
에
제
▶ char *tpstrerror
(int)
#include <atmi.h>
System/T error의 message를 return 함.
tpstrerror(tperrno);
▶ char *Fstrerror
(int)
#include <fml.h>
FML error의 message를 return 함.
Fstrerror(Ferror);
▶ char *Fstrerror32
(int)
#include <fml32.h>
▷ 관련 전역 변수
변
수
기
능
에
제
▶ int tperrno
#include <atmi.h>
System/T error number를 return 함.
tpstrerror(tperrno);
▶ int Ferror
#include <fml.h>
FML error의 number를 return 함.
Fstrerror(Ferror);
▶ int Ferror32
#include <fml32.h>
자주 발생하는 Error 유형 및 해결 방안
함
수
Error Message
원인
및
해결방안
▶ tpinit()
TPESYSTEM - internal system error
원인) Tuxedo/T와 접속할 수없음.
해결책)
1. Network 장애 check
2. Tuxedo 장애 check
3. WSL process 장애 check
4. 환경변수(WSNADDR) 확인(Client)
▶ tpcall()
tpacall()
TPENOENT - no entry found
원인) Tuxedo B.B 정보에 해당 항목
(service) 정보가 없음.
해결책)
1. 해당 service가 booting 되었는
지 check
TPESVCFAIL - application level
원인) Service(Application) routine에서
tpreturn(TPFAIL)로 return 함.
해결책)
1. Service routine에서 DB오류,
또는 Tuxedo함수 오류등 Application Level의 오류 check
service failure
(참고) Error 유형 및 해결 방안은 추후 계속 공지 하겠음.
MANUAL 참조 방안
▷ TUXEDO 기본 과정 교육 교재
▷ TUXEDO MANUAL (총 7 권)
▷ TUXEDO On-Line MANUAL (WebBrowser)