Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176606
  • 博文数量: 77
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 990
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-21 18:13
文章分类

全部博文(77)

文章存档

2011年(1)

2009年(76)

我的朋友

分类:

2009-07-08 21:11:32

l       定义

l       过程

l       代码例子

l       错误处理和管理类API


       TUXEDO下管理应用有很多手段,如下:

²       tmadmin

²       tmadmin的脚本

²       调用ATMI

²       X-Windows GUI

²       JAVA applet Web GUI

²       Admin API MIB

每一种方法都有其优点和适用场合。Admin API提供访问TUXEDO信息的控制方法和结构。这些信息被分类成组,称为管理信息库(Management Information Base—MIB)。通过Admin API可以访问MIB。使用Admin API有以下优势:

²       可访问的TUXEDO系统信息更多

²       管理应用有更高的灵活度

²       可以集成到外部系统工具中


 

Admin API(MIB)

       TUXEDO系统组成的各个部分都有自己的MIB,每部分的MIB是一组相关的类,每个类代表一个MIB可管理的实体或项目,有其自身的属性、许可权限和语义。TUXEDO系统的MIB5部分,如下:

²       TM_MIB

²       EVENT_MIB

²       APPQ_MIB

²       WS_MIB

²       ACL_MIB

下边的例子是访问TM_MIB并显示了/T部分的管理信息库。


 

       Admin API使用了一些预定义的FML32的域,这些数据组织存放在文件$TUXEDO/udataobj/tpadm中。环境变量必须设置如下:

       FLDTBLDIR32=$TUXDIR/udataobj

       FIELDTBLS32=Usysfl32,tpadm,evt_mib

       Export FLDTBLDIR32 FIELDTBLS32

使用Admin API的代码范例

#include

#include

#include

#include

main(int argc, char **argv)

{

       long blen;

       FBFR32      *ibuf;

       /* tpinit() 连接TUXEDO */

       ibuf = (FBFR32 *)tpalloc(FMLTYPE32,NULL,0);

       Fchg32(ibuf,TA_OPERATION,0,”GET”,0);

       Fchg32(ibuf,TA_CLASS,0,”T_MACHINE”,0);

       printf(“Query th T_MACHINE class before:\n”);

       Fprint32(ibuf);

       printf(“\n”);

       if (tpcall(“.TMIB”,(char *)ibuf,0,(char **)&ibuf,&blen,0)== -1){

              printf(“tpcall(.TMIB) failed:%s\n”,tpstrerror(tperrno));

              Fprint32(ibuf);

              Return(-1);

       }

       printf(“Query th T_MACHINE class after:\n”);

       Fprint32(ibuf);

       printf(“\n”);

       tpfree((char *)ibuf);

       tpterm();

       return(0);

}

因为Admin API是基于FML32类型的数据,所以要包含TUXEDO系统头文件“fml32.h”

因为Admin API要用一些预定义的域去访问MIB信息,如TA_OPERATIONTA_CLASS,所以要包含TUXEDO系统头文件“tpadm.h”

tpinit()连接TUXEDO系统。

分配一个FML32数据缓冲。

在本例中,我们通过“GETing)”得到“MACHINE”的信息。

tpcall()调用.TMIB服务。

显示结果。

释放FML32缓冲。

切断连接。

本例的输出(域名和域值)

TA_ERROR              0

TA_MORE                0

TA_OCCURS           1

TA_PERM                438

TA_GID                            302

TA_MAXACCESSERS 20

TA_MAXCONV               1

TA_MAXGTT                   20

TA_MAXWSCLIENTS   0

TA_MINOR                      6000

TA_RELEASE                60

TA_SPINCOUNT            0

TA_TLOGSIZE                100

TA_TMNETLOAD           0

TA_UID                                   261

TA_MAXCLCACHE              100

TA_CLASS                            T_MACHINE

TA_STATE                      ACTIVE

TA_APPDIR                    /usr/apps/atmapp

TA_CMPLIMIT                 MAXLONG,MAXLONG

TA_ENVFILE                  /usr/apps/atmapp/ENVFILE

TA_PMID                         lcspn1

TA_TLOGDEVICE         /usr/apps/atmapp/logs/TLOG

TA_TLOGNAME             TLOG

TA_TUXCONFIG            /usr/apps/tuxconfig

TA_TUXDIR                     /usr/tuxedo

TA_TYPE                         RS6000

TA_ULOGPFX                /usr/apps/atmapp/logs/ULOG

TA_LMID                          SITE1

 

Admin API域和错误处理

 

       除基本的域外,其他一些Admin API域在管理MIB信息时也非常有用。如:

在一个大应用中,server节会包含很多条目,以下3个域在取得这些信息时很有用。

 

TA_OCCURS

在请求时,表示需要得到信息的行数。

在返回结果后,表示成功得到信息的行数。

TA_CURSOR

表示上一次GET操作停止的位置。配合TA_OPERATIONGETNEXT属性,可以顺序遍历MIB

TA_FILTER

客户端程序可以通过该域得到一个特定域信息

 

       使用Admin API发生错误时,在回应缓冲中会带回来自MIB的错误信息

 

TA_ERROR

返回一个长整形操作结果值,参见诊断信息

TA_STATUS

用文本格式描述错误

TA_BADFLD

如果有一个域发生错误,用一个长整形值描述出错的FML32

 

代码范例

/* 得到前3 */

long n=3;

Fchg32(sendbuf,TA_OPERATION,0,”GET”,0);

Fchg32(sendbuf,TA_CLASS,0,”T_SERVER”,0);

Fchg32(sendbuf,TA_OCCURS,0,n,0);

Fchg32(sendbuf,TA_CURSOR,0,NULL,0);

/* 打印rpbuf中返回值*/

ret = tpcall(“.MIB”,(char *)sendbuf,0,(char **)&recvbuf,&len,0);

/* 如果出错打印TA_ERRORTA_STATUS*/

if ( ret == -1 && tperrno == TPESVCFAIL){

       Fget32(recvbuf,TA_ERROR,0,(char *)&ta_error,NULL);

       Ta_status=Ffind32(recvbuf,TA_STATUS,0,NULL);

       Printf(“Failure:%ld,%s\n”,ta_error,ta_status);

}else

       Fprint32(recvbuf);

/* recvbuf传递TA_CURSOR,得到下3*/

Fget(recvbuf,TA_CURSOR,0,cursor,0);

Fchg32(sendbuf,TA_OPERATION,0,”GETNEXT”,0);

Fchg32(sendbuf,TA_CURSOR,0,cursor,0);

 


 

tpadmcall(FBFR32 *inbuf, FBFR32 **outbuf, long flags)

 

用法:

 

Unbooted App

Unconfigured App

 用户是管理员,用于SET一个NEW T_RESOURCE类,然后定义一个初始配置给应用

Unbooted App

Configured App

在有权限的UID/GID情况下,GETSET任何TM_MIB(5)中任何类的任何属性。

Booted App

Unattached Process

在有权限的UID/GID情况下或用户是管理员,当返回值不是ACTIVE时,可以GET任何TM_MIB(5)中有合适权限的任何类的任何属性。

Booted App

Attached Process

权限在tpinit()时由授权key决定,可以GET任何TM_MIB(5)中有合适权限的任何类的任何属性。

 

 

代码范例:

 

#include

#include

#include

#include

main(int argc , char **argv)

{

FBFR32      *ibuf;

       /* tpinit() 连接TUXEDO */

       ibuf = (FBFR32 *)tpalloc(FMLTYPE32,NULL,0);

       Fchg32(ibuf,TA_OPERATION,0,”GET”,0);

       Fchg32(ibuf,TA_CLASS,0,”T_DOMAIN”,0);

       printf(“Query th T_DOMAIN class before:\n”);

       Fprint32(ibuf);

       printf(“\n”);

       if (tpadmcall(ibuf,&ibuf,0)== -1){

              printf(“tpadmcall() failed:%s\n”,tpstrerror(tperrno));

              Fprint32(ibuf);

              Return(-1);

       }

       printf(“Query th T_MACHINE class after:\n”);

       Fprint32(ibuf);

       printf(“\n”);

       tpfree((char *)ibuf);

       tpterm();

       return(0);

}

阅读(2227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~