【转帖】讨论一下Tuxedo的封装问题_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4490 | 回复: 0   主题: 【转帖】讨论一下Tuxedo的封装问题        下一篇 
shixisheng
注册用户
等级:上尉
经验:646
发帖:52
精华:0
注册:2013-5-27
状态:离线
发送短消息息给shixisheng 加好友    发送短消息息给shixisheng 发消息
发表于: IP:您无权察看 2013-5-30 9:36:27 | [全部帖] [楼主帖] 楼主

我曾经做过一次封装,可以实现同时兼容两层结构和三层结构,程序员完全可以不知道有tuxedo的存在。我使用的一些基本技巧是:
  1、高度封装Txuedo的服务头(如同main函数的那个东西),在服务头中调用业务逻辑(Pro*C函数);
  2、高度封装Txuedo客户端,主要是建立连接、写输入参数到输入缓冲区,从输出缓冲区读返回结果‘
  3、fml的Field采用无具体含义的,预定义100个,全部都是String类型,由封装程序顺序选择Field使用,并转换成string;
  4、定义一个Tuxedo用的灵活性非常好的输入/输出参数用的结构(这一点最重要),要能够与业务逻辑的参数互相转换。
  5、一定要做一个动态方法4的服务,这个用处很多啊,虽然让客户端写SQL并不是真正的三层结构,但实际中不可避免。

  抛砖引玉,欢迎各位高手朝我砸砖头,并与我详细交流设计思想和源代码。
要实现1、2、4,关键是4。
    只要定义好输入/输出参数用的结构,其它问题迎刃而解。我使用了C++STL的vector来做一个二维向量。

    假设有一个业务逻辑叫Add(x, y, z),实现z = x + y,输入参数是x和y,输出参数是z.
    我吧tuxedo的逻辑封装成这样:

1、在Client端编写一个和业务逻辑函数完全相同定义的函数,它完成:
   a) x,y到tuxedo用的输入参数转换;
   b) 调用tuxedo客户端封装函数;
   c) tuxedo用的输出参数转换成z;

2、tuxedo客户端封装函数,它完成:
   a) connect到tuxedo服务器
   b) 将输入参数写到FML输入缓冲区
   c) 调用tpcall
   d) 从FML输出缓冲区读到输出参数
   e) 断连(tpterm)

3、在tuxedo的server编写服务头,它完成:
   a) 从FML输入缓冲区读输入参数
   b) 调用业务逻辑封装函数CallAdd
   c) 将返回参数写入FML输出缓冲区

4、编写一个业务逻辑封装函数CallAdd,它完成:
   a) 将输入参数转换为x,y
   b) 调用业务逻辑Add(x,y,z)
   c) 将z转换为输出参数

5、编写业务逻辑函数Add(x,y,z)

  上述步骤中,与tuxedo有关的步骤为2、3,是完全可以只写一次的,封装好了就不要再改变了。而第1、4步则是做简单的参数转换,任何人都可以完成。当然第5步得你自己做了,呵呵...

  如果你愿意把所有的服务的输入输出参数都采用相同的参数结构,就可以省略第1、4步了。




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