Linux下Tuxedo配置以及Java调用Tuxedo

前言

因为业务需求,需要对接某部门的Tuxedo数据接口,但是那边提供的技术支持很少,Tuxedo相关资料网上不是很完善,以下是个人对Java调用Tuxedo相关整合,为方便个人和大家学习,不完善之处大家多多包涵,错误之处请指出!

准备工作


首先去官网[https://www.oracle.com](https://www.oracle.com)下载Tuxedo,这里所用版本:Oracle Tuxedo 12cR1(12.1.1.0),JOLT等调用方式在Oracle收购BEA公司后已经无需licsence,所以可放心使用,11以前版本licsence可自行前往Oracle官网获取。

配置Tuxedo并测试连通性


在合适的位置上传Tuxedo,将传入的Tuxedo版本进行安装,步骤如下:

  1. 输入:tuxedo12110_64_linux_5_x86.bin -i console
  2. Choose Locale…:选择1
  3. PRESS TO CONTINUE: 按ENTER
  4. Please choose the Install Set to be installed by this installer:选择1- Full Install(全安装)
  5. Choose Oracle Home: 选择 2(使用当前路径)
  6. install samples:输入Y
  7. PRESS TO CONTINUE:按ENTER
  8. PRESS TO INSTALL:按ENTER
  9. Configure listen Service:tuxedo(这里设置任意密码)
  10. 是否安装SSL: 选择2
  11. 安装成功

安装成功过后,Oracle自带有很多例子,大家可以根据自己的需求自己选择,例子在samples目录下。这里选择简单的sampapp进行简单的连通性测试。
环境配置:

  1. 将安装目录下tux.env里面的内容copy一下
  2. 选择合适的环境vi .bash_profile(当前用户) vi /etc/profile (所有用户),这里选择当前用户
  3. 将copy的内容粘贴到.bash_profile,保存退出
  4. 命令source .bash_profile使环境生效
  5. 退出重新登陆
# 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 <bracketed> 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目录下:

  1. 编译客户端:buildclient -o simpcl -f simpcl.c
  2. 编译服务端:buildserver -o simpserv -f simpserv.c –s TOUPPER
  3. 加载ubb配置:tmloadcf -y ubbsimple
  4. 启动服务:tmboot -y
  5. 停止服务: tmshutdown -y

服务启动后,可进入tmadmin的监管环境: tmadmin

  1. 查看服务信息:printserver 简写 psr
  2. 查看交易信息:printservice 简写 psc
  3. 查看队列信息: printqueue 简写 pq
  4. 查看客户端信息: printclient 简写 pclt
  5. 查看部分统计信息: bbstats 简写 bbs
  6. 观察某个节点的进程信息: default –m 节点
  7. 查看消息发送状态: printnetwork 简写 pnw
  8. 退出管理模式: quit 简写 q

连通性的测试可通过直接调用客户端进行:simpcl hi

Tuxedo下jolt服务端配置


前面我们完整的搭建了一个Tuxedo服务端,这里只介绍jolt的方式调用我们的服务,废话不多说,下面我们开始Tuxedo相关jolt服务的配置和导出以及java端的调用。

java通过jolt连接到Tuxedo需要在ubbsimple中开启两个进程:JSL和JREPSVR。
JSL:监听并分发客户端的请求
JREPSVR:配置Tuxedo导出给jolt客户端的服务

ubbsimple具体配置如下(上面ubb已经配置过了的请略过):

  1. 在GROUPS下添加:
JSLGRP          LMID=simple   GRPNO=2             #这里LMID要与上面LMID相同
JREPGRP         LMID=simple   GRPNO=3
  1. 在SERVERS下添加:
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服务器上进行,也可在其他客户端机器上进行。

相关配置如下:

  1. 安装JDK并配置环境变量(相关过程略过)
  2. 将jolt.jar和joltadmin.jar添加在上面的环境变量.bash_profile中,如下:
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开始调用了~

java通过jolt调用Tuxedo


首先需要三个jar包:joltjse.jar,jolt.jar,joltwls.jar,这三个包在安装目录下 udataobj/jolt可以找到,没有安装的请自行查找相关资源。
这边项目jar包是通过maven管理的,所以需要先将包导入项目,再交给maven管理。
具体步骤如下:

  1. 首先在resources目录下新建lib包,这个包专门用来放第三方jar包,有的可直接添加
  2. 添加jar包到lib
  3. 添加maven依赖
#添加第三方依赖以便打包

<dependency>
		 	<groupId>com.jolt</groupId>
		    <artifactId>jolt</artifactId>
		    <version>1.0</version>
		    <scope>system</scope>
		    <systemPath>${basedir}/src/main/resources/lib/jolt.jar</systemPath>
</dependency>
<dependency>
		 	<groupId>com.jolt</groupId>
		    <artifactId>joltjse</artifactId>
		    <version>1.0</version>
		    <scope>system</scope>
		    <systemPath>${basedir}/src/main/resources/lib/joltjse.jar</systemPath>
</dependency>
<dependency>
		 	<groupId>com.jolt</groupId>
		    <artifactId>joltwls</artifactId>
		    <version>1.0</version>
		    <scope>system</scope>
		    <systemPath>${basedir}/src/main/resources/lib/joltwls.jar</systemPath>
</dependency>

#并修改spring boot的作用域

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<includeSystemScope>true</includeSystemScope>
				</configuration>
			</plugin>
		</plugins>
	</build>

上面配置完成过后,就只有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这个中间件进行深入研究,所以文章中有纰漏和错误在所难免,只希望文章对大家有些许帮助!

发布了7 篇原创文章 · 获赞 1 · 访问量 401

猜你喜欢

转载自blog.csdn.net/qq_35427539/article/details/88633841