[转帖]在文件传输中TUXEDO的应用分析_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4073 | 回复: 0   主题: [转帖]在文件传输中TUXEDO的应用分析        下一篇 
鲲鹏展翅
注册用户
等级:少校
经验:1148
发帖:79
精华:9
注册:2012-11-19
状态:离线
发送短消息息给鲲鹏展翅 加好友    发送短消息息给鲲鹏展翅 发消息
发表于: IP:您无权察看 2012-11-20 14:13:46 | [全部帖] [楼主帖] 楼主

1 引言

近几年来,以交易中间件为框架基础的三层客户机/服务器模式已被广泛证实为建立开放式关键业务应用系统的最佳环境。

TUXEDO 是美国BEA公司的一种交易中间件产品,它在银行、电信、邮政、金融证券等大规模关键事务处理领域中有着广泛的应用。它能够在C/S环境下整合各种异构平台,通过联机事务处理机制,保证交易的完整性和数据的一致性。BEA TUXEDO是在企业、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。

BEA TUXEDO 采用三层结构的客户机/服务器模式组件软件模型,该结构利用交易中间件将应用的业务逻辑、表示逻辑和数据分为三个不同的处理层:客户为第一表示逻辑层,实现用户交互和数据表示,第二层的逻辑业务层为应用的主体,负责业务的逻辑处理,第三层数据层负责对数据库的检索、读取和更新等操作。交易中间件作为构造三层结构应用系统的基础平台,提供了两个主要功能:负责客户机和服务器间的联接和通讯;提供一个三层结构应用开发和运行的平台。由此可见,交易中间件提供了一个基础的框架去帮助你建立、运行和管理一个三层客户机/服务器模式的应用,使你不需要从零做起,大大缩短了应用开发的时间,提高了应用开发的成功率。

本文以应用TUXEDO的同步调用tpcall方式和FML编程方式为例,介绍了在Windows客户端和Unix服务器之间完成文件传输的方法。客户端调用VC++制作的传输文件的tuxedo动态链接库,实现Windows客户端与Unix服务器端传输文件(包括上传和下载文件两种方式)的实现方法。

2 客户端应用TUXEDO实现文件传输方法

在客户端,首先设置客户端与服务器端在文件传输中文件块的大小、文件的块标识等基本信息,将字节数比较��的文件分为很多小块,利用TUXEDO的同步调用 tpcall方式循环调用后台的文件处理服务,将字节数较大的文件按着块的大小分多次传输到UNIX后台。下面以下载文件为例讲解使用tuxedo同步调用tpcall方式完成文件传输的例子。

首先利用TUXEDO的tpalloc申请需要使用的发送和接收缓存,使用Fchg32函数在缓存中放入服务器端需要的域值:文件块的大小、文件的标识等基本信息。

SndBuf = (FBFR32 *)tpalloc("FML32", NULL, 1024); /* 申请发送的缓存 */

iRet = Fchg32(SndBuf,BLOCKSIZE,0,(char *)&lBlockSize,0); /* 设置文件块的大小 */

设置完毕后,开始使用同步tpcall调用UNIX后台文件处理FTPSVR服务。

/* 客户端同步调用UNIX平台文件处理服务*/

iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);

iRet = Fget32(RcvBuf, FILELEN, 0, (char *)&lFileLen, 0);/* 接收文件长度*/

接收文件并将第一块数据写入文件

iRet = Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lFileDataLen);

fp = fopen(pszCltFileName, "wb+"); /* 创建文件*/

lBlkLen = fwrite(pszFileBuf,1,lFileDataLen,fp); /* 将接收第一块数据写入文件*/

同时计算需要调用下载文件服务的次数,多次调用文件服务,将后续文件下载到客户端。

lBlkNum = (lFileLen -1)/lBlockSize +1 ;

for(i=2; i<lBlkNum+1;i++){

……

iRet = tpcall("FTPSVR",(char *)SndBuf,0L,(char **)&RcvBuf,(long *)&len,0L);

Fget32(RcvBuf, FILEDATA, 0, pszFileBuf, (FLDLEN32 *)&lBlockSize);

lBlkLen = fwrite(pszFileBuf, 1, lBlockSize, fp);

……




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论