草木瓜 2006-6-1------------------------一、简介------------------------外部应用访问Tuxedo服务是很经常的事,一般有两种方法WTC和Jolt,网上很多关于Jolt调用T 文章,描述的太多笼统,其实通过Jolt并不是很复杂的事情,这里使用Eclipse3.1+Jolt+Web +Tuxedo9.0环境描述调用服务的全过程。
Jolt是Bea Tuxedo自带的jar组件,在Tuxedo9.0的安装过程中可以看到安装的Jolt组件。
调用服务理论步骤是这样的:1.先准备Tuxedo服务端代码2.在Tuxedo中配置Jolt相关文件3.启动Tuxedo服务4.配置WebLogic服务与Tuxedo Jolt相关的参数5.配置Eclipse3.1启动WebLogic服务6.编写Eclipse Servlet代码,运行调用服务。
本例使用了《Windows Tuxedo的安装配置-数据库补充》一文中的Tuxedo数据服务文件,所以Tuxedo服务前,必须先启动数据库实例,因为在tpsvinit()里面就配置了数据连接。
关于Tux 要点需参阅《Tuxedo的安装配置-...》的四篇文章。
------------------------二、Tuxedo服务文件全代码------------------------这里把server.pc服务文件代码再次列出。
其中包括三个服务DBREAD(读数据库)和TOUPPER(本例不使用TOUPPER,所以不用理会那段代码。
其中liwei/liwei@windb连接的表tuxedo_test,结构如下:CREATE TABLE TUXEDO_TEST(ID NUMBER(2),NAME VARCHAR2(10))ID NAME------------------------1 aaaaaaa2 bbbbbbb#include <stdio></stdio>#include <ctype></ctype>#include <atmi></atmi> /* TUXEDO Header File */#include <userlog></userlog> /* TUXEDO Header File */EXEC SQL BEGIN DECLARE SECTION;VARCHAR ora_no[2];int ora_id;VARCHAR ora_value[10];VARCHAR ora_cn[30];EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE sqlca;tpsvrinit(){strcpy(ora_cn.arr,"liwei/liwei@windb");ora_cn.len = strlen(ora_cn.arr);ora_cn.arr[ora_cn.len]='\0';//EXEC SQL WHENEVER SQLERROR GOTO cnError;EXEC SQL CONNECT :ora_cn;return(0);}tpsrvdone(){EXEC SQL COMMIT WORK RELEASE;}DBREAD(TPSVCINFO *rqst){strcpy(ora_no.arr,(char *)rqst->data);ora_no.len=strlen(ora_no.arr);ora_no.arr[ora_no.len]='\0';userlog("ERRSRV: %s",ora_no.arr);EXEC SQL select name into :ora_value from tuxedo_test where id=:ora_no;if(sqlca.sqlcode!=0){userlog("ERRSRV: select name from tuxedo_test where id=, sqlcode=%ld , sqlerr=\ strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);tpreturn(TPFAIL, 0, rqst->data, 0L, 0);}/* Return the transformed buffer to the requestor. */strset(rqst->data,"");strcpy(rqst->data,ora_value.arr);tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);}TOUPPER(TPSVCINFO *rqst){int i;for(i = 0; i < rqst->len-1; i++)rqst->data[i] = toupper(rqst->data[i]);/* Return the transformed buffer to the requestor. */tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);}------------------------三、编译服务------------------------编译命令的注意事项,以前Tuxedo系列文章都提过。
proc server.pc include=%TUXDIR%\includebuildserver -o server -f server.c -s DBREAD -s TOUPPER -v -l orasql9.lib ------------------------四、配置Tuxedo服务的config文件------------------------完全文件如下:#Liwei*RESOURCESIPCKEY 123456DOMAINID liweiappMASTER lwMAXACCESSERS 150MAXSERVERS 100MAXSERVICES 100MODEL SHMLDBAL N*MACHINESLWYMLMID = lwTUXDIR = "E:\bea\tuxedo9.0"TUXCONFIG = "G:\Liwei\Tuxedo\dbread\tuxconfig"APPDIR = "G:\Liwei\Tuxedo\dbread"MAXWSCLIENTS=1TLOGDEVICE = "G:\Liwei\Tuxedo\dbread\TLOG"TLOGNAME=TLOGTLOGSIZE = 100*GROUPSAPPGRP LMID=lw GRPNO = 1#OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+ #TMSNAME="TMS_ORA9i" TMSCOUNT=2JSLGRP LMID=lw GRPNO = 2JREPGRP LMID=lw GRPNO = 3*SERVERSserver SRVGRP=APPGRP SRVID=1#WSL SRVGRP=APPGRP SRVID =300#CLOPT="-A -- -n //192.168.0.166:8888 -d/dev/tcp -m1 -M5 -x 10"JSL SRVGRP=JSLGRP SRVID=301CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"JREPSVR SRVGRP=JREPGRP SRVID=302CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"*SERVICESDBREADTOUPPER细心一看,这个config文件比在*GROUPS和*SERVERS各加了两项对应内容:JSLGRP LMID=lw GRPNO = 2JREPGRP LMID=lw GRPNO = 3和JSL SRVGRP=JSLGRP SRVID=301CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"JREPSVR SRVGRP=JREPGRP SRVID=302CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"这两项是用于jolt的访问接口。
JSL和JREPSVR必须是独自的GROUP,由于外部调用通过JSL和J Tuxedo服务通信,WSL就没用了。
JSL的主机地址是Tuxedo服务器地址,端口是随意指定的,不即可,一般设置的大一点。
在config里面加入这此内容后,config文件就Ok了。
------------------------五、配置jrepository文件------------------------直接打开E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository文件添加以下内add SVC/DBREAD:vs=1:ex=1:bt=STRING:\bp:pn=STRING:pt=string:pf=167772161:pa=rw:ep:add PKG/SIMPSERV:DBREAD:这个文件如果没有DBREAD配置,调用会提示DBREAD not avaliable,DBREAD配置错误,会提示been modifed ...对这个文件操作还有以下两种方式:方式一:在IE打开E:\bea\tuxedo9.0\udataobj\jolt\RE.html,是个java applet,里面是图 完服务,设置好参数即可。
具体方法可以查阅网上资料,有图文解说的。
方式二:在命令行键入Java bea.jolt.admin.jbld //192.168.0.166:9878 services.rep,其JSL的设置一致。
services.rep是随意的一个文件,不过文件内容绝对不随意,如下:service=DBREADinbuf=STRINGoutbuf=STRINGexport=trueparam=STRINGtype=stringaccess=inout要执行这个命令设置jdk环境变量是必不可少的,PATH,CLASSPATH。