Java使用Jolt连接Tuxedo服务器_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4216 | 回复: 1   主题: Java使用Jolt连接Tuxedo服务器        下一篇 
derek
注册用户
等级:中校
经验:1550
发帖:209
精华:0
注册:2011-7-21
状态:离线
发送短消息息给derek 加好友    发送短消息息给derek 发消息
发表于: IP:您无权察看 2014-11-13 11:43:05 | [全部帖] [楼主帖] 楼主

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

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

1.1、ubbconfig文件配置

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

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

        在*GROUPS区添加JSLGRP和JREPGRP两个group,如下:

JSLGRP LMID=SITE1 GRPNO=3
JREPGRP LMID=SITE1 GRPNO=4


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

        在*SERVERS区添加JSL和JREPSVR两个server,如下:

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区添加JSLGRP和JREPGRP两个group对应;JSL的CLOPT字段中的地址要填写Tuxedo对外提供服务的真实地址;JREPSVR的CLOPT字段中的-P属性是指定的Jolt的服务注册表文件,该路径必须跟真实的路径相符。其他各个参数的详细含义,可以参照下面的链接:

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


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

        确认Tuxedo安装中是否包含Jolt的licsence

打开

TUXEDO_HOME\udataobj\jolt\lic.txt


文件,查看其中是否包含[BEA JOLT]段,如果不包含,则需要添加该licsence,否则,Jolt 服务器将无法启动。

全部配置完毕后,重启Tuxedo服务器,若在控制台看到如下输出,则说明JSL和JREPSVR服务启动成功:

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没装Jolt的licsence,或Jolt的licsence失效。

        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.jar和joltadmin.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服务了。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
koei123
注册用户
等级:大校
经验:4196
发帖:16
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei123 加好友    发送短消息息给koei123 发消息
发表于: IP:您无权察看 2014-11-27 22:21:18 | [全部帖] [楼主帖] 2  楼

除了Jolt外,还有WTC,JCA等方式;
不过WTC比较私有,非Oracle产品线的java链接,还是Jolt比较多,JCA符合规范比较新;



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论