Oracle Jolt是访问Tuxedo服务的java组件,专门给java使用,和WTC不同,jolt不依赖weblogic,可以很容易的集成进java程序里。
环境
操作系统:Linux 2.6.35-22-generic
计算机名:jim-laptop //注意大小写
安装过程就不提了,下面只说要点
1.ubb文件内容
# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.5 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace theitems with the appropriate values.
*RESOURCES
IPCKEY 123456
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 150
MAXSERVERS 75
MAXSERVICES 200
MODEL SHM
LDBAL N
#SECURITY APP_PW
SECURITY NONE
#SECURITY USER_AUTH
#AUTHSVC WSL
*MACHINES
DEFAULT:
APPDIR="/home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1/samples/atmi/simpapp"
TUXCONFIG="/home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1/samples/atmi/simpapp/tuxconfig"
TUXDIR="/home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1"
ULOGPFX="/home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1/samples/atmi/simpapp/TLOG"
MAXWSCLIENTS = 50
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
"jim-laptop" LMID=simple
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
GROUP2
LMID=simple GRPNO=3 OPENINFO=NONE
WSGRP
LMID=simple GRPNO=2
#JSLGRP LMID=simple GRPNO=201
#JREPGRP LMID=simple GRPNO=202
*SERVERS
DEFAULT:
CLOPT="-A"
simpserv SRVGRP=GROUP1 SRVID=1
WSL SRVGRP=WSGRP SRVID=2 RESTART=Y MAXGEN=10 GRACE=3600 CLOPT="-A -- -n//192.168.0.7:7110 -m 10 -M 20 -x 10"
JSL SRVGRP=GROUP2 SRVID=20 CLOPT="-A -- -n //192.168.0.7:7111 -m 5 -M 10 -x 5"
JREPSVR SRVGRP=GROUP2 SRVID=21 CLOPT="-A -- -W -P /home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1/udataobj/jolt/repository/jrepository"
#注意:JSL就是JOLT的服务监听器,它并不调用WSL,如果你只用JOLT的话,完全可以不用WSL
*SERVICES
TOUPPER
LOAD=50
PRIO=50
BUFTYPE="ALL"
TRANTIME=30
AUTOTRAN=N
从上面的配置代码可以看出,jolt就是配置文件里面的JSL和JREPSVR,很多Jlot连接不上都是没有开启这两个服务造成的。
2.环境变量
export TUXDIR=/home/jim/oracle/app/oracle/product/11.1.1.2.0/tuxedo11gR1
export JOLTDIR=$TUXDIR/udataobj/jolt
export JAVA_HOME=/usr/lib/jvm/java-6-sun
JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$TUXDIR/samples/atmi/simpapp:$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
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib:$JVMLIBS
WEBJAVADIR=$TUXDIR/udataobj/webgui/java
export WEBJAVADIR
export TUXCONFIG=$TUXDIR/samples/atmi/simpapp/tuxconfig
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$PROGUARD_HOME/lib/proguard.jar:$JAVA_HOME/lib/lax.jar
#$TUXDIR/udataobj/jolt/joltadmin.jar:$TUXDIR/udataobj/jolt/joltjse.jar:$TUXDIR/udataobj/jolt/joltasp.jar:$TUXDIR/udataobj/jolt/joltwls.jar:$TUXDIR/udataobj/jolt/jolti18n.jar:
#写的太久了,好像jolti18n在服务器端不是必须加的,如果有中文乱码问题,可以去掉再试
3.applet策略配置
默认情况下,java的applet是不允许访问网络的,只有把权限放开,RE.html才可以用,否则会出现
bea.jolt.SessionException:Cannot connect to any //10.158.249.62:17046. reason:NwHdlr: cannot open socket
的错误信息
这个问题可以参考我的另外一篇文章
解决tuxedo JOLT RE.html连接JOLT服务时出现的reason:NwHdlr: cannot open socket错误
打开$JAVA_HOME/jre/lib/security/java.policy,在文件末尾加上
permission java.security.AllPermission;
修改以后是这个样子
......
permission java.util.PropertyPermission "java.vm.specification.version", "read";
permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
permission java.util.PropertyPermission "java.vm.specification.name", "read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";
permission java.util.PropertyPermission "java.vm.name", "read";
permission java.security.AllPermission;
};
4.打开RE.html测试连接
RE是Oracle Jolt Repository editor的简称,用来配置和测试JOLT/Tuxedo服务,相当于一个配置和测试工具,一般用它检查jolt配置的是否正确
RE.html在$TUXDIR/udataobj/jolt/RE.html,打开方法有两种
a.用浏览器直接打开,windows下可以用ie,linux下可以用firefox
b.用appletviewer也可以打开,执行命令
appletviewer RE.html
这个appletviewer在$JAVA_HOME/bin目录下有,需要加入PATH路径才可以
输入如下信息
server:192.168.0.7
port Number:7111
输完敲回车,如果配置没错的话下面三个按钮就能点击了,如果配置出错,RE会弹出提示对话框。
以上测试在本机和另外一台电脑上都能正确连接JSL服务
下面是access.042711日志内容
153904.jim-laptop!JSH.6697.3078670016.-2: total client (16), logon: JOLT IP (//192.168.0.7:42976), cltname (joltadmin) success
154556.jim-laptop!JSH.6697.3078670016.-2: total client (16), logoff: JOLT IP (//192.168.0.7:42976), cltname (joltadmin) success
154558.jim-laptop!JSH.6698.3078829760.-2: total client (16), logon: JOLT IP (//192.168.0.7:43406), cltname (joltadmin) success
155243.jim-laptop!JSH.6699.3079386816.-2: total client (17), logon: JOLT IP (//192.168.0.7:33928), cltname (joltadmin) success
155243.jim-laptop!JSH.6699.3079386816.-2: total client (17), logoff: JOLT IP (//192.168.0.7:33928), cltname (joltadmin) success
161154.jim-laptop!JSH.6700.3078751936.-2: total client (17), logon: JOLT IP (//192.168.0.8:10828), cltname (joltadmin) success
附上几个和JOLT有关的常见问题
The requested service is not available
造成这个问题的原因有很多,可以按照下面的步骤检查和更正
1.服务没有导出:用RE.html,找到该服务,把服务的export status设为export
2.服务器设置了国际化,确定客户端程序已经里包含了jolti18n.jar,并且设置了bea.jolt.encoding=gbk
中文乱码问题
如果服务器程序返回字符串的编码格式是gbk,客户端系统默认编码是UTF-8,就会出现乱码问题,就算你把返回串从iso8859_1转成gbk,也会出现有部分中文变成?的问题。
解决步骤
1.安装sun的jdk,不要用操作系统自带的gcj之类的开源jdk(openjdk可能能行,我没有试过)
2.配置java_home和class_path
3.在服务器端环境变量增加JOLTI18N=TRUE
4.jolti18n在服务器端不是必须加的,如果有中文乱码问题,可以去掉再试
照此步骤设置后,JOLT应该就没有乱码问题了。
