Java使用Jolt链接Tuxedo服务器

在电信领域的开发中,如今流行的架构是前台使用java,负责组织业务流程、展示结果,后台使用C/C++来封装各类服务,供前台调用。这就会出现前台Java如何链接Tuxedo服务器,调用服务的问题。一般,有两种解决方案,WTC和Jolt。WTC是weblogic链接tuxedo的专有方案,Jolt是tuxedo自己携带的组件。由于weblogic和tuxedo都是oracle的产品,所以,能够推测,WTC的集成度和效率会高一些,功能强大一些,但须于weblogic绑定,没有Jolt自由度高,所以我的推荐使用Jolt来链接tuxedo.html

下面将介绍使用Jolt链接Tuxedo过程当中,tuxedo侧的主要配置,以及使人头痛的乱码问题的解决:java

 

1.1ubbconfig文件配置web

为使Jolt客户端正常链接到Tuxedo服务器,须要在ubbconfig中开启JSLJREPSVR两个进程,JSL用于监听并分发客户端的请求,JREPSVR进程用于配置Tuxedo导出给Jolt客户端的服务,具体配置以下:服务器

    • 修改*RESOURCES区的MAXACCESSERS参数的值为足够大,如900架构

    • *GROUPS区添加JSLGRPJREPGRP两个group,以下:oracle

JSLGRP LMID=SITE1 GRPNO=3编码

JREPGRP LMID=SITE1 GRPNO=4spa

 

其中,LMID字段要与*MACHINES区中Tuxedo所在主机的LMID相同。命令行

    • *SERVERS区添加JSLJREPSVR两个server,以下:code

JSL SRVGRP=JSLGRP SRVID=755

CLOPT="-A -- -n //1.2.3.4:5002 -m 5 -M 10 -x 5"

JREPSVR SRVGRP=JREPGRP SRVID=760 RESTART=Y GRACE=0

CLOPT="-A -- -W -P /bea/tuxedo8.1/udataobj/jolt/repository/jrepository"

 

其中,SRVGRP字段要与*GROUPS区添加JSLGRPJREPGRP两个group对应;JSLCLOPT字段中的地址要填写Tuxedo对外提供服务的真实地址;JREPSVRCLOPT字段中的-P属性是指定的Jolt的服务注册表文件,该路径必须跟真实的路径相符。其余各个参数的详细含义,能够参照下面的连接:

 

http://download-llnw.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/jdg/dvconfig.html

 

先前ubbconfig中可能开启了WSL进程,该进程能够关闭,Jolt不使用该服务。

    • 确认Tuxedo安装中是否包含Joltlicsence

打开

TUXEDO_HOME\udataobj\jolt\lic.txt

文件,查看其中是否包含[BEA JOLT]段,若是不包含,则须要添加该licsence不然,Jolt 服务器将没法启动

所有配置完毕后,重启Tuxedo服务器,若在控制台看到以下输出,则说明JSLJREPSVR服务启动成功:

 

exec JSL -A -- -n //1.2.3.4:5002 -m 5 -M 10 -x 5 :

process id=5298 ... Started.

exec JREPSVR -A -- -W -P /bea/tuxedo8.1/udataobj/jolt/repository/jrepository :

process id=5304 ... Started.

问题列表:

    • JSL进程启动失败,出现以下异常:

exec JSL -A -- -n //1.2.3.3:5002 -m 5 -M 10 -x 5 :

CMDTUX_CAT:1685: ERROR: Application initialization failure

 

该异常多是Tuxedo没装Joltlicsence,或Joltlicsence失效。

    • JSL进程启动失败,出现以下异常:

095007.s22024!JSH.16097.3086915264.-2: JOLT_CAT:1008: "ERROR: Could not establish listening address on network 0x000213890a047822"

该异常多是JSL使用的端口被占用,换一个可用的端口便可。

1.2、导出Tuxedo服务

为使Jolt客户端可以查找到须要的服务,必须将须要的Tuxedo服务导出到Jolt注册表中,即上面提到的jrepository文件。服务的导出既可在Tuxedo服务器上进行,也可在其余客户端机器上进行。具体以下:

    • 在机器上安装JDK,并配置path环境变量。

    • jolt.jarjoltadmin.jar加载到classpath下,以下:

CLASSPATH=.:/bea/tuxedo8.1/udataobj/jolt/joltadmin.jar:/bea/tuxedo8.1/udataobj/jolt/jolt.jar

 

上面的两个jar包在TUXEDO_HOME \udataobj\jolt目录下能够找到

    • 导出服务

导出Tuxedo服务时,须要根据要导出的服务的详细定义编写导出脚本。好比

service=SVC

export=true

inbuf=VIEW32

outbuf=STRING

inview=trans

param=routeid

type=string

access=in

param=inxml

type=string

access=in

param=outxml

type=string

access=out

 

其中service表明Tuxedo服务名,export表示是否导出,inbuf表明传出参数的类型,outbuf表明返回参数的类型,param表明传入传出参数的名字,type表明传入传出参数的类型,access表示参数的访问类型。编写好导出脚本,将其保存成文本文件,如SVC.rep,在命令行进入所在目录,执行下面的命令执行导出

 

java bea.jolt.admin.jbld -p aaa //1.2.3.4:5002 SVC.rep

 

注意,ip及端口须要与ubbconfig文件中配置的JSL进程的CLOPT字段中的地址一致。

 

若是看到以下信息,则说明服务导出成功:

 

Line[1]: Service [SVC]: Inserted

Previous Package [PKG/aaa]: Deleted

Package [PKG/aaa]: Inserted

 

BULK LOAD SUMMARY

-----------------

Bulk load file name: SVC.rep

Services Defined in file: 1

Services Inserted: 1

Services Not Replaced: 0

Services Errors: 0

Previous Bulk Services Deleted: 0

 

问题列表:

  • 导出失败,出现以下异常:

C:\>java bea.jolt.admin.jbld -p abm //1.2.3.4:5002 SVC_BILL_REDUCE.rep

Exception in thread "main" bea.jolt.ServiceException: Service is not available:.GETKEYS

at bea.jolt.JoltRemoteService.init(JoltRemoteService.java:156)

at bea.jolt.JoltRemoteService.(JoltRemoteService.java:112)

at bea.jolt.admin.JSvcPkgTbl.initTable(jbld.java:1010)

at bea.jolt.admin.JSvcPkgTbl.(jbld.java:990)

at bea.jolt.admin.JBldDefRec.(jbld.java:138)

at bea.jolt.admin.jbld.main(jbld.java:801)

 

该异常多是由于预先配置了“1.3、国际化”的配置,从而客户端与服务器的字符编码不一致,服务器没法识别客户端发送的导出命令形成的。解决办法是,将主机上的系统变量JOLTI18N=TRUE删除,重启Tuxedo,从新执行导出命令。

 

1.3、国际化

因为Jolt客户端与Tuxedo交互时,相互传递的参数可能包含中文,所以,要对传输的内容进行国际化。步骤以下:

    • Tuxedo服务器端

在主机上添加下面的环境变量,重启Tuxedo服务器,JSH会参照此变量。

JOLTI18N=TRUE

    • Jolt客户端

jolti18n.jar添加到classpath下,并在系统参数中添加以下属性,其中,charsetName表明Jolt客户端与tuxedo交互时使用的字符编码集,该字符编码集必须在客户端和服务器上都支持,如GBK

bea.jolt.encoding=charsetName

系统属性的添加方法有以下两种:

$java ... -Dbea.jolt.encoding=codesetname ...

System.setProperty("bea.jolt.encoding", joltEncoding);

注意,导出服务时,需关闭国际化,不然会报错。

 

另,以上过程当中若出现异常,能够查看ULOG进行确认。

 

以上就是Tuxdeo端的所有配置,配置完毕后,就可使用Jolt客户端链接并调用Tuxedo服务了

相关文章
相关标签/搜索