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服務了

相關文章
相關標籤/搜索