菜鸟读 《Windows平台下tuxedo应用simpapp举例》推荐:非常实用,转载并原创添加一些注意点》
2007-07-19 17:09
本人正在初学tuxedo,对于这个环境实在弄得郁闷,花了将近1天时间,终于把tuxedo自带的例子在windows下编译通过了。在这次过程中,最感谢的当然是人了。当然最后能编译出来了,得益于吴绍永的这篇网文和徐金春的《Tuxedo中间件的开发与配置》这本书。
我在照着这篇网文一步一步编译的时候还是碰到了问题,还好通过google、百度把一个一个问题都给解决了。我在这里把我这些粗浅的经验与大家分享一下,希望对你能有一点帮助。我添加的注释将用蓝色字体标出来。
Windows平台下tuxedo应用simpapp举例
时间:2003-05-07
作者:吴绍永
浏览次数: 5779
本文关键字:TUXEDO, WINDOWS, SIMPAPP, UBB
==================================================
注释添加者:贺耿
时间:2007-07-19
===================================================
Windows平台下tuxedo应用simpapp举例 一、 课程目标
通过本课程学习,你可以掌握如下知识:
初步理解tuxedo应用的各个组成部分:客户端、服务端、配置文件、系统管理等
了解tuxedo应用客户端、服务端程序代码组成部分及编译方法
了解tuxedo应用的ubbconfig配置文件的作用及编译方法
了解tuxedo应用的启动、停止方法
了解tuxedo应用的系统管理基本命令
二、 准备工作
系统要求安装tuxedo软件(
确保你的Tuxedo程序有可用的lic.txt,如果没有那就必须下载最新版本的Tuxedo程序,因为只有最新的Tuxedo版本才有使用的license)。
要求设置必要的环境变量
安装C语言编译器(VC++、Borland C++等)
三、 simpapp例子建立步骤
建立新目录,复制simpapp文件到新目录下,设置环境变量
服务端、客户端程序代码简单解释并编译程序
编辑ubbconfig配置文件并编译
启动simpapp应用程序
执行simpapp应用程序
运行tmadmin管理程序
关闭simpapp应用
四、 复制simpapp应用程序
(1) 建立新目录,并复制simpapp到新目录下(以下建立wsy目录,并复制simpapp到wsy目录下),如下图:
对于喜欢dos的命令操作的按windows的方法复制也可以的哦 :-)
(2) 修改setenv.cmd文件的环境变量
我在照着这个文章编译的时候碰到问题最多的就是编译ubbsimple,在这里就要开始准备啦,面得后面麻烦,先把你的WINDOWS名字改成大写再说。要不然后面编译会报错,而且改完名要重启才有效,至于报的什么错,因为我重启了,不记得了,:-).
修改setenv.cmd文件中TUXDIR、APPDIR、PATH、TUXCONFIG等环境变量,设置成正确的环境变量。
TUXDIR:tuxedo软件安装目录
APPDIR:tuxedo应用可执行程序目录
PATH:包含%TUXDIR%\bin、%APPDIR%\路径
TUXCONFIG:tuxedo的ubbconfig配置文件编译后的二进制文件路径
VCVARS32.bat为VC++的环境变量批处理文件
注:这些环境变量要求与ubbconfig配置文件(这个例子里就是ubbsimple)设置的环境变量相同
(3)执行setenv.cmd文件的环境变量
五、 客户端代码简析及编译
(1)客户端simpcl.c代码分析
#include
#include "atmi.h" /* TUXEDO 头文件*/
#if defined(__STDC__) || defined(__cplusplus)
main(int argc, char *argv[])
#else
main(argc, argv)
int argc;
char *argv[];
#endif
{
char *sendbuf, *rcvbuf;
long sendlen, rcvlen;
int ret;
if(argc != 2) {
(void) fprintf(stderr, "Usage: simpcl string\n");
exit(1);
}
/* 作为tuxedo客户端连入tuxedo System */
if (tpinit((TPINIT *) NULL) == -1) {
(void) fprintf(stderr, "Tpinit failed\n");
exit(1);
}
sendlen = strlen(argv[1]);
/* 使用tpalloc申请string类型buffer作为请求和应答buffer */
if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating send buffer\n");
tpterm();
exit(1);
}
if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating receive buffer\n");
tpfree(sendbuf);
tpterm();
exit(1);
}
(void) strcpy(sendbuf, argv[1]);
/* 同步调用TOUPPER服务 */
ret = tpcall("TOUPPER", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
if(ret == -1) {
(void) fprintf(stderr, "Can't send request to service TOUPPER\n");
(void) fprintf(stderr, "Tperrno = %d\n", tperrno);
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
(void) fprintf(stdout, "Returned string is: %s\n", rcvbuf);
/* 使用tpfree释放申请的请求和应答buffer空间 */
tpfree(sendbuf);
tpfree(rcvbuf);
/* 使用tpterm离开tuxedo System */
tpterm();
return(0);
}
(2)客户端编译
客户端代码使用buildclient编译,如下图:
buildclient参数说明:
-o:指明客户端程序的可执行(输出目标)文件名称
-f:指明客户端源程序文件名称
六、 服务端代码简析及编译
(1)服务端simpserv.c代码分析
#include
#include
#include /* TUXEDO头文件 */
#include /* TUXEDO头文件 */
#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
/* 如果没有argc、argv一些编译系统会有警告信息. */
argc = argc;
argv = argv;
/* userlog 把tuxedo消息写入日志文件中 */
userlog("Welcome to the simple server");
return(0);
}
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
TOUPPER(TPSVCINFO *rqst) /*tuxedo服务名字TOUPPER*/
#else
TOUPPER(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
for(i = 0; i < rqst->len-1; i++)
rqst->data[i] = toupper(rqst->data[i]);
/* 设置返回客户端buffer */
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
(2)服务端simpserv.c编译方法
服务端代码使用buildserver编译,如下图:
buildserver参数说明:
-o:指明服务端程序的可执行(输出目标)文件名称
-f:指明服务端源程序文件名称
-s:提供系统启动时的tuxedo系统服务的名称
七、 编辑ubbconfig配置文件并编译
#ident "@(#) apps/simpapp/ubbsimple $Revision: 1.1 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the items with the appropriate values.
*RESOURCES
IPCKEY 262101
#IPCKEY必须是在32768 与 262143 之间
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="c:\tuxedo\wsy"
TUXCONFIG="c:\tuxedo\wsy\tuxconfig"
TUXDIR="c:\tuxedo"
"WSY" LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
*SERVICES
TOUPPER
(2)使用tmloadcf编译ubbconfig(ubbsimple)文件,生成二进制的TUXCONFIG环境所指定的文件
八、 启动simpapp应用程序
使用tmboot启动tuxedo应用程序,如下图:
九、 执行simpapp应用程序
执行simpcl命令可以将客户端发送到服务端的小写字符转换为大写并返回给客户端,如图:
十、 运行tmadmin管理程序
系统管理员可以使用tuxedo提供的tmadmin命令对tuxedo应用进行管理、动态配置,下面例举了常用的psr和psc命令。具体的参考tmadmin命令手册。
(1)printserver(可简写为psr):输出server的相关信息等
(2)printservice(可简写为psc)输出services的相关信息等
(3)quit:退出tmadmin命令控制界面
十一、 关闭simpapp应用程序
运行tmshutdown命令停止tuxedo应用服务程序,如图略: