對使用Jolt調用Tuxedo的一個簡單的封裝


注:大約4年前,在上家公司封裝的一個Jolt調用Texedo的包,並寫的一個使用文檔。不知道如今還有沒有人使用Jolt這個東西了。

源碼下載地址見文章最後 css

-------------------------------------------------------------------------------------------------------------------------------- java

1 Jolt通用調用包簡介

1.1 調用Tuxedo服務的兩種方式

在程序開發中,有兩種方式能夠調用Tuxedo服務,分別是: 編程

1. C/C++來編寫程序,經過WSL來調用Tuxedo提供的服務。 服務器

2. Java經過Jolt包來編寫程序,經過JSL來調用Tuxedo提供的服務。 網絡


第一種方式使用C/C++語言開發,效率高,可是程序調試困難,容易出錯。 session

第二種方式使用Java語言開發,運行效率相對於第一種方式略有不足,可是開發容易,調試簡單。可是爲了提供更大的靈活性,使用Jolt方式對長鏈接和短鏈接調用提供了兩套徹底不一樣的API 併發

1.2 Jolt通用調用包的目標

l 簡化開發 app

僅須要編寫少許的代碼就能夠完成Tuxedo服務調用。 編碼

l 屏蔽長短鏈接 spa

對於長鏈接或者短鏈接,開發人員編寫的代碼是同樣的。長鏈接和短鏈接的切換,僅須要修改一下配置文件便可。

l 配置靈活

提供多種配置方式,既能夠經過文件配置,也可讓開發人員編程配置。

1.3 Jolt通用調用包的組成

Jolt通用調用包僅有一個包:joltutility.jar。該包依賴於Oracle提供的jolt.jar包。

在開發時,將 joltutility.jar 和 jolt.jar 兩個包引入工程便可。


快速入門

本節的主要目地是:使開發人員快速掌握經過joltutility.jar來調用Tuxedo服務的方法。


Jolt通用調用包對程序開發人員徹底屏蔽長鏈接和短鏈接,長鏈接和短鏈接的調用方式一致,只有在涉及到某種鏈接方式特有的設置才須要單獨進行設置。


調用Tuxedo服務一共分六步:

第一步 配置

Jolt通用調用包存在兩種配置方式:配置文件方式 和 編程自定義配置。


配置文件方式

一般,Jolt通用調用包須要經過配置文件來進行配置。配置文件的格式見附錄

配置文件設置完成之後,在程序中進行配置加載該配置文件。一共有3種跟配置文件相關的配置方式:

l 在程序中指定配置文件

調用 JoltConfig.configure( cfgFilePath ) 靜態方法,設置從cfgFilePath中讀取配置。

l 在JVM的參數中指定配置文件

在進程啓動的腳本中,爲JVM的啓動參數增長 -Djolt.configuration=cfgFilePath。這樣程序會自動從cfgFilePath中加載配置。

l 使用默認配置文件

若是既不在程序中指定配置文件,也不在JVM的參數中指定配置文件,那麼程序會自動從應用程序根目錄下面的JoltConfig.xml文件中讀取配置。


編程自定義配置

若是不想從配置文件中讀取配置,也能夠在程序中對配置類進行自定義設置。代碼以下:

JoltConfig cfg = JoltConfig.newInstance();

// 短鏈接配置

BasicJoltConfig basicConfig = new BasicJoltConfig();

… … // 在這裏對basicConfig進行設置

// 長鏈接配置

PoolJoltConfig poolConfig = new PoolJoltConfig();

… … // 在這裏對poolConfig進行設置

cfg.setBasicConfig( basicConfig );

cfg.setPoolConfig( poolConfig );

// 自定義配置

JoltConfig.configure( JoltConfig cfg );




注:以上四種配置方法任何一種都可,並且只須要配置一次,一般咱們能夠在進程剛啓動時進行配置。


第二步 實例化一個JoltCaller對象

JoltCaller caller = new JoltCaller();


JoltCaller對象會根據配置文件中的配置,與Tuxedo服務器鏈接,並提供調用Tuxedo服務的功能。因此,若是想調用Tuxedo服務,首先要建立一個JoltCaller對象。


第三步 生成一個IJoltData對象


IJoltData data = JoltCaller.getJoltData( serviceName ); // 生成調用某一個服務的參數對象


IJoltData是向Tuxedo服務發送的參數對象的抽象,使用JoltCaller.getJoltData( serviceName )方法,能夠生成某一個服務對應的參數象。。


第四步 設置調用參數


data.setString( "STRING", "HelloWorld" );


根據協議文檔的內容,對第三步中生成的參數對象進行設置。


第五步 調用服務


data = caller.call( data );


經過調用JoltCaller對象的call( IJoltData )方法,能夠調用Tuxedo服務,並返回結果。


第六步 處理返回結果


String s = data.getStringDef( "STRING", "defalut" );


根據協議文檔的內容,獲取Tuxedo服務返回的各個數據項,進行業務處理。


經過以上六步,就能夠調用一次Tuxedo服務。各個類的詳細說明,請參考附帶的javadoc文檔。

高級應用

3.1 長鏈接鏈接多個Tuxedo服務器

Jolt通用調用包在進行長鏈接調用時,對鏈接多個Tuxedo服務器提供了支持。在配置文件中能夠添加多個Tuxedo服務器的配置(見附錄),而後在程序中經過以下形式進行調用:


JoltCaller caller = JoltCaller.getInstance();

IJoltData data = JoltCaller.getJoltData( serviceName );

data.setString( "STRING", "HelloWorld" );

// sessionName就是指定的鏈接池名稱,只有長鏈接會使用這個重載的方法,短鏈接使用該重載方法,sessionName不起做用。

data = caller.call( data, sessionName );

String s = data.getStringDef( "STRING", "defalut" );




3.2 短鏈接自定義調用Tuxedo服務的配置

Jolt通用調用包在進行短鏈接調用時,能夠對每個服務的調用都進行自定義的設置,如:調用ServiceA時,咱們但願鏈接服務器I,而且超時間設置爲5秒;在調用ServiceB時,咱們但願鏈接服務器II,而且超時時間設置爲10秒。


經過以下的代碼能夠實現這個功能:


JoltCaller caller = new JoltCaller ();

BasicJoltConfig cfg = new BasicJoltConfig();

...... // 在這裏進行自定義設置

// 這裏生成的data就是按照自定義的配置生成的,不會使用默認設置了。只有短鏈接調用時才使用這個重載的方法,長鏈接調用時使用該重載方法,cfg不起做用。

IJoltData data = JoltCaller.getJoltData( serviceName, cfg );

data.setString( "STRING", "HelloWorld" );

data = caller.call( data );

String s = data.getStringDef( "STRING", "defalut" );



3.3 自定義配置文件

一般,Jolt通用調用包使用單獨的一個配置文件,可是Jolt通用調用包也能夠與其它應用程序共用同一個配置文件。

由於Jolt通用調用包的配置文件是XML格式的,並且根結點爲<Root>,二級節點爲<Jolt>。因此任何使用<Root>做爲根結點的配置文件,均可以與Jolt通用調用包共用配置文件(如空中選號系統)。

附錄 配置文件的格式

Jolt通用調用包的配置文件保存的編碼格式一概爲GB2312,使用ASCIIISO8859-1UTF-8UTF-16等編碼方式保存時,加載配置文件可能會出錯。


配置文件內容以下:


<?xml version="1.0" encoding="gb2312"?>

<Root>

    <Jolt>

        <!-- 是否使用鏈接池,true:使用 false:不使用 -->

        <usePool>false</usePool>

        

        <!-- 短鏈接設置 -->

        <commonSetting>

            <!-- Tuxedo服務器地址  -->

            <appAddress>//10.0.52.14:9988</appAddress>

            <!-- 應用密碼 -->

            <appPassword></appPassword>

            <!-- 用戶名 -->

            <userName></userName>

            <!-- 用戶密碼 -->

            <userPassword></userPassword>

            <!-- 用戶角色 -->

            <userRole></userRole>

            <!-- 接收超時,單位秒 -->

            <recvTimeout>3</recvTimeout>

            <!-- 發送超時,單位秒 -->

            <sendTimeout>0</sendTimeout>

            <!-- Session超時,單位秒.JSL中的-T選項,通常對此設置爲0 -->

            <sessionTimeout>0</sessionTimeout>

            <!-- 網絡空閒超時, 若是設置0,Jolt鏈接JSH會採用 RETAINED模式;若是大於0,Jolt鏈接JSH會採用RECONNECT模式; -->

            <idleTimeout>0</idleTimeout>

        </commonSetting>

        

        <!-- 鏈接池設置 -->

        <poolSetting>

            <!-- 鏈接池項,設置多個鏈接池時,設置多個 poolItem 結點,不一樣的結點用poolName來區分。能夠每個Tuxedo服務器來創建一個鏈接池項。 -->

            <poolItem>

                <!-- 應用密碼 -->

                <appPassword></appPassword>

                <!-- 用戶名 -->

                <userName></userName>

                <!-- 用戶密碼 -->

                <userPassword></userPassword>

                <!-- 用戶角色 -->

                <userRole></userRole>

                <!-- 接收超時,單位秒 -->

                <recvTimeout>3</recvTimeout>

                

                <!-- 首選地址列表,當有多個備選地址列表時,可使用多個 addr 結點 -->

                <primaryAddr>

                    <addr>//10.0.52.14:9988</addr>

                </primaryAddr>

                

                <!-- 備選地址列表,當有多個備選地址列表時,可使用多個 addr 結點 -->

                <secondaryAddr>

                    <addr>//10.0.52.14:9988</addr>

                </secondaryAddr>

                

                <!-- 鏈接池名稱,不設置爲默認鏈接池 -->

                <poolName></poolName>

                <!-- 最小鏈接數,即程序一啓動時就創建的鏈接數 -->

                <minPoolSize>5</minPoolSize>

                <!-- 最大鏈接數,即同時併發調用的數量 -->

                <maxPoolSize>15</maxPoolSize>

            </poolItem>

        </poolSetting>

    </Jolt>

</Root>

下載地址: http://yun.baidu.com/share/link?shareid=2404381116&uk=3221528213

相關文章
相關標籤/搜索