1 Jolt通用调用包简介
1.1 调用Tuxedo服务的两种方式
在程序开发中,有两种方式可以调用Tuxedo服务,分别是:
1. 用C/C++来编写程序,通过WSL来调用Tuxedo提供的服务。
2. 用Java通过Jolt包来编写程序,通过JSL来调用Tuxedo提供的服务。
第一种方式使用C/C++语言开发,效率高,但是程序调试困难,容易出错。
第二种方式使用Java语言开发,运行效率相对于第一种方式略有不足,但是开发容易,调试简单。但是为了提供更大的灵活性,使用Jolt方式对长连接和短连接调用提供了两套完全不同的API,
1.2 Jolt通用调用包的目标
l 简化开发
仅需要编写少量的代码就可以完成Tuxedo服务调用。
l 屏蔽长短连接
对于长连接或者短连接,开发人员编写的代码是一样的。长连接和短连接的切换,仅需要修改一下配置文件即可。
l 配置灵活
提供多种配置方式,既可以通过文件配置,也可以让开发人员编程配置。
1.3 Jolt通用调用包的组成
Jolt通用调用包仅有一个包:joltutility.jar。该包依赖于Oracle提供的jolt.jar包。
在开发时,将 joltutility.jar 和 jolt.jar 两个包引入工程即可。
2 快速入门
本节的主要目地是:使开发人员快速掌握通过joltutility.jar来调用Tuxedo服务的方法。
Jolt通用调用包对程序开发人员完全屏蔽长连接和短连接,长连接和短连接的调用方式一致,只有在涉及到某种连接方式特有的设置才需要单独进行设置。
调用Tuxedo服务一共分六步:
第一步 配置
Jolt通用调用包存在两种配置方式:配置文件方式 和 编程自定义配置。
配置文件方式
通常,Jolt通用调用包需要通过配置文件来进行配置。配置文件的格式见附录。
配置文件设置完成以后,在程序中进行配置加载该配置文件。一共有3种跟配置文件相关的配置方式:
l 在程序中指定配置文件
调用 JoltConfig.configure( cfgFilePath ) 静态方法,设置从cfgFilePath中读取配置。
l 在JVM的参数中指定配置文件
在进程启动的脚本中,为JVM的启动参数增加 -Djolt.configuration=cfgFilePath。这样程序会自动从cfgFilePath中加载配置。
l 使用默认配置文件
如果既不在程序中指定配置文件,也不在JVM的参数中指定配置文件,那么程序会自动从应用程序根目录下面的JoltConfig.xml文件中读取配置。
编程自定义配置
如果不想从配置文件中读取配置,也可以在程序中对配置类进行自定义设置。代码如下:
01JoltConfig cfg = JoltConfig.newInstance();
02
03// 短连接配置
04
05BasicJoltConfig basicConfig = new BasicJoltConfig();
06
07… … // 在这里对basicConfig进行设置
08
09// 长连接配置
10
11PoolJoltConfig poolConfig = new PoolJoltConfig();
12
13… … // 在这里对poolConfig进行设置
14
15cfg.setBasicConfig( basicConfig );
16
17cfg.setPoolConfig( poolConfig );
18
19// 自定义配置
20
21JoltConfig.configure( JoltConfig cfg );
注:以上四种配置方法任何一种均可,而且只需要配置一次,通常我们可以在进程刚启动时进行配置。
第二步 实例化一个JoltCaller对象
1JoltCaller caller = new JoltCaller();
JoltCaller对象会根据配置文件中的配置,与Tuxedo服务器连接,并提供调用Tuxedo服务的功能。所以,如果想调用Tuxedo服务,首先要创建一个JoltCaller对象。
第三步 生成一个IJoltData对象
1IJoltData data = JoltCaller.getJoltData( serviceName ); // 生成调用某一个服务的参数对象
IJoltData是向Tuxedo服务发送的参数对象的抽象,使用JoltCaller.getJoltData( serviceName )方法,可以生成某一个服务对应的参数象。。
第四步 设置调用参数
1data.setString( "STRING", "HelloWorld" );
根据协议文档的内容,对第三步中生成的参数对象进行设置。
第五步 调用服务
1data = caller.call( data );
通过调用JoltCaller对象的call( IJoltData )方法,可以调用Tuxedo服务,并返回结果。
第六步 处理返回结果
1String s = data.getStringDef( "STRING", "defalut" );
根据协议文档的内容,获取Tuxedo服务返回的各个数据项,进行业务处理。
通过以上六步,就可以调用一次Tuxedo服务。各个类的详细说明,请参考附带的javadoc文档。
3 高级应用
3.1 长连接连接多个Tuxedo服务器
Jolt通用调用包在进行长连接调用时,对连接多个Tuxedo服务器提供了支持。在配置文件中可以添加多个Tuxedo服务器的配置(见附录),然后在程序中通过如下形式进行调用:
01JoltCaller caller = JoltCaller.getInstance();
02
03IJoltData data = JoltCaller.getJoltData( serviceName );
04
05data.setString( "STRING", "HelloWorld" );
06
07// sessionName就是指定的连接池名称,只有长连接会使用这个重载的方法,短连接使用该重载方法,sessionName不起作用。
08
09data = caller.call( data, sessionName );
10
11String s = data.getStringDef( "STRING", "defalut" );
3.2 短连接自定义调用Tuxedo服务的配置
Jolt通用调用包在进行短连接调用时,可以对每一个服务的调用都进行自定义的设置,如:调用ServiceA时,我们希望连接服务器I,并且超时间设置为5秒;在调用ServiceB时,我们希望连接服务器II,并且超时时间设置为10秒。
通过如下的代码可以实现这个功能:
01JoltCaller caller = new JoltCaller ();
02
03BasicJoltConfig cfg = new BasicJoltConfig();
04
05...... // 在这里进行自定义设置
06
07// 这里生成的data就是按照自定义的配置生成的,不会使用默认设置了。只有短连接调用时才使用这个重载的方法,长连接调用时使用该重载方法,cfg不起作用。
08
09IJoltData data = JoltCaller.getJoltData( serviceName, cfg );
10
11data.setString( "STRING", "HelloWorld" );
12
13data = caller.call( data );
14
15String s = data.getStringDef( "STRING", "defalut" );
3.3 自定义配置文件
通常,Jolt通用调用包使用单独的一个配置文件,但是Jolt通用调用包也可以与其它应用程序共用同一个配置文件。
因为Jolt通用调用包的配置文件是XML格式的,而且根结点为<Root>,二级节点为<Jolt>。所以任何使用<Root>作为根结点的配置文件,都可以与Jolt通用调用包共用配置文件(如空中选号系统)。
附录 配置文件的格式
Jolt通用调用包的配置文件保存的编码格式一律为GB2312,使用ASCII,ISO8859-1,UTF-8,UTF-16等编码方式保存时,加载配置文件可能会出错。
配置文件内容如下:
001<?xml version="1.0" encoding="gb2312"?>
002
003<Root>
004
005 <Jolt>
006
007 <!-- 是否使用连接池,true:使用 false:不使用 -->
008
009 <usePool>false</usePool>
010
011
012
013 <!-- 短连接设置 -->
014
015 <commonSetting>
016
017 <!-- Tuxedo服务器地址 -->
018
019 <appAddress>//10.0.52.14:9988</appAddress>
020
021 <!-- 应用密码 -->
022
023 <appPassword></appPassword>
024
025 <!-- 用户名 -->
026
027 <userName></userName>
028
029 <!-- 用户密码 -->
030
031 <userPassword></userPassword>
032
033 <!-- 用户角色 -->
034
035 <userRole></userRole>
036
037 <!-- 接收超时,单位秒 -->
038
039 <recvTimeout>3</recvTimeout>
040
041 <!-- 发送超时,单位秒 -->
042
043 <sendTimeout>0</sendTimeout>
044
045 <!-- Session超时,单位秒.JSL中的-T选项,一般对此设置为0 -->
046
047 <sessionTimeout>0</sessionTimeout>
048
049 <!-- 网络空闲超时, 如果设置0,Jolt连接JSH会采用 RETAINED模式;如果大于0,Jolt连接JSH会采用RECONNECT模式; -->
050
051 <idleTimeout>0</idleTimeout>
052
053 </commonSetting>
054
055
056
057 <!-- 连接池设置 -->
058
059 <poolSetting>
060
061 <!-- 连接池项,设置多个连接池时,设置多个 poolItem 结点,不同的结点用poolName来区分。可以每一个Tuxedo服务器来建立一个连接池项。 -->
062
063 <poolItem>
064
065 <!-- 应用密码 -->
066
067 <appPassword></appPassword>
068
069 <!-- 用户名 -->
070
071 <userName></userName>
072
073 <!-- 用户密码 -->
074
075 <userPassword></userPassword>
076
077 <!-- 用户角色 -->
078
079 <userRole></userRole>
080
081 <!-- 接收超时,单位秒 -->
082
083 <recvTimeout>3</recvTimeout>
084
085
086
087 <!-- 首选地址列表,当有多个备选地址列表时,可以使用多个 addr 结点 -->
088
089 <primaryAddr>
090
091 <addr>//10.0.52.14:9988</addr>
092
093 </primaryAddr>
094
095
096
097 <!-- 备选地址列表,当有多个备选地址列表时,可以使用多个 addr 结点 -->
098
099 <secondaryAddr>
100
101 <addr>//10.0.52.14:9988</addr>
102
103 </secondaryAddr>
104
105
106
107 <!-- 连接池名称,不设置为默认连接池 -->
108
109 <poolName></poolName>
110
111 <!-- 最小连接数,即程序一启动时就建立的连接数 -->
112
113 <minPoolSize>5</minPoolSize>
114
115 <!-- 最大连接数,即同时并发调用的数量 -->
116
117 <maxPoolSize>15</maxPoolSize>
118
119 </poolItem>
120
121 </poolSetting>
122
123 </Jolt>
124
125</Root>