初学Tuxedo在进行simpcl.c编译时出现Can't find include file "atmi.h"异常!
Tuxedo使用
————Tuxedo配置及简单应用
1. 设置环境变量
TUXDIR=
APPDIR=
PATH=
TUXCONFIG=
WSNADDR=
LD_LIBRARY_PATH=%LD_LIBRARY_PATH%;%TUXDIR%\LIB
2. 编辑样本配置文件ubbsimple,修改相应内容。
IPCKEY 区别于其他用户的变量(32767..262143)
TUXCONFIG
TUXDIR
APPDIR
Machine-name
3. 使用如下命令建立二进制配置文件:
tmloadcf
4. 使用如下命令建立服务器端和客户端可执行程序
buildclient –v –w –o simpcl –f simpcl.c
buildserer –v –o simpserv –f simpserv.c –s touppers
注:
simpcl client可执行程序。
simpcl.c client源程序。
simpserv server端可执行程序。
simpserv.c server端源程序。
touppers service名称。
5. 使用如下命令启动server端应用环境(由二进制配置文件定义):
tmboot –y
6. 使用如下命令可以显示和修改运行进程的参数。
tmadmin:
有两个子命令:
psr (printserver) 显示有关服务器的信息。
psc (printservice) 显示有关服务进程的信息。
7. 可以通过查看日志文件ULOG.*来获取系统运行信息。
日志文件信息格式如下:
time (hhmmss).machine_uname!process_name.process_id: log message
说明: 时间(hhmmss).机器名称.进程名.进程号.日志信息
8. 使用如下命令关闭应用环境:
tmshutdown –y
参数:
-A 在所有机器上启动/关闭管理的Server进程
-M 只在MASTER机器上启动/关闭管理的Server进程
-i srvid 启动/关闭某个server id指定的Server进程
-g grpname 启动/关闭某个server group名字指定的Server Group
-S 启动/关闭所有应用服务器(LMID)
-s server-name 启动/关闭某个server名字指定的Server进程
-l lmid option 在指定的机器上启动/关闭所有TMS进程和应用服务器(LMID)
-T grpname 启动/关闭指定的server group中所有的TMS进程
-B lmid 在指定的机器上启动/关闭BBL进程
-e command 指定一个程序可以当在MASTER机器上启动任何一个进程失败时执行
-c 计算出当前UBB配置的Tuxedo启动最少要占用的系统IPC资源
9. UBBCONFIG文件的例子:
#ident "@(#) apps/simpapp/ubbsimple $Revision: 1.3 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the items with the appropriate values.
*RESOURCES
IPCKEY 123456
#Example:
#IPCKEY 123456
#DOMAIN的ID值
DOMAINID simpapp
#指定DOMAIN中的管理
MASTER simple
#这里该值表示整个系统中每个机器上可以访问TUXEDO的Client和Server的总数
MAXACCESSERS 100
#最大的server数
MAXSERVERS 5
#最大的service数
MAXSERVICES 10
#cluster方式为MP,否则为SHM
MODEL SHM
#允许负载均衡
LDBAL N
*MACHINES
#网络主机名用hostname获得。
#LMID:Logical Machines ID 为tuxedo对主机的内部逻辑命名。
#APPDIR要求放置SERVER的可执行文件。
#TUXCONFIG为全路径的二进制配置文件,要求和环境变量TUXCONFIG相同。
#TUXDIR为tuxedo安装目录,要求和环境变量TUXDIR相同。
CCBFJF85 LMID=simple
APPDIR="/home/tuxedo/samples/atmi/simpapp"
TUXCONFIG="/home/tuxedo/etc/tuxconfig"
TUXDIR="/home/tuxedo"
#MAXWSCLIENTS表示可连接client的最大个数。
MAXWSCLIENTS=50
*GROUPS
#GROUP1为组名,LMID表示该组运行的主机,GRPNO为组号,
#OPENINFO为该组打开数据库的初始串。
GROUP1 LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
#WSL用于和client端进行连接。-n 表示出接入点为IP:PORT方式,
#-m -M 表示最小和最大启动多少个WSH和前端通讯,
#-x则表示一个WSH和几个client端连接。
WSL SRVGRP=GROUP1 SRVID=1
CLOPT="-A -- -n //127.0.0.1:8889 -m 3 -M 10 -x 10 "
simpserv SRVGRP=GROUP1 SRVID=2
CLOPT="-A -o ./out.log -r -e ./err.log"
*SERVICES
touupers
10. simpcl.c文件的例子:
/* Copyright (c) 1997 BEA Systems, Inc.
All rights reserved
THIS IS UNPUBLISHED PROPRIETARY
SOURCE CODE OF BEA Systems, Inc.
The copyright notice above does not
evidence any actual or intended
publication of such source code.
*/
/* #ident "@(#) apps/simpapp/simpcl.c $Revision: 1.3 $" */
#include
#include
#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);
}
/* Attach to System/T as a Client Process */
if (tpinit((TPINIT *) NULL) == -1) {
(void) fprintf(stderr, "Tpinit failed
");
exit(1);
}
sendlen = strlen(argv[1]);
/* Allocate STRING buffers for the request and the reply */
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) {
*/
if((rcvbuf = (char *) tpalloc("STRING", NULL, 1)) == NULL) {
(void) fprintf(stderr,"Error allocating receive buffer
");
tpfree(sendbuf);
tpterm();
exit(1);
}
(void) strcpy(sendbuf, argv[1]);
/* Request the service TOUPPER, waiting for a reply */
ret = tpcall("touppers", (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);
/* Free Buffers & Detach from System/T */
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
return(0);
}
11. simpserv.c文件的例子:
/* Copyright (c) 1997 BEA Systems, Inc.
All rights reserved
THIS IS UNPUBLISHED PROPRIETARY
SOURCE CODE OF BEA Systems, Inc.
The copyright notice above does not
evidence any actual or intended
publication of such source code.
*/
/* #ident "@(#) apps/simpapp/simpserv.c $Revision: 1.3 $" */
#include
#include
#include /* TUXEDO Header File */
#include /* TUXEDO Header File */
/* tpsvrinit is executed when a server is booted, before it begins
processing requests. It is not necessary to have this function.
Also available is tpsvrdone (not used in this example), which is
called at server shutdown time.
*/
#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
/* Some compilers warn if argc and argv aren't used. */
argc = argc;
argv = argv;
/* userlog writes to the central TUXEDO message log */
userlog("Welcome to the simple server");
return(0);
}
/* This function performs the actual service requested by the client.
Its argument is a structure containing among other things a pointer
to the data buffer, and the length of the data buffer.
*/
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
touppers(TPSVCINFO *rqst)
#else
touppers(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
for(i = 0; i len-1; i++)
rqst->data[i] = toupper(rqst->data[i]);
/* Return the transformed buffer to the requestor. */
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
悬赏分:10 - 离问题结束还有 11 天 4 小时
初学Tuxedo在对simpapp事例中的客户端代码simpcl.c进行编译时出现Can't find include file "atmi.h"异常。
在命令行中输入 buildclient -o simpcl -f simpcl.c 之后
simpcl.c
simpcl.c(15): fatal error #1035: Can't find include file "atmi.h".
TUXNT_CAT:77: ERROR: Can't execute cc /MD -I"%TUXDIR%"\include -Fesimpcl simpc
l.c "%TUXDIR%"\lib\libtux.lib "%TUXDIR%"\lib\libbuft.lib "%TUXDIR%"\lib\libf
ml.lib "%TUXDIR%"\lib\libfml32.lib "%TUXDIR%"\lib\libengine.lib wsock32.lib ker
nel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib -link -i
mplib:BC-dc4.lib
jQuery和JSP做什么用的,学JAVA还有哪些语言需要掌握
9.你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。10.你需要学习分布式对象以及远程API,例如RMI和RMI\/IIOP。11.你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括javaEE本身。12.你需要学习最少一种的XMLAPI,...
java学习起来简单吗?
某些方面来讲,java入门还是比较容易学,如果是大学毕业,大学计算机专业里大多开设了java基础课程,或者学过一点编程,学起java来也会轻松不少。即使是零基础也不用担心,java可以零基础授课,入门比较简单,难的是学深入,这不是一件容易的事。学习java是一个循序渐进的过程,要想完全凭自学是很难精通这...
有哪些超使用的演讲技巧值得学习的?
表情这里指的是面部表情,即眼、眉、嘴以及头等配合讲词的协同动作。这些动作要完全服从于讲词的需要,是“自然而然”的,从生活中来的。台上的表情可以比生活中稍为夸张,但不宜过分,给人以做作之感。尤其不能因“演”而“讲”,因“演”而“讲”则会显得“虚假”,进而引起哄笑。在表情中尤...
超实用小技巧大学学习java必备
10.你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。11.你需要学习分布式对象以及远程API,例如RMI和RMI\/IIOP 12.你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括javaEE本身。13.你需要学习最少一种的XMLAPI,...
优秀的java工程师该具备怎样的素质?
9.你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。10.你需要学习分布式对象以及远程API,例如RMI和RMI\/IIOP。11.你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括javaEE本身。12.你需要学习最少一种的XMLAPI,...
关于英语学习
英语学习主要讲述学习英语的方法,注意事项等内容。学习英语贵在坚持,找到适合自己的方法,多运用多温故。英语学习过程是一种观察,模拟,认识,识记,思考,记忆等综合的心理活动过程。建议从学单词开始就听写背单词,建立起人对英语单词声音形象的条件反射能力。英语学习技巧:学习英语贵在坚持,找到适合自己...
求美少女战士人物及简单的介绍(要9位美少女)还有反派的名字等 ._百度...
虽然小兔常跟着她学习,但似乎一点起色也没有,可见这是天生的,别人想学也学不了。在战斗中她也是最冷静的一个,与小兔正相反。声优:久川绫(Hisakawa ...Pink Sugar Heart Attack [+Tuxedo Mask] Moon Crisis Make Up Moon Gorgeous Meditation Pink Moon Crystal Power Make Up Starlight Honeymoon Double ...
背单词有哪些方法?
特别注意。比如,背单词一段时间后,你应该问自己:我一共学了多少关于衣服的词?哦,有·garment,scarf,apparel,tuxedo。如果你只记得中文意思,想不起英文,下次就要特别注意了。或者你看到holograph 的时候是否能想起homograph?虽然有些书给你整理了一些联系,可我觉得自己总结的才会印象最深。
请问学英语有什么方法快速记住单词吗?求大神帮助
背单词时,同义的、反义的、形似的、同类的、同根的单词放在一块儿记。背单词一段时间之后,看到一个单词,就可以想一想以前学过什么同义的,如果只有印象而想不起来,最好在笔记本上记一笔,下次碰到时,特别注意。 (一)、选择好书 1. 所选单词书不应太厚。 人们大都有喜新厌旧的毛病,...
卢霞依苏: 服务器端只支持c,不支持c++,lz似乎是用了c++来做,当然不行了.C++的入口函数和c还是不一样的,VS2005就是报的那个错吧.我猜的,猜错不要怪我.
东营区19353274583: 怎么能主动释放被锁定对象.而不是等到数据库与tuxedo配置连接超时才释放 - ?
卢霞依苏: 1、与C语言相比,垃圾回收器是JAVA的一大优势.其功能在于自动释放违背占用的内存,但何时去释放有其自身的算法,不支持使用者直接释放内存.2、使用者所能做的只是使用System.gc()通知JAVA垃圾回收器在“合适”的时间逐个使用Object.finalize()清除未为程序引用的各个对象.3、使用着调用Object的finalize()方法不会启动任何作用,只能是重写该方法执行写对象销毁前应做的操作,如关闭IO等.4、使用者还可以做到的就是指定那些对象占用的内存会被释放,方法就是将对象的值赋为NULL.5、编程用使用者应做的就是提高对象的复用性,尽量少的声明对象.
东营区19353274583: TUXEDO怎么用??
卢霞依苏: Tuxedo是一个客户机/服务器的“中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务.Tuxedo是一个事务处理(TP)监督器,它管理联机事务处理(OLTP)系统(参见“事务处理”)操作的事务.客户通过结构化查询...
东营区19353274583: 采用Tuxedo 中间件的程序怎么开发,需要哪些准备 - ?
卢霞依苏: Oracle Tuxedo为在异构的分布式环境下构建从WEB到企业应用的可扩展的多层Client/Sserver应用程序提供了一种框架或者说是中间件.使用Tuxedo,用户可以开发,管理,部署独立于底层硬件、操作系统、网络和数据库环境的应用程序. 中...
东营区19353274583: linux怎么安装tuxedo中间件 - ?
卢霞依苏: 第一步:建立Tuxedo用户 第二步:配置环境变量 TUXDIR指定tuxedo的安装路径.ORACLE_BASE指定Oracle数据库的产品根目录.ORACLE_HOME指定oracle客户端的目录.ORACLE_SID指定数据库实例.如果不涉及到数据库,这些可以不...
东营区19353274583: Tuxedo的Tuxedo功能介绍 - ?
卢霞依苏: Tuxedo作为电子商务交易平台,它允许客户机和服务器参与一个涉及多个数据库协调更新的交易,并能够确保数据的完整性.BEA Tuxedo一个特色功能是能够保证对电子商务应用系统的不间断访问.它可以对系统组件进行持续的监视,查看是...
东营区19353274583: java 怎么调用tuxedo接口 - ?
卢霞依苏: Tuxedo的service有两种调用接口:ATMI和CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构).但是目前一般都是采用ATMI接口来做.一个简单的调用流程如下:首先用VC编写DLL(Dynamic Link Library,动态...
东营区19353274583: tuxedo psc指令后service name怎么全显示 - ?
卢霞依苏: Tuxedo使用 ————Tuxedo配置及简单应用 1. 设置环境变量 TUXDIR= APPDIR= PATH= TUXCONFIG= WSNADDR= LD_LIBRARY_PATH=%LD_LIBRARY_PATH%;%TUXDIR%\LIB 2. 编辑样本配置文件ubbsimple,修改相应内容. IPCKEY 区别于其他用户的变量
东营区19353274583: tuxedo SHM方式,不同主机间通信问题??
卢霞依苏: 1)可以使用Tuxedo的工作站调用监听程序即(WSL)在服务端的ubb配置文件中配置WSL服务,配置方法参加官方文档中描述,在客户端配置WSNADDR环境变量指定WSL的地址和端口, 编译客户端程序时记得加 -w参数,这个参数表示客户...
东营区19353274583: TUXEDO调服务时,客户端返回tpcall错误:tpforward tpacall failure TPENOENT - no entry found.?
卢霞依苏: 一般出现这个问题可能有两种情况: 1.是服务没有部署 2.服务被core dump了 你可以检查一下appdir目录下是否有core 文件产生