tuxedo教程
- 格式:doc
- 大小:7.35 MB
- 文档页数:40
目录第一章开发BEA Tuxedo应用程序 (4)§1.1 开发前的思考 (4)§1.2 创建BEA Tuxedo的客户程序 (4)客户程序的任务 (4)§1.3 创建的服务程序 (5)服务程序的任务 (5)§1.4 在应用程序中使用类型缓冲区 (5)§1.5 在BEA Tuxedo应用程序中使用消息范例 (6)1.BEA Tuxedo系统提供多种通信模式 (6)2. 同步的Request/Response模式 (6)3.异步Request/Response模式 (7)4.使用嵌套调用 (7)5.使用调用转发 (8)6.会话通信 (8)7.主动消息通告 (9)8.基于事件的通信 (10)9.基于队列的通信 (11)10.使用事务 (12)第二章一个简单的Tuxedo应用程序simpapp (13)准备simpapp的文件和资源 (13)1.复制simpapp例子的相关文件 (13)2.检查并编译客户程序 (14)3.检查并编译服务程序 (16)4.编辑并加配置文件 (17)5.启动应用程序 (18)6.如何执行运行时应用程序 (18)7.如何监视运行时应用程序 (19)8.如何关闭应用程序 (19)第三章一个完整的Tuxedo应用程序bankapp (21)§3.1 熟悉bankapp的文件 (21)§3.2 检查bankapp的客户程序 (22)1.bankclt.c文件 (22)2.bankapp中怎样使用ud(1) (24)3.一个请求/响应客户:audio.c (24)4.一个会话客户:auditcon.c (26)5.一个监视事件的客户bankmgr.c (26)§3.3 检查bankapp的服务器和服务 (26)1.bankapp的请求/响应服务器 (26)2.bankapp的会话服务器 (27)3.bankapp的服务 (27)4.集成到服务器中的应用 (31)5.服务编码的可选方法 (31)6.准备bankapp的文件和资源 (31)7.运行bankapp (39)第一章开发BEA Tuxedo应用程序§1.1 开发前的思考在开发BEA Tuxedo应用程序之前,你需要先搞清楚一系列和设计开发相关的概念,如识别什么是客户机,有哪些方法可以从外界收集数据并提交服务器进行业务处理;识别什么是服务器,哪些程序包容了可以处理客户机输入的商业逻辑;识别什么是类型缓冲区,客户程序在向其这程序发送数据前如何分配内存区域;什么是BEA Tuxedo的消息范例等。
最后你还要弄明白客户程序是通过调用ATMI库来访问BEA Tuxedo系统的。
§1.2 创建BEA Tuxedo的客户程序创建BEA Tuxedo的客户程序与在C和C++编程语言中创建其它应用程序一样,BEA Tuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。
除了C语言接口外,BEA Tuxedo还提供了COBOL接口。
客户程序的任务客户程序一般执行如下任务:⑪.调用tpchkauth()决定加入一个应用程序所需的安全级别。
可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计。
这些可以根据你的需求进行选择;⑫.调用tpinit()来连接到一个BEA Tuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序;⑬.执行服务请求;⑭.调用tpterm()来断开和BEA Tuxedo应用程序的连接。
§1.3 创建的服务程序尽管开发者使用ATMI编程接口来创建BEA Tuxedo客户程序和服务程序,但服务程序不全部由开发者来编写,开发者只需写一些称为服务的商业函数,然后和BEA Tuxedo 的一些二进制程序联编成一个可执行的服务程序。
BEA Tuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。
一个典型的BEA Tuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。
服务程序的任务⑪.在BEA Tuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用;⑫.在BEA Tuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料;⑬.BEA Tuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;⑭.服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;§1.4 在应用程序中使用类型缓冲区在Bea Tuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,Bea Tuxedo系统提供了大量的类型缓冲区来供开发者使用。
所有类型缓冲区都必须通过Bea Tuxedo的tpalloc(), tprealloc(), tpfree()这些ATMI来分配回收,它们都有特定的头部。
统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。
§1.5 在BEA Tuxedo应用程序中使用消息范例1.BEA Tuxedo系统提供多种通信模式⑪.同步Request/Response模式;⑫.异步Request/Response模式;⑬.嵌套调用;⑭.调用转发;⑮.会话通信;⑯.主动消息通告;⑰.基于事件的通信;⑱.基于队列的通信;⑲.使用事务。
2. 同步的Request/Response模式要进行同步调用,Bea Tuxedo客户程序使用ATMI函数tpcall()把一个请求送到服务程序,它不是通过名字来调用服务程序的,而是通过特定的服务来完成。
客户程序要等到服务程序作出响应后才处理后面的工作,也就是说,它在收到服务程序的响应之前一直处于阻塞状态。
3.异步Request/Response模式要进行异步调用,客户程序必须调用两个ATMI函数:tpacall(3c)函数,用于请求一个服务;tpgetrply(3c)函数,用于取得服务程序的响应。
客户程序在请求和响应之间要完成特定任务时,可以采用这种模式。
4.使用嵌套调用一个服务可以充当BEA Tuxedo客户程序,去调用其它BEA Tuxedo服务,换句话说,你请求的服务需要调用其它服务才能处理请求。
BEA Tuxedo客户程序调用了服务X,等待它的响应,服务X调用服务Y后也处于等待状态,当服务X得到响应后,再给客户程序一个响应,这种机制的特点是效率高。
5.使用调用转发在嵌套服务中,最里层嵌套服务可以直接给客户程序一个响应,没有必要按照调用栈逐级返回,这就使其它嵌套服务可以处理其它请求,当第一个服务是一个分发代理时,这种模式是非常有用的。
在嵌套调用中,被客户调用的服务X使用tpforward(3c)函数把请求传给服务Y,服务X没有tpreturn(3c)函数。
客户程序不用管请求是由谁来完成的,因此,转发调用对客户程序是透明的。
6.会话通信会话通信适合于有多个缓冲区需要以有状态的方式在BEA Tuxedo客户程序和服务之间传递的场合。
恰当地使用BEA Tuxedo的会话,因为参与会话的服务器在会话结束之前是不可用的。
要完成会话通信,你的代码需要遵循如下步骤:⑪.客户程序使用tpconnect()启动会话;⑫.客户程序和服务使用tpsend()和tprecv()函数进行数据交换,一个特殊的标记指示着当前由哪一方来控制着会话;⑬.当服务程序调用tpreturn()或tpdiscon()函数时,会话正常终止。
7.主动消息通告要处理服务器的消息通知,客户程序必须使用tpsetunsol()函数来创建一个消息处理器,要发送主动消息,BEA Tuxedo客户程序或服务程序可以调用tpnotify()来把消息传递给单个客户程序,也可以通过tpbroadcast()函数来把消息同时广播给多个客户程序。
当客户程序收到主动消息后,BEA Tuxedo系统调用客户程序的主动消息处理器来处理。
在一个基于信号系统中,客户程序没有必要处理所有的主动消息,然而,在一个非信号系统中,客户程序必须使用tpchkunsol()函数来检查主动消息。
当客户程序调用一个服务请求时,tpchkunsol()被隐含地调用。
在调用tpnotify()时,如果你设置了tpack标记位,你将会收到一个请求通知。
8.基于事件的通信在基于事件的通信中,事件可以被发送到应用程序队列、LOG文件和系统命令。
当BEA Tuxedo服务或客户程序调用tppost()函数时,任何一个BEA Tuxedo客户程序都可以使用tpsubscribe()函数订阅用户自定义事件;当BEA Tuxedo系统检测事件时,客户程序也可以订阅系统定义事件。
当一个服务器死了,.SysServerDied事件就会被发布,它由BEA Tuxedo系统自动完成,不需要应用服务器干预。
9.基于队列的通信为了实现了和/Q系统的接口,BEA Tuxedo客户程序使用两个ATMI函数,使用tpenqueue()把消息放入队列空间,使用tpdequeue()来把消息从队列空间中取走。
下面演示了点对点异步消息机制。
一个客户程序使用tpenqueue()函数将消息传给服务,响应队列和失败队列的名字可以作为参数包含在tpenqueue()调用中,由于在队列中的数据是持续的,因此,所有和排队消息相关的响应消息和失败消息都可以从相应的响应队列和失败队列中取得。
客户程序可以使用缺省的排队顺利,即按放放顺利排队,先进先出;也可以改变排队规则,如把一个消息放在队列开始,或放到另一个队列前面。
Tpenqueue()调用把消息送到TMQUEUE服务器,并被放入固定存储体中进行排队,然后给客户程序发送一个通知消息。
队列管理器给消息分配一个标识符,使用它可以随时将消息踢出队列,也可以用于tpenqueue()中,指示将新消息紧挨着标识符标识的消息。
在消息出队时,要出队消息的事务必须成功地提交。
客户程序使用tpdequeue()来使消息出队。
下面演示了消息被转发到另一个服务器。
客户程序发出一个消息,要调用服务器上的X服务,X服务接收消息后,处理消息中的指令,然后把响应放入队列空间,客户程序再从队列空间中取出。