Java使用Jolt连接Tuxedo服务器
2019獨角獸企業重金招聘Python工程師標準>>>
在電信領域的開發中,現在流行的架構是前臺使用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服務了。
轉載于:https://my.oschina.net/hunterli/blog/12535
總結
以上是生活随笔為你收集整理的Java使用Jolt连接Tuxedo服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者营地可以隐身访问吗
- 下一篇: 世界末日b地堡怎么下楼