java调用tuxedo中间件_初探TUXEDO中间件

TUXEDO:Transaction for UNIX has been Extended for Distributed Operation,即被分布式操作扩展之后的UNIX事务系统

个人评语:一个让C程序员爽,让JAVA程序员心烦的东西。作为一个中间件最最关键的是它不爽了你不知道它哪里不舒服。

TUXEDO客户端环境变量

安装TUXEDO客户端后使用tuxedo需要下列环境变量,不要采用在程序设置环境变量,血的教训啊,宕机!

TUXDIR=/home/admin/tuxedo10g

export TUXDIR

WSNADDR=//[ip]:[port]

export WSNADDR

WSINTOPPRE71=yes

export WSINTOPPRE71

PATH=$TUXDIR/bin:$PATH:$HOME/bin

export PATH

#找到动态链接库的路径

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib

export LD_LIBRARY_PATH

C编程中的TUXEDO

如果要教程,请去CSDN下载频道下载,我的积分不够了http://download.csdn.net/source/2067895

简单的来说,要用tuxedo编程只需要进行下面的步骤:

1.tpinit();//连接服务器,获取应用上下文

2.tpalloc();//申请用于通讯的空间地址

3.tpcall();//进行SOCKET连接,并同步获取返回信息

4.tpfree();//释放由tpalloc申请的内存地址

5.tpterm();//断开服务器连接

建议看oracle英文原版的函数说明,里面有很多特殊用法、调用注意事项和优化方案.http://download.oracle.com/docs/cd/E13203_01/tuxedo/tux80/atmi/rf3c53.htm

编译TUXEDO的C程序

C程序写好了,当然还需要编译。如果是单纯C语言写的tuxedo客户端,编译的时候只需要libwsc.so,libbuft.so,libgpnet.so,libfml.so,libfml32.so,libengine.so,libdl.so,libpthread.so这些动态库文件在${TUXDIR}/lib目录下,头文件在${TUXDIR}/include目录下。

另外,linux系统还需要链接/usr/lib/libcrypt.a加密静态库

以pbctuxedosend.c文件为例我们的gcc脚本就可以写成

gcc -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -I$TUXDIR/include -c -L${TUXDIR}/lib pbctuxedosend.c

gcc --kill-at -shared -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -I$TUXDIR/include -L$TUXDIR/lib  -lwsc -lbuft -lwsc  -lgpnet -lfml -lfml32 -lengine -ldl -lpthread /usr/lib/libcrypt.a -Wl,-soname,libpbctuxedosend.so.1 -o libpbctuxedosend.so.1.0 pbctuxedosend.o

结果就是得到我们jni调用所需要的动态库文件libpbctuxedosend.so.1.0将它拷贝成libpbctuxedosend.so就得到我们jni调用所需要的动态库。

实例演练C

Pbctuxedosend.c

头文件,必须包含

#include         /* TUXEDO  Header File */

//申请了tpinit结构对象

TPCONTEXT_T  ctxt;

TPINIT *tpinitbuf = (TPINIT* )tpalloc((char*)"TPINIT",NULL,TPINITNEED(0));

//设置为多会话模式

tpinitbuf->flags = TPMULTICONTEXTS;

//加入服务器多会话上下文

tpinit((TPINIT *)tpinitbuf)

//申请通讯用内存地址

sendbuf = (char *) tpalloc("CARRAY",NULL, sendlen+1)

rcvbuf = (char *) tpalloc(“CARRAY”,NULL, sendlen+1)

//使用内存拷贝将发送报文置入发送内存

(void) memcpy(sendbuf,strSendContext,sendlen);

//调用tpcall与服务器进行同步通讯

ret = tpcall(strServiceName, (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, TPNOBLOCK);

//释放资源

tpfree(sendbuf);

tpfree(rcvbuf);

tpfree((char *)tpinitbuf);

//断开连接

tpterm();

(需要C完整源文件请联系我,这边发不了附件,上传不了图像。。。不知道为什么)

实例演练JNI

/**

* 调用封装的Tuxedo库函数类,演示用

* @author jun.lijun

* @version $Id: PbcInvokeTuxedo.java,v 0.1 2010-3-12 下午08:16:02 jun.lijun Exp $

*/

public class PbcInvokeTuxedo {

static {

try {

System.loadLibrary("pbctuxedosend");

} catch (Exception e) {

}

}

public native static byte[] sendByTuxedoTpCall(String wsnaddr, String serviceName,

String sendContext);

}


版权声明:本文为weixin_39711721原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。