因为业务需求,需要对接某部门的Tuxedo数据接口,但是那边提供的技术支持很少,Tuxedo相关资料网上不是很完善,以下是个人对Java调用Tuxedo相关整合,为方便个人和大家学习,不完善之处大家多多包涵,错误之处请指出!
在合适的位置上传Tuxedo,将传入的Tuxedo版本进行安装,步骤如下:
安装成功过后,Oracle自带有很多例子,大家可以根据自己的需求自己选择,例子在samples目录下。这里选择简单的sampapp进行简单的连通性测试。
环境配置:
# Tuxedo
TUXDIR=/usr/local/tuxedo/tuxedo12.1.1.0; export TUXDIR
JVMLIBS=$JAVA_HOME/lib/amd64/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR
TUXCONFIG=/usr/local/tuxedo/tuxedo12.1.1.0/samples/atmi/myapp/tuxconfig; export TUXCONFIG #tuxconfig配置
CLASSPATH=:$TUXDIR/udataobj/jolt/joltadmin.jar::$TUXDIR/udataobj/jolt/jolt.jar; export CLASSPATH #jolt配置
#以上包含jolt服务端配置和例子运行所需tuxconfig配置
复制一份oracle自带例子simpapp并命名为myapp,切换目录到myapp,打开文件ubbsimple进行ubb配置(可自行根据例子里面ubbsimple<>括号中提示进行配置)。注意,自行配置的,需要将括号中的提示内容全部替换!!
# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.7 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the items with the appropriate values.
*RESOURCES
IPCKEY 123457 #任意填写
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 900
MAXSERVERS 10
MAXSERVICES 20
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="/usr/local/tuxedo/tuxedo12.1.1.0/samples/atmi/myapp"
TUXCONFIG="/usr/local/tuxedo/tuxedo12.1.1.0/samples/atmi/myapp/tuxconfig" #与.bash_profile相同
TUXDIR="/usr/local/tuxedo/tuxedo12.1.1.0"
MAXWSCLIENTS=5
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
"localhost.localdomain" LMID=simple #这里主机名为hostname命令显示的
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
JSLGRP LMID=simple GRPNO=2 #LMID与上面相同,下同
JREPGRP LMID=simple GRPNO=3
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
JSL SRVGRP=JSLGRP SRVID=755
CLOPT="-A -- -n //192.168.78.11:30000 -m 5 -M 10 -x 5"
JREPSVR SRVGRP=JREPGRP SRVID=302
CLOPT="-A -- -W -P /usr/local/tuxedo/tuxedo12.1.1.0/udataobj/jolt/repository/jrepository"
*SERVICES
TOUPPER
#以上包含当前例子jolt服务端配置
ubbsimple配置完成过后,进行当前TUXCONFIG环境配置(前面环境已经配置,大家可根据情况自行修改或自己添加)。注意,修改后一定要重新source使环境生效!!!!
在myapp目录下:
服务启动后,可进入tmadmin的监管环境: tmadmin
连通性的测试可通过直接调用客户端进行:simpcl hi
前面我们完整的搭建了一个Tuxedo服务端,这里只介绍jolt的方式调用我们的服务,废话不多说,下面我们开始Tuxedo相关jolt服务的配置和导出以及java端的调用。
java通过jolt连接到Tuxedo需要在ubbsimple中开启两个进程:JSL和JREPSVR。
JSL:监听并分发客户端的请求
JREPSVR:配置Tuxedo导出给jolt客户端的服务
ubbsimple具体配置如下(上面ubb已经配置过了的请略过):
JSLGRP LMID=simple GRPNO=2 #这里LMID要与上面LMID相同
JREPGRP LMID=simple GRPNO=3
JSL SRVGRP=JSLGRP SRVID=755
CLOPT="-A -- -n //192.168.78.11:30000 -m 5 -M 10 -x 5" #这里地址就是jolt调用地址
JREPSVR SRVGRP=JREPGRP SRVID=302
CLOPT="-A -- -W -P /usr/local/tuxedo/tuxedo12.1.1.0/udataobj/jolt/repository/jrepository" #安装目录下/udataobj/jolt/repository/jrepository
配置好ubbsimple过后,为使Jolt客户端能够查找到需要的服务,必须将需要的Tuxedo服务导出到Jolt注册表中,即上面提到的jrepository文件。服务的导出既可在Tuxedo服务器上进行,也可在其他客户端机器上进行。
相关配置如下:
CLASSPATH=:$TUXDIR/udataobj/jolt/joltadmin.jar::$TUXDIR/udataobj/jolt/jolt.jar; export CLASSPATH
#这两个包在/udataobj/jolt下可以找到
上面配置完成后,再新建一个接口配置文件simpapp.rep,并添加如下内容:
service=TOUPPER #Tuxedo服务名称
inbuf=FML
outbuf=FML
export=true #是否导出
param=LU
type=string
access=inout
param=TUXEDOTEST #传入传出参数的名字
type=string #参数类型
access=inout #参数的访问类型
#具体的参数说明请自行百度
内容添加完成过后,我们的配置工作,差不多就完成了,执行一下命令导出:
java bea.jolt.admin.jbld //192.168.78.11:30000 simpapp.rep #这里的地址和IP要和ubbsimple文件中配置的JSL进程的CLOPT字段中的地址一致。
导出成功示例:
Line[1]: Service [TOUPPER]: Inserted
Previous Package [PKG/aaa]: Deleted
Package [PKG/aaa]: Inserted
BULK LOAD SUMMARY
-----------------
Bulk load file name: simpapp.rep
Services Defined in file: 1
Services Inserted: 1
Services Not Replaced: 0
Services Errors: 0
Previous Bulk Services Deleted: 0
#这是首次导出的示例,再次导出有一点点区别
完成上面所有的配置,jolt服务端大功告成,我们可一通过java开始调用了~
首先需要三个jar包:joltjse.jar,jolt.jar,joltwls.jar,这三个包在安装目录下 udataobj/jolt可以找到,没有安装的请自行查找相关资源。
这边项目jar包是通过maven管理的,所以需要先将包导入项目,再交给maven管理。
具体步骤如下:
#添加第三方依赖以便打包
com.jolt
jolt
1.0
system
${basedir}/src/main/resources/lib/jolt.jar
com.jolt
joltjse
1.0
system
${basedir}/src/main/resources/lib/joltjse.jar
com.jolt
joltwls
1.0
system
${basedir}/src/main/resources/lib/joltwls.jar
#并修改spring boot的作用域
org.springframework.boot
spring-boot-maven-plugin
true
上面配置完成过后,就只有java通过jolt调用Tuxedo最后一步了,逻辑代码的书写,直接上代码:
JoltSession session;
JoltSessionAttributes attr;
JoltRemoteService service;
JoltMessage message = null;
String userName = null;
String userPassword = null;
String appPassword = null;
String userRole = null;
attr = new JoltSessionAttributes();
attr.setString(JoltSessionAttributes.APPADDRESS,
"//192.168.78.11:30000"); #调用地址
attr.setInt(JoltSessionAttributes.IDLETIMEOUT, 300);
session = new JoltSession(attr, userName, userRole, userPassword,
appPassword);
service = new JoltRemoteService("TOUPPER", session);
service.setString("Test", "a boy");
try {
service.call(null);
message = service.getOutputs();
service.clear();
session.endSession();
} catch (Exception e) {
}
return message;
#根据自己的情况修改
以上就是全部的流程,因为个人没有对Tuxedo这个中间件进行深入研究,所以文章中有纰漏和错误在所难免,只希望文章对大家有些许帮助!