TUXEDO服务编程
只是关于服务器端编程,请配合上一个资源也就是tuxedo教程一起学习Val:定义该 SERVICE的返回值:可以是:TPSLCCESS: CLIENT端的 tpgetrply()或tpea110会返回一个非0值。如果是庄会话方式进行通讯,则会产生 TPEV SVCSUCO事件TPFAIL: CLIENT端的 tpgetrply(或tpca11(会返回-1。如果是用 CONVERSATI0N进行通讯,则会产生 TPEV SVCFAIT事件。TPEXIT:和TAIL一样,并且该 SERVICE所在的 SERVER进程会自动退出。Rcode:可以给亡赋值, CLIEN端可以用 tpurcodeo取到该值。Data:返回给 CLIENT端的缓冲区Len:Data缓冲区的长度,只有该缓冲区类型为 CARRAY时,才需要指定。F1ags:现在没用,设为0OpinioTpalloc(TOUPPER(TPSVCINFO *rast)Ipcallo, tpacall(tprcturnoPteroTUXEDO中,服务可被客户端调用,也可被另一个服务调用,同时 TUXEDO提供另一种调用方式-管道方式:服务进程在处埋客广的诮求时,不把结果返回给吝广进程,而是把处埋过的结果进一步转发给后续的其他服务进程,由其他服务进程接着处理,自己继续完成另外的服务请求,被转发的服务请求的结果斤续服务进程直接返冋给客户进程,从而为編程和应用提供种更加灵活的机制。如图所示,这种调用方式是通过 Ipforward()函数来完成的pinitoTSVCI(TPSVCINFO *rgst)LpforwaId(svc 2)TpallocoiTpcalloSVC2(TPSVCTNFO * rgsttpreturnOPteroForward()函数void tpforward (char *service, char *dada, long len, long flags)参数service:要调用的 SERVICE的名字data:传送给该 SERVICE的输入缓冲区len:data缓冲区的长度lags:现在没用,设为0Tpsvrinit()函数Int tpsvrinit(int argt, char sear gv)描还:在 SERVER启动时,它将自动调用函数: tpsvrinit( int arg,char米argv[])如果该 SERVER所在的GRP配置了连接数据库的接口,那么在默认情况下,该 SERVICEA将自动调用 TPOPEN(),建立与数据库的连接。参数: int argo,char*aV参数的含义与main函数的参数含义一样。返回值:执行成功返回0,失败返回-1tpsvrdone0函数void tpsvrdone o描运: tpdone()做一些清除L作,如断开与数据的连接,从系统的 BULL ITON BOARD中清除与该 SERVER对应的登记项。参数:无返回值:无SERVER端程序的编译用 buildservel编译 SERVER端程序,υ uildserver将调用C编译器对£RVER端程序进行编译。其格式如下:buildserver o executableL-s service2, service: func]\L-f source/ob ect].\L-1 object」..L-r resource manager说明:ⅴ输出详细的编译信息0 executable- SERVER的名字-1 executable-在连接 TUXEDO的库之后,还要连接的库文件- s servIce-指定将要发布的SR"CE的名称f source/ ob ject-一个.c或*.0文件,它可以包含在该 SERVER中的 SERVICE调用到的函数r resource Manage-RM的名称例子buildserver-r ORACLE XA-S DEMO-O TEST-f inito-1 my lib.soSERVER端的编程例子SERⅤER端的编程例子在本书的中很多,在此不再举例SERVICE的划分原则:信息隐藏原则:定义服务以及从客户到服务的数据流尽可能独立于服务的实现。服务程序中不要嵌入客户机有关数据采集技术等信息。反之,客户机也不应该意识到服务器程序的实现细节,如数据库结构以及记录格式·分层服务原则:尽「能每个服务只完成一项任务,而不是多项任。不要在一个服务函数中包含过多或过少的功能。努力定义一组简单服务来实现业务的基本功能,通过这组服务的组合,可以实现复杂的应用服务功能。●业务对象原则:围绕业务对象设计并使用服务功能。以一组相关的对象或公共对象将服务组织成为服务进程( SERVER)合理处理 SERVICE与 SERVER的关系如果从管理维护方面看,一个 SERVICE对应一个 SERVER是最简单的方式。但这会增加SERVER的数量,使TKF系统对系统的IPC资源要求增大(使系统的性能降低),或超过(使IUXD0系统无法启动成功)。所以需要批多^ SERVICE放到个 SERVER中。以降低 TUXEDO对系统1PC资源的需求。下面是一些把 SERVICE放在一起的原贝1.有互相调用的SEⅥICE不要放到同一个SERV中,以免引起死锁现象。2.执行时间相近的 SERVICE可放到同一个 SERVER中。3.同一个 SERVER中的 SERVICE最好有相同的服务优先级,如果不同,最低的那个的请求可能要很长时间才得到处理4.一个 SERVER中不要有太多的 SERVICE。5.把多资源要求相近的 SERVICE放到同一个 SERVER中6.可根据业务规则把 SERVICE放到同一个 SERVER中7.对一些矩用率较高的(如:银行的取款对应的 SERVICE)应单独放在一个 SERVER中,并采用MSSQ方式。不要把它们与其他的 SERVICE放在同一个 SERVER中。在一个 SERVICE中调用另一个 SERVICE在 TUXEDI中,一个 SERVICE也可以当作一个客户端,调用其他的 SERVICE,它的调用方式与普通的客户端调用 TUXED0服务器上的 SERVICE是一样的。例如:在下面的程序中, SERVICE:SVC1屮调用 SERVICE:SWC2。SVCI (TPSVCINFO * rgst)long rev er.char send bulong retif(sendbuf=(char *) tpalloc( StRING, NULL, 1024))=- NULLuserlog tpalloc o fail: %s\n", tostrerror(tperrno)tpreturn(TPFAIL, 0. nULLrct- tpcall(svC2,(char *)scndbuf, 0, (char **) sendbuf, &rcvlcn, (1cif (retuserlog("tpcall (svC2)fail: %s\n", tpstrerror(tperrno)tpreturn(TPFAlL, 0, NULL OL, 0)tpreturn( TPSUCCESS, 0, sendbuf, OL, 0)
用户评论