LoveUnix » 中间件技术 » Sco Unix平台下tuxedo应用simpapp举例
让LU留住您的每

一天 让LU博客留住您的每一天
2005-10-22 19:15 大漠孤星
Sco Unix平台下tuxedo应用simpapp举例

作者:吴绍永
本文关键字:TUXEDO, SCO UNIX, SIMPAPP, UBB


[b]Sco Unix平台下tuxedo应用simpapp举例 [/b]
 
 
一、 课程目标
通过本课程学习,你可以掌握如下知识:
初步理解tuxedo应用的各个组成部分:客户端、服务端、配置文件、系统管理等
了解tuxedo应用客户端、服务端程序代码组成部分及编译方法
了解tuxedo应用的ubbconfig配置文件的作用及编译方法
了解tuxedo应用的启动、停止方法
了解tuxedo应用的系统管理基本命令
二、 准备工作
系统要求安装tuxedo软件
要求设置必要的环境变量
安装C语言编译器

三、 simpapp例子建立步骤
建立新目录,复制simpapp文件到新目录下,设置环境变量
服务端、客户端程序代码简单解释并编译程序
编辑ubbconfig配置文件并编译
启动simpapp应用程序
执行simpapp应用程序
运行tmadmin管理程序
关闭simpapp应用
四、 复制simpapp应用程序
(1) 建立新目录,并复制simpapp到新目录下(以下建立wsy目录,并复制simpapp到wsy目录下),如下图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image002.jpg[/img]
(2) 设置正确的环境变量
将TUXDIR、APPDIR、PATH、TUXCONFIG,NLSPATH,LIBPATH等环境变量export出来,设置成正确的环境变量。
TUXDIR:tuxedo软件安装目录
APPDIR:tuxedo应用可执行程序目录
PATH:包含TUXDIR,TUXDIR/bin,APPDIR路径
TUXCONFIG:tuxedo的ubbconfig配置文件编译后的二进制文件路径
注:这些环境变量要求与ubbconfig配置文件设置的环境变量相同
客户端代码简析及编译
(1)客户端simpcl.c代码分析

[code]

#include <stdio.h>
#include "atmi.h"                /* TUXEDO  Header File */

#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 ");
              exit(1);
       }
       /* 作为tuxedo客户端连入tuxedo System */
       if (tpinit((TPINIT *) NULL) == -1) {
              (void) fprintf(stderr, "Tpinit failed ");
              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 ");
              tpterm();
              exit(1);
       }
       if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
              (void) fprintf(stderr,"Error allocating receive buffer ");
              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 ");
              (void) fprintf(stderr, "Tperrno = %d ", tperrno);
              tpfree(sendbuf);
              tpfree(rcvbuf);
              tpterm();
              exit(1);
       }
       (void) fprintf(stdout, "Returned string is: %s ", rcvbuf);
       /* 使用tpfree释放申请的请求和应答buffer空间 */
       tpfree(sendbuf);
       tpfree(rcvbuf);
       /* 使用tpterm离开tuxedo System */
       tpterm();
       return(0);
}
[/code]

(2)客户端编译
客户端代码使用buildclient编译,如下图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image004.jpg[/img]
buildclient参数说明:
-o:指明客户端程序的可执行(输出目标)文件名称
-f:指明客户端源程序文件名称
五、 服务端代码简析及编译
(1)服务端simpserv.c代码分析

[code]

#include <stdio.h>
#include <ctype.h>
#include <atmi.h>        /* TUXEDO Header File */
#include <userlog.h>        /* TUXEDO Header File */
  
#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 len-1; i++)
              rqst->data[i] = toupper(rqst->data[i]);
       /* 设置返回客户端buffer */
       tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
[/code]&nbsp;
(2)服务端simpserv.c编译方法
服务端代码使用buildserver编译,如下图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image006.jpg[/img]
buildserver参数说明:
-o:指明服务端程序的可执行(输出目标)文件名称
-f:指明服务端源程序文件名称
-s:提供系统启动时的tuxedo系统服务的名称
六、 编辑ubbconfig配置文件并编译


[code]#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the items with the appropriate values.
*RESOURCES
IPCKEY      66256
DOMAINID    simpapp
MASTER      simple
MAXACCESSERS    10
MAXSERVERS  5
MAXSERVICES 10
MODEL       SHM
LDBAL       N
  
*MACHINES
DEFAULT:
        APPDIR="/tuxedo/wsy"
        TUXCONFIG="/tuxedo/wsy/tuxconfig"
        TUXDIR="/tuxedo"
"scosysv"       LMID=simple
  
*GROUPS
GROUP1
    LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
        CLOPT="-A"
simpserv    SRVGRP=GROUP1 SRVID=1
  
*SERVICES
TOUPPER
[/code]


(2)使用tmloadcf编译ubbconfig文件,生成二进制的TUXCONFIG环境所指定的文件
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image008.jpg[/img]
七、 启动simpapp应用程序
使用tmboot启动tuxedo应用程序,如下图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image010.jpg[/img]
八、 执行simpapp应用程序
执行simpcl命令可以将客户端发送到服务端的小写字符转换为大写并返回给客户端,如图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image012.jpg[/img]
九、 运行tmadmin管理程序
系统管理员可以使用tuxedo提供的tmadmin命令对tuxedo应用进行管理、动态配置,下面例举了常用的psr和psc命令。具体的参考tmadmin命令手册。
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image014.jpg[/img]
(1)printserver(可简写为psr):输出server的相关信息等
(2)printservice(可简写为psc)输出services的相关信息等
(3)quit:退出tmadmin命令控制界面
十、 关闭simpapp应用程序
运行tmshutdown命令停止tuxedo应用服务程序,如图:
[img]http://dev2dev.bea.com.cn/images/school/tuxedo030507_05/image016.jpg[/img]

2005-10-22 19:27 大漠孤星
本贴虽然简单,但是的确经典。我把它转贴过来,并且修正了原贴一些错误,供tuxedo的初学者。

很多人培训tuxedo,都是把本章所讲内容作为第一个实验。

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.