一种Java调用Tuxedo服务的方法
摘要:在以Tuxedo为中间件的企业信息系统中,为满足分布式系统的应用,需要解决在Java程序中调用Tuxedo服务的难题,给出了一种免费的、用Visual C++2、Visual Basic3、Jacob组件和Java语言结合编程的方法,详细地解说了方法实现的原理及关键程序代码。 关键词:Java;Tuxedo服务;方法
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)17-31403-02
A kind Of Method That Java Transfers Tuxedo Service DENG Zi-yun,CHEN Yu-lin,YANG Xiao-feng (Hunan Modern Logistics College, Changsha 410000,China)
Abstract:In the enterprise information system that take Tuxedo as in the middleware, for satisfies the distributional system application, needs to solve the difficult problem in the Java program transfers the Tuxedo service, the article produced one kind free, with Visual C++, Visual Basic, the Jacob module and the Java language union programming method, detailed explained the method realization principle and the essential program code.
Key words:Java;Tuxedo service;Method 1 引言
Tuxedo是一个标准的交易中间件,在金融、电信、社保等行业的信息系统应用广泛,以其为中心构建的应用系统采用三层体系结构,由Tuxedo完成数据的转发、事务处理、安全性控制、网络通信等功能。Java技术有各行各业的信息系统正被广泛应用,在许多用Java技术构建应用级程序的系统中需要在程序中调用Tuxedo的服务以完成数据的路由分发、数据存取等分布式环境下的功能。
2 Tuxedo服务
Tuxedo中间件以一个个的service来向连接它的各种系统提供各种功能的支持。它可以是多个Tuxedo中间件集成的域,在各个中间件服务器上装载有多个server(经过编译的可执行文件),server再分为更细的service。 Tuxedo的service有两种调用接口:ATMI和CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)。在Tuxedo以往的版本中都支持ATMI接口,基于ATMI接口调用service的客户端可以用多种程序语
言编写,如Delphi、VC、C、PowerBuilder等,而CORBA由于通信协议的复杂性和效率不高很少在工程应用场合中使用。
service实际上就是一个个的用C语言或Pascal语言编写的函数,可以带有参数,其中指针及结构体的参数比较常用,用C或VC编写的客户端程序可以很方便地使用这些数据类型。调用Tuxedo的服务时必须考虑参数传递的问题,而VB、Java、PowerBuilder这些语言并不支持指针这种数据类型。
3 调用方法原理
如下图所示是一种Java调用Tuxedo服务的方法原理示意图。
图1 调用方法原理示意图
首先用VC编写DLL(Dynamic Link Library,动态链接库)。Tuxedo提供的ATMI接口DLL用C语言编写的,与VC可无缝集成;再用VB编写COM(Component Object Model,组件对象模型)组件;在Java中通过Jacob组件来调用COM组件来实现调用Tuxedo服务;Jacob是一种基于JNI(Java Native Interface,Java本地接口)技术的开源的在Java中调用COM组件的Java组件。这种方法的优势如下?s (1)屏蔽了VB语言及Java语言不支持指针数据类型
的问题;
(2)用VC和VB编写的组件经过编译,有较好的执行效率;
(3)组件式开发,封闭了调用Tuxedo服务的许多细节,在Java语言中只需声明对象,并执行对象的方法。
4 调用方法的实现
4.1 VC DLL实现
VC支持三种DLL?sNon-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension Dll(扩展DLL)。Non-MFC DLL指的是不用MFC的类库结构,直接用C语言编写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用,Tuxedo的接口DLL就是这种,这里要编写的也就是这种。既然Tuxedo原有的调用接口DLL和要编写的DLL都是Non-MFC Dll,为什么不直接调用接口DLL呢?原因有两个:
(1)原有接口中的函数参数有指针和结构体数据类型,在VB和ASP程序不支持指针数据类型,传递结构体数据数据不易实现;
(2)原有接口函数的声明的调用约定为_cdecl,这种方式使得在VB程序在调用这些函数时参数的传递不正确,当
有多个参数时在内存中的堆栈入栈的方向不同而导致内存出错,但在VC程序中可以正确使用。
所以需在VC中编写DLL,声明调用Tuxedo接口函数的方法为_stdcall,在VB中即可正确使用,传递参数时只采用String及Long这种数据类型,防止参数传递的错误。编写DLL需在VC中用 Win32 Dynamic-Link Library方式新建一个Non-MFC Dll工程,主CPP文件中编写的调用服务的方法源代码如下?s
extern \
vcCallTuxedoServiceToUpper(char *inBuff,char *outBuff) //inBuff为输入字符串,outBuff为返回字符串 {char *sendBuff,*receiveBuff; long sendLen,recieveLen; int iRet; //初始化连接
if(tpinit((TPINIT *)NULL)==-1) return -1;
//给sendBuff及receiveBuff申请内存空间 sendLen=strlen(inBuff); recieveLen=sendLen; if((sendBuff=(char
*)tpalloc(\
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新幼儿教育一种Java调用Tuxedo服务的方法 全文阅读和word下载服务。
相关推荐: