最简单的类似HelloWorld的tuxedo程序_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 5687 | 回复: 0   主题: 最简单的类似HelloWorld的tuxedo程序        下一篇 
napolenAx
注册用户
等级:少校
经验:802
发帖:118
精华:1
注册:2011-8-30
状态:离线
发送短消息息给napolenAx 加好友    发送短消息息给napolenAx 发消息
发表于: IP:您无权察看 2011-8-30 10:13:15 | [全部帖] [楼主帖] 楼主

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

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

#i nclude <stdio.h>

#i nclude <atmi.h>

#i nclude <userlog.h>

EXEC SQL INCLUDE sqlca;

EXEC SQL BEGIN DECLARE SECTION;

int 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 = atoi((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=%s\n ",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);

    strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);

    tpreturn( TPFAIL, 0, rqst->data, 0, 0 );

    }

    /*把取出的结果返回给客户端*/

    strcpy(rqst->data,ac_ename);

    tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );

}

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

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

#i nclude <stdio.h>

#i nclude "atmi.h "

main(argc, argv)

{

    long reqlen=1024;

    char *reqbuf;

    /* 与TUXEDO服务端建立连接 */

    if (tpinit((TPINIT *) NULL) == -1)

    {

    (void) fprintf(stderr, "Tpinit failed\n ");

    exit(1);

    }

    /* 分配发送缓冲区*/

    reqbuf = (char *)tpalloc( "STRING ",NULL,reqlen);

    if ( reqbuf == (char *)NULL)

    {

    printf( "tpalloc failed\n ");

    tpterm();

    }

    strcpy(reqbuf, "1000 ");

    /*调用TUXEDO的服务TEST*/

    if (tpcall( "TEST ", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 )

    {

    printf( "tpcall failed,tperrno=%ld,tperrtext=%s\n ",tperrno,tpstrerror(tperrno));

    tpfree(reqbuf);

    tpterm();

    exit(1);

    }

    printf( "name=%s\n ",reqbuf);

    tpfree(reqbuf);

    tpterm();

    return(0);

}

五、编译服务端程序 

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

使用proc*c 可视化工具,参数[sqlcheck=semantics include=D:\Progra~1\tuxedo8.1\include]

当使用tuxedo的函数时要include选项

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

d:\test> buildserver -o testserv -f s.c -r Oracle_XA -s TEST

六、编译客户端程序 

d:\test> buildclient -o c -f c.c ,设置WNSADDR值即可:WSNADDR=192.168.9.122:3001

值与ubb中:CLOPT= "-A -t -- -n //192.168.9.122:3001 -m 5  -M 10 -x 3 "

对应

七、用 tmboot –y 启动TUXEDO 

应能看到所有的SERVER都启动成功。这时,我们的服务端程序s.exe 会自动与ORACLE数据库建立连接,并一直保持这个连接,��到TUXEDO系统或ORACLE数据库关闭。所以在我们的程序test.pc中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理。如果TMS_ORA9i启动失败会在当前目录生成一个*.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=DDD

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

一、如果按以上步骤:各步(特别是proc*c连接数据库编译也成功)都成功后,tmboot时TMS_ORA9i 等启动失败,可能是数据库属性不对,

Enterprise manager Configuration Assistant    创建的数据库已经通过测试,

用Database Configuration Assistant,使数据库属性同上,应该也可以成功,因为上面也是调用

Database Configuration Assistant来创建的数据库 。

二、PROC*C提示连接不上:使用档案用户登陆

使用档案用户,提示语法错误,而仅检查语法时说没有错误:确认是否有权限操作该表

三、客户端的WNSADDR值更改后,客户端要重新编译?不需要




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论