免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3078 | 回复: 0

Sco Unix平台下tuxedo应用simpapp举例 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之北控
日期:2022-03-04 22:35:50
发表于 2008-04-07 15:58 |显示全部楼层

 
 
一、 课程目标
通过本课程学习,你可以掌握如下知识:
  • 初步理解tuxedo应用的各个组成部分:客户端、服务端、配置文件、系统管理等
  • 了解tuxedo应用客户端、服务端程序代码组成部分及编译方法
  • 了解tuxedo应用的ubbconfig配置文件的作用及编译方法
  • 了解tuxedo应用的启动、停止方法
  • 了解tuxedo应用的系统管理基本命令
    二、 准备工作
  • 系统要求安装tuxedo软件
  • 要求设置必要的环境变量
  • 安装C语言编译器(VC++、Borland C++等)
    三、 simpapp例子建立步骤
  • 建立新目录,复制simpapp文件到新目录下,设置环境变量
  • 服务端、客户端程序代码简单解释并编译程序
  • 编辑ubbconfig配置文件并编译
  • 启动simpapp应用程序
  • 执行simpapp应用程序
  • 运行tmadmin管理程序
  • 关闭simpapp应用
    四、 复制simpapp应用程序
    (1) 建立新目录,并复制simpapp到新目录下(以下建立wsy目录,并复制simpapp到wsy目录下),如下图:


    (2) 设置正确的环境变量
    将TUXDIR、APPDIR、PATH、TUXCONFIG等环境变量export出来,设置成正确的环境变量。
    TUXDIR:tuxedo软件安装目录
    APPDIR:tuxedo应用可执行程序目录
    PATH:包含%TUXDIR%in、%APPDIR%路径
    TUXCONFIG:tuxedo的ubbconfig配置文件编译后的二进制文件路径
    注:这些环境变量要求与ubbconfig配置文件设置的环境变量相同
    客户端代码简析及编译
    (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 ");
                  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);
    }
    (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 len-1; i++)
                  rqst->data = toupper(rqst->data);
           /* 设置返回客户端buffer */
           tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
    }
      
    (2)服务端simpserv.c编译方法
    服务端代码使用buildserver编译,如下图:

    buildserver参数说明:
    -o:指明服务端程序的可执行(输出目标)文件名称
    -f:指明服务端源程序文件名称
    -s:提供系统启动时的tuxedo系统服务的名称
    六、 编辑ubbconfig配置文件并编译
    #ident  "@(#) apps/simpapp/ubbsimple    : 1.1
    #Skeleton UBBCONFIG file for the TUXEDO Simple Application.
    #Replace the items with the appropriate values.
    *RESOURCES
    IPCKEY      66256
    #IPCKEY必须是在32768 与 262143 之间
    #Example:
    #IPCKEY     123456
    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
    (2)使用tmloadcf编译ubbconfig文件,生成二进制的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应用服务程序,如图:



    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31/showart_520223.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP