예제
본 장에서는 Tmax XA 서비스를 호출하는 간단한 예제와 Makefile을 설명한다.
1. Tmax XA 서비스 호출 예제
/* Tmax의 xa switch openinfo */ #define OPENINFO "host=192.168.1.43:7000+dbglvl=1+timeout=10" /* Tmax의 xa switch closeinfo */ #define CLOSEINFO "" extern struct xa_switch_t tmaxxaosw; struct xa_switch_t _xasw; int _xa_load(int xaoption) { _xasw.name[0] = 0; _xasw = tmaxxaosw; if (_xasw.name[0] == 0) return -1; return 1; } int main(int argc, char **argv) { …. XID xid; // XA 정보 로드 ret = _xa_load(0); if (ret < 0) { error processing… } // xa open ret = xa_open(OPENINFO, rmid, TMNOFLAGS); if (ret < 0) { error processing… } …. // xa start ret = xa_start(&xid, rmid, TMNOFLAGS); if (ret < 0) { error processing… } // Tmax xa 서비스 호출 ret = call_tmax(“SVCA”, sndbuf, rcvbuf); if (ret < 0) { error processing… } // xa end ret = xa_end(&xid, rmid, TMSUSPEND); if (ret < 0) { error processing… } // xa start ret = xa_start(&xid2, rmid, TMRESUME | TMJOIN); if (ret < 0) { error processing… } /* tpcall을 포함하는 function */ // Tmax xa 서비스 호출 ret = call_tmax(svcname, sndbuf, rcvbuf); if (ret < 0) { error processing… } // xa end ret = xa_end(&xid2, rmid, TMSUCCESS); if (ret < 0) { error processing… } // xa prepare ret = xa_prepare(&xid, rmid, TMNOFLAGS); if (ret < 0) { error processing… } // xa prepare ret = xa_prepare(&xid2, rmid, TMNOFLAGS); if (ret < 0) { error processing… } else if (ret == XA_RDONLY) { // xa commit ret = xa_commit(&xid, rmid, TMNOFLAGS); if (ret < 0) { error processing… } } else { ret = xa_commit(&xid, rmid, TMNOFLAGS); if (ret < 0) { error processing… } ret = xa_commit(&xid2, rmid, TMNOFlAGS); if (ret < 0) { error processing… } } // xa close ret = xa_close(CLOSEINFO, rmid, TMNOFLAGS); if (ret < 0) { error processing… } … } // Tmax 서비스 호출 루틴 int call_tmax(char *svcname, char * sndbuf, char * rcvbuf) { … ret = tpcall(svcname, (char *)sndbuf, strlen(sndbuf), (char **)&rcvbuf, (long *)&rcvlen, TPNOFLAGS); if(ret < 0) { error processing… } … }
2. Makefile
# makefile TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o TMAXLIBD= $(TMAXDIR)/lib64 TMAXLIBS= -ltxa # hp-pa 경우 CFLAGS = -g -Ae +DA2.0W +DD64 +DS2.0 -O -I$(TMAXDIR) # .SUFFIXES : .c .c.o: $(CC) $(CFLAGS) -c $< # # client compile # $(TARGET): $(APOBJS) # proc iname=$(TARGET) include=$(TMAXDIR) $(CC) $(CFLAGS) -L$(TMAXLIBD) -o $(TARGET) $(APOBJS) $(TMAXLIBS) $(APOBJS): $(TARGET).c # proc iname=$(TARGET) include=$(TMAXDIR) $(CC) $(CFLAGS) -c $(TARGET).c # clean: -rm -f *.o core $(TARGET)