您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 通过wtc、jolt进行tuxedo与weblogic通信开发
标题:通过wtc、jolt进行tuxedo与weblogic通信开发[评论]作者:李振嘉(dev2devID:lizhenjia)(一)摘要beatuxedo与weblogic作为业界优秀的交易与应用服务器中间件产品,在电信,银行,金融等领域广泛应用,通常由tuxedo处理系统的核心业务,weblogic将业务应用扩展到internet平台,实现电子商务,由weblogic调用tuxedo的服务或者由tuxedo的服务调用通过weblogic部署的ejb,所以tuxedo与weblogic之间的互连通信会经常遇到,本文通过2个例子介绍tuxedo与weblogic通信的配置与开发,两个例子分别通过wtc(weblogictuxedoconnector)、jolt实现weblogic与tuxedo通信的配置与开发.本文所有例子程序与配置均在SunSolaris,weblogic8.1,tuxedo8.0平台上进行,如在windows等其他平台开发配置方法大同小异;另外为了减少篇幅文中涉及的例子代码没有全部罗列,只选择粘贴了关键部分的代码.(二)通过wtc进行tuxedo与weblogic通信的配置与开发1)域间通信以及wtc介绍Tuxedo的域间通信进程介绍Wtc是tuxedo通过域间通信实现的,所以需要tuxedo启动用于域间通信的进程,介绍wtc之前先介绍以下几个域间通信的进程.*DMADM(DOMAINADMINISTRATORSERVER)管理域的server,在运行时管理BDMCONFIG,对已登记的gatewaygroup提供支持,在tuxedo系统中,只能有一个DMADM进程,且不能对它采用MSSQ,不能有REPLYQ.*GWADM(GATEWAYADMINISTRATORSERVER)管理域的域网关进程,在运行时可以对某一组域网关进行管理,主要从DMADM那里取得域的配置信息,并对域网管进程及跨越域的全局事务的LOG文件进行管理.*GWTDOMIN(GATEWAYPROCESS)处理域之前的互操作,使本地域和调用远程域可以互相调用彼此的service,其中GMADM和GWTDOMAIN必须在一个组中,一个tuxedo应用可以有多个GWADM,GWTDOMAIN对,一个组只能有一个GMADM,GWTDOMAIN对,但一个tuxedo应用只能有一个DMADM,DMADM可以在如何一个组中,一个本地域可以和多个远程域实现互操作.Wtc介绍Wtc(weblogictuxedoconnector)是weblogicserver的一个组成部分,可以实现tuxedo和weblogic之间的应用集成,为weblogic和tuxedo提供了双向的互操作性,即tuxedoservice可以调用在weblogic上部署的ejb,在weblogic上部署的ejb可以调用tuxedo的service.2)Tuxedo方面需要进行的工作修改并编译ubb文件1)在ubb文件*GROUPS节点中增加如下3个tuxedoGroup:DMGroupLMID=simpleGRPNO=2OPENINFO=NONEDMGroupLMID=simpleGRPNO=3OPENINFO=NONEWSGroupLMID=simpleGRPNO=4OPENINFO=NONE2)在ubb文件*SERVERS节点中增加如下3个tuxedoserver:DMADMSRVGRP=DMGroupSRVID=22230GWADMSRVGRP=GWGroupSRVID=22340GWTDOMAINSRVGRP=GWGroupSRVID=22350其中GWADM和GWTDOMAIN应该在同一个组中,保存ubb文件并按如下完成编译:tmloadcfubb_filename之后tmboot-y启动tuxedoserver,如果启动以上3个server时报类似Applicationinitializationfailure的启动失败的提示信息,那么注意查看tuxedo的ULOG日志文件,通过日志的提示排除错误,这里常见的一个错误是没有在系统环境变量中定义BDMCONFIG或者指定该文件路径错误.(关于环境变量的修改见下文).增加并编译dm文件dm文件是tuxedo进行域间通信时的配置文件,tuxedo与weblogic通过wtc通信是通过域间通信实现的,所以dm文件需要创建,dm文件通常可以存放在ubb文件所在的路径下.Dm需要做的配置如下:*DM_LOCAL_DOMAINStuxedo_domainGWGRP=GWGroupTYPE=TDOMAINDOMAINID=billingDMTLOGDEV=/../../log/DLOG*DM_REMOTE_DOMAINSweblogic_domainTYPE=TDOMAINDOMAINID=weblogic*DM_TDOMAINtuxedo_domainNWADDR=//tuxedoserver_domain_ip:portNWDEVICE=../../binweblogic_domainNWADDR=//weblogicserver_domain_ip:port*DM_REMOTE_SERVICES*DM_LOCAL_SERVICESfml32_testRNAME=fml32_test*DM_LOCAL_DOMAINS定义本地tuxedo域的信息,分别定义该域所在的组,域类型,域的唯一标识,域间通信时日志的全路径,其中GWGRP,DOMAINID的值要与ubb文件中的定义匹配.*DM_REMOTE_DOMAINS定义远程weblogic域的信息,分别定义域类型,域的唯一性标识,该id标识需要与在weblogicserver中的配置名称吻合,否则通信将会失败,关于在weblogic中的相应配置下文将作详细描述.*DM_TDOMAIN定义在DM_LOCAL_DOMAIN中已经说明的本地域和在DM_REMOTE_DOMAINS中已经说明的远程域的具体的通信ip地址以及通信端口,其中NWDEVICE指定tuxedo发布的server通信进程文件所在的路径.*DM_REMOTE_SERVICES定义当前域需要调用远程域的服务名称,本例中的服务作为被调用服务,所以此处可以为空.*DM_LOCAL_SERVICES定义当前域对外发布的tuxedoservice名称,可以通过RNAME重新命名service.在以上NWADDR中指定的端口一定不能是已经被占用的端口,否则通信将失败,之前应该用netstat命令查询得到空闲的端口.保存dm文件并按如下完成编译:dmloadcfdm_filename修改系统环境变量在系统环境变量中增加:exportBDMCONFIG=$HOME/your_path/bdmconfig其中bdmconfig文件为dmloadcfdm_filename编译之后生成的2进制配置文件.编写基于tuxedo的程序以及makefile.说明Tuxedo支持string,carry,view,view32,fml,fml32等数据缓冲区,其中fml32类型相对复杂且比较常用,本例子采用fml32数据缓冲区开发,首先需要编写fml32数据缓冲区的定义文件,包括fml32数据缓冲区各个字段的名称已经长度等等,并将该文件生成相应的c语言.h头文件,在应用程序中需要包含该头文件,这样应用程序中即可以使用fml32数据缓冲区,fml32类型通常在开发数据库应用程序的时候比较常用,以下的例子完成的功能是:根据输入的学生学号从数据库中查询得到该学生的姓名和年龄,其实输入和输出参数采用fml32类型.编写并编译fml32数据缓冲区定义文件定义fml32数据缓冲区文件student_fld文件如下:*base10000#namenumbertypeflagscommentsstudent_id1long-学生学号student_name2string-学生姓名student_age3long-学生年龄student_id等3项就是自定义fml32类型的域字段,其中每一个字段都对应一个number,这些number有一个公共的起始值,通过*base10000定义.定义之后通过mkfldhdr32student_fld编译该文件,之后生成student_fld.h头文件,在应用程序中将引用该文件.编写源程序以及定义表定义t_student表,其中id表示学号,name表示学生姓名,age定义表示姓名.进入oraclesqlplus,键入:createtablet_student(idnumber(10),namevarchar2(20),agenumber(3));源程序文件wtc_jolt.pc(该程序通过pro*c文件访问数据库oracle数据库):#includeatmi.h#includeuserlog.h#includesqlca.h#includefml32.h#includestudent_fld.hEXECORACLEOPTION(RELEASE_CURSOR=YES);#ifdefined(__STDC__)||defined(__cplusplus)tpsvrinit(intargc,char*argv[])#elsetpsvrinit(argc,argv)intargc;char**argv;#endif{EXECSQLBEGINDECLARESECTION;charsConnStr[100];EXECSQLENDDECLARESECTION;argc=argc;argv=argv;memset(sConnStr,0x00,sizeof(sConnStr));strcpy(sConnStr,“数据库连接串”);EXECSQLConnect:sConnStr;if(sqlca.sqlcode){userlog(连接数据库失败,错误号码:%d,详细原因:%s,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);return-1;}}#ifdef__cplusplusexternC#endifvoid#ifdefined(__STDC__)||defined(__cplusplus)fml32_test(TPSVCINFO*rqst)#elsefml32_test(rqst)TPSVCINFO*rqst;#endif{FBFR32*recebuf=NULL;FBFR32*sendbuf=NULL;FLDLEN32recebuflen=0;EXECSQLBEGINDECLARESECTION;longlStudentId=0;charsName[15]=;longlAge=0;EXECSQLENDDECLARESECTION;recebuf=(FBFR32*)rqst-data;if((sendbuf=(FBFR32*)tpalloc(FML32,NULL,1024))==NULL){tpterm();exit(-1);}recebuflen=0;Fget32(recebuf,student_id,0,(char*)&lStudentId,&recebuflen);EXECSQLSelectage,nameInto:lAge,:sNameFromt_studentWherestudent_id=:lStudentId;if(sqlca.sqlcode){userlog(查询失败,code=%d,detail=%s,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);exit(-2);}Fchg32(sendbuf,student_age,0,(char*)&lAge,0);Fchg32(sendbuf,student_name,0,sName,0);tpreturn(TPSUCCESS,0,(char*)sendbuf,0,0);}编写makefile文件.SUF
本文标题:通过wtc、jolt进行tuxedo与weblogic通信开发
链接地址:https://www.777doc.com/doc-323548 .html