技术开发 频道

实现Tuxedo和Oracle的互连

    三、服务端的程序:test.pc

    功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端

#include <stdio.h> #include <atmi.h> #include <userlog.h> EXEC SQL INCLUDE sqlca; EXEC SQL BEGIN DECLARE SECTION; long al_empno=0; char ac_ename[11]=""; EXEC SQL VAR ac_ename IS STRING(11); EXEC SQL END DECLARE SECTION; TEST(TPSVCINFO *rqst) { /*接收客户端来的数据*/ al_empno = (FBFR32 *)rqst->data; EXEC SQL select ename into :ac_ename from EMP where empno=:al_empno; if(sqlca.sqlcode!=0) { userlog("select from EMP failure,sqlcode=%ld, sqlerr=%sn",sqlca.sqlcode,(char *)sqlca .sqlerrm.sqlerrmc); strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc); tpreturn( TPFAIL, 0, rqst->data, 00 ); } /*把取出的结果返回给客户端*/ strcpy(rqst->data,ac_ename); tpreturn( TPSUCCESS, 0, rqst->data, 00 ); }

     四、编写客户端程序: testcli.c

    功能:调用TUXEDO服务端的服务TEST,取EMPNO=1000所对应的ENAME的值,并显示出来

#include <stdio.h> #include "atmi.h" main(argc, argv) { long reqlen=1024; char *reqbuf; /* 与TUXEDO服务端建立连接 */ if (tpinit((TPINIT *) NULL) == -1) { (void) fprintf(stderr, "Tpinit failedn"); exit(1); } /* 分配发送缓冲区*/ reqbuf = (char *)tpalloc("STRING",NULL,reqlen); if ( reqbuf == (char *)NULL) { printf("tpalloc failedn"); tpterm(); } strcpy(reqbuf,"1000"); /*调用TUXEDO的服务TEST*/ if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 ) { printf("tpcall failed,tperrno=%ld,tperrtext=%sn",tperrno,tpstrerror(tperrno)); tpfree(reqbuf); tpterm(); exit(1); } printf("name=%sn",reqbuf); tpfree(reqbuf); tpterm(); return(0); }

    五、编译服务端程序

    1.用ORACLE的PROC把test.pc 文件预编译成test.c文件

    d:test> proc test.pc include=%TUXDIR%/include

    2.用buildserver把test.c编译成可执行文件,注意-r 后带的Oracle_XA 与RM文件中的一致。

    d:test> buildserver -o simpserv -f simpserver.c -r Oracle_XA -s TEST

    六、编译客户端程序

    d:test> buildclient -o testcli -f testcli.c

    七、用 tmboot –y 启动TUXEDO

    应能看到所有的SERVER都启动成功。这时,我们的服务端程序test 会自动与ORACLE数据库建立连接,并一直保持这个连接,直到TUXEDO系统或ORACLE数据库关闭。所以在我们的程序test.pc中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理。如果TMS_ORA8i启动失败会在当前目录生成一个*.trc文件,记录失败的原因,同时TUXEDO的ULOG文件中也会有一些错误信息。可参考这些错误信息进行错误分析。

    d:test> tmboot -y

    exec TMS_ORA8i-A :

    process id=1072 ... Started.

    exec TMS_ORA8i-A :

    process id=528 ... Started.

    exec test -A :

    process id=876 ... Started.

    八、运行客户端程序

    运行后应能看到服务端返回的结果。

    d:test> testcli

    name=bill

    到此,整个配置过程就大功告成了。ORACLE的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样。

0
相关文章