`
l241002209
  • 浏览: 88389 次
文章分类
社区版块
存档分类
最新评论

Windows平台下tuxedo应用simpapp举例

 
阅读更多
Windows平台下tuxedo应用simpapp举例  
  一、 课程目标
通过本课程学习,你可以掌握如下知识:
初步理解tuxedo应用的各个组成部分:客户端、服务端、配置文件、系统管理等
了解tuxedo应用客户端、服务端程序代码组成部分及编译方法
了解tuxedo应用的ubbconfig配置文件的作用及编译方法
了解tuxedo应用的启动、停止方法
了解tuxedo应用的系统管理基本命令
二、 准备工作

系统要求安装tuxedo软件
要求设置必要的环境变量
安装C语言编译器(VC++、Borland C++等)
三、 simpapp例子建立步骤

建立新目录,复制simpapp文件到新目录下,设置环境变量
服务端、客户端程序代码简单解释并编译程序
编辑ubbconfig配置文件并编译
启动simpapp应用程序
执行simpapp应用程序
运行tmadmin管理程序
关闭simpapp应用
四、 复制simpapp应用程序
(1)建立新目录,并复制simpapp到新目录下(以下建立wsy目录,并复制simpapp到wsy目录下),如下图:

<wbr></wbr>
(2) 修改setenv.cmd文件的环境变量
修改setenv.cmd文件中TUXDIR、APPDIR、PATH、TUXCONFIG等环境变量,设置成正确的环境变量。
TUXDIR:tuxedo软件安装目录
APPDIR:tuxedo应用可执行程序目录
PATH:包含%TUXDIR%in、%APPDIR%路径
TUXCONFIG:tuxedo的ubbconfig配置文件编译后的二进制文件
VCVARS32.bat为VC++的环境变量批处理文件
注:这些环境变量要求与ubbconfig配置文件设置的环境变量相同
<wbr></wbr>
(3)执行setenv.cmd文件的环境变量
<wbr></wbr>
五、 客户端代码简析及编译
(1)客户端simpcl.c代码分析
#include
#include"atmi.h"<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>/* TUXEDO 头文件*/</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
#if defined(__STDC__) || defined(__cplusplus)
main(int argc, char *argv[])
#else
main(argc, argv)
int argc;
char *argv[];
#endif
{
<wbr><wbr><wbr><wbr><wbr><wbr>char *sendbuf, *rcvbuf;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>long sendlen, rcvlen;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>int ret;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>if(argc != 2) {</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr, "Usage: simpcl string ");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>exit(1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 作为tuxedo客户端连入tuxedo System */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>if (tpinit((TPINIT *) NULL) == -1) {</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr, "Tpinit failed ");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>exit(1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>sendlen = strlen(argv[1]);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 使用tpalloc申请string类型buffer作为请求和应答buffer */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL){</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr,"Error allocating send buffer ");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpterm();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>exit(1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL){</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr,"Error allocating receive buffer ");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpfree(sendbuf);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpterm();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>exit(1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>(void) strcpy(sendbuf, argv[1]);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 同步调用TOUPPER服务 */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>ret = tpcall("TOUPPER", (char *)sendbuf, 0, (char **)&amp;rcvbuf,&amp;rcvlen, (long)0);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>if(ret == -1) {</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr, "Can't send request to service TOUPPER");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stderr, "Tperrno = %d ", tperrno);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpfree(sendbuf);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpfree(rcvbuf);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>tpterm();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>exit(1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>(void) fprintf(stdout, "Returned string is: %s ", rcvbuf);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 使用tpfree释放申请的请求和应答buffer空间 */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>tpfree(sendbuf);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>tpfree(rcvbuf);</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 使用tpterm离开tuxedo System */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>tpterm();</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>return(0);</wbr></wbr></wbr></wbr></wbr></wbr>
}
<wbr></wbr>

(2)客户端编译
客户端代码使用buildclient编译,如下图:
<wbr></wbr>

buildclient参数说明:
-o:指明客户端程序的可执行(输出目标)文件名称
-f:指明客户端源程序文件名称
六、 服务端代码简析及编译
(1)服务端simpserv.c代码分析
<wbr></wbr>
#include
#include
#include<wbr><wbr><wbr><wbr><wbr><wbr><wbr>/* TUXEDO头文件 */</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
#include<wbr><wbr> /* TUXEDO头文件*/</wbr></wbr>
<wbr></wbr>
#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
<wbr><wbr><wbr><wbr><wbr><wbr>/* 如果没有argc、argv一些编译系统会有警告信息. */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>argc = argc;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>argv = argv;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* userlog 把tuxedo消息写入日志文件中 */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>userlog("Welcome to the simple server");</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>return(0);</wbr></wbr></wbr></wbr></wbr></wbr>
}
<wbr></wbr>
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
TOUPPER(TPSVCINFO *rqst)<wbr>/*tuxedo服务名字TOUPPER*/</wbr>
#else
TOUPPER(rqst)
TPSVCINFO *rqst;
#endif
{
<wbr><wbr><wbr><wbr><wbr><wbr>int i;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>for(i = 0; i &lt; rqst-&gt;len-1; i++)</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>rqst-&gt;data[i] = toupper(rqst-&gt;data[i]);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>/* 设置返回客户端buffer */</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>tpreturn(TPSUCCESS, 0, rqst-&gt;data, 0L, 0);</wbr></wbr></wbr></wbr></wbr></wbr>
}
<wbr><br><wbr></wbr></wbr>
(2)服务端simpserv.c编译方法
服务端代码使用buildserver编译,如下图:
<wbr></wbr>
buildserver参数说明:
-o:指明服务端程序的可执行(输出目标)文件名称
-f:指明服务端源程序文件名称
-s:提供系统启动时的tuxedo系统服务的名称
七、 编辑ubbconfig配置文件并编译

#ident<wbr> "@(#)apps/simpapp/ubbsimple<wbr><wbr><wbr>: 1.1</wbr></wbr></wbr></wbr>
#Skeleton UBBCONFIG file for the TUXEDO SimpleApplication.
#Replace the items with the appropriate values.
*RESOURCES
IPCKEY<wbr><wbr><wbr><wbr><wbr>262101</wbr></wbr></wbr></wbr></wbr>
#IPCKEY必须是在32768 与 262143 之间
#Example:
#IPCKEY<wbr><wbr><wbr><wbr>123456</wbr></wbr></wbr></wbr>
DOMAINID<wbr><wbr><wbr>simpapp</wbr></wbr></wbr>
MASTER<wbr><wbr><wbr><wbr><wbr>simple</wbr></wbr></wbr></wbr></wbr>
MAXACCESSERS<wbr><wbr><wbr>10</wbr></wbr></wbr>
MAXSERVERS<wbr> 5</wbr>
MAXSERVICES 10
MODEL<wbr><wbr><wbr><wbr><wbr><wbr>SHM</wbr></wbr></wbr></wbr></wbr></wbr>
LDBAL<wbr><wbr><wbr><wbr><wbr><wbr>N</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
*MACHINES
DEFAULT:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>APPDIR="c: uxedowsy"</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>TUXCONFIG="c: uxedowsy uxconfig"</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>TUXDIR="c: uxedo"</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
"WSY"<wbr><wbr><wbr><wbr><wbr><wbr>LMID=simple</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
*GROUPS
GROUP1
<wbr><wbr><wbr>LMID=simple GRPNO=1 OPENINFO=NONE</wbr></wbr></wbr>
*SERVERS
DEFAULT:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>CLOPT="-A"</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
simpserv<wbr><wbr><wbr>SRVGRP=GROUP1 SRVID=1</wbr></wbr></wbr>
<wbr></wbr>
*SERVICES
TOUPPER
<wbr></wbr>
(2)使用tmloadcf编译ubbconfig文件,生成二进制的TUXCONFIG环境所指定的文件
<wbr></wbr>
八、 启动simpapp应用程序
使用tmboot启动tuxedo应用程序,如下图:
<wbr></wbr>
九、 执行simpapp应用程序
执行simpcl命令可以将客户端发送到服务端的小写字符转换为大写并返回给客户端,如图:
<wbr></wbr>
十、 运行tmadmin管理程序
系统管理员可以使用tuxedo提供的tmadmin命令对tuxedo应用进行管理、动态配置,下面例举了常用的psr和psc命令。具体的参考tmadmin命令手册。
<wbr></wbr>
(1)printserver(可简写为psr):输出server的相关信息等
(2)printservice(可简写为psc)输出services的相关信息等
(3)quit:退出tmadmin命令控制界面
十一、 关闭simpapp应用程序
运行tmshutdown命令停止tuxedo应用服务程序,如图:


转自:http://blog.sina.com.cn/s/blog_5656bf3e010006fn.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics