http://blog.csdn.net/liwei_cmg/archive/2006/06/02/769150.aspx
http://blog.csdn.net/liwei_cmg/archive/2006/06/03/771906.aspx
Java通過(guò)Jolt調(diào)用Tuxedo服務(wù)
草木瓜 2006-6-1
------------------------
一、簡(jiǎn)介
------------------------
外部應(yīng)用訪問(wèn)Tuxedo服務(wù)是很經(jīng)常的事,一般有兩種方法WTC和Jolt,網(wǎng)上很多關(guān)于Jolt調(diào)用Tuxedo服務(wù)
文章,描述的太多籠統(tǒng),其實(shí)通過(guò)Jolt并不是很復(fù)雜的事情,這里使用Eclipse3.1+Jolt+WebLogic8.1
+Tuxedo9.0環(huán)境描述調(diào)用服務(wù)的全過(guò)程。
Jolt是Bea Tuxedo自帶的jar組件,在Tuxedo9.0的安裝過(guò)程中可以看到安裝的Jolt組件。
調(diào)用服務(wù)理論步驟是這樣的:
1.先準(zhǔn)備Tuxedo服務(wù)端代碼
2.在Tuxedo中配置Jolt相關(guān)文件
3.啟動(dòng)Tuxedo服務(wù)
4.配置WebLogic服務(wù)與Tuxedo Jolt相關(guān)的參數(shù)
5.配置Eclipse3.1啟動(dòng)WebLogic服務(wù)
6.編寫Eclipse Servlet代碼,運(yùn)行調(diào)用服務(wù)。
本例使用了《Windows Tuxedo的安裝配置-數(shù)據(jù)庫(kù)補(bǔ)充》一文中的Tuxedo數(shù)據(jù)服務(wù)文件,所以在啟動(dòng)
Tuxedo服務(wù)前,必須先啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例,因?yàn)樵趖psvinit()里面就配置了數(shù)據(jù)連接。關(guān)于Tuxedo配置
要點(diǎn)需參閱《Tuxedo的安裝配置-...》的四篇文章。
------------------------
二、Tuxedo服務(wù)文件全代碼
------------------------
這里把server.pc服務(wù)文件代碼再次列出。其中包括三個(gè)服務(wù)DBREAD(讀數(shù)據(jù)庫(kù))和TOUPPER(轉(zhuǎn)換大寫)。
本例不使用TOUPPER,所以不用理會(huì)那段代碼。
其中liwei/liwei@windb連接的表tuxedo_test,結(jié)構(gòu)如下:
CREATE TABLE TUXEDO_TEST(
ID NUMBER(2),
NAME VARCHAR2(10)
)
ID NAME
------------------------
1 aaaaaaa
2 bbbbbbb
#include <stdio.h>
#include <ctype.h>
#include <atmi.h> /* TUXEDO Header File */
#include <userlog.h> /* TUXEDO Header File */
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR ora_no[2];
int ora_id;
VARCHAR ora_value[10];
VARCHAR ora_cn[30];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
tpsvrinit()
{
strcpy(ora_cn.arr,"liwei/liwei@windb");
ora_cn.len = strlen(ora_cn.arr);
ora_cn.arr[ora_cn.len]='\0';
//EXEC SQL WHENEVER SQLERROR GOTO cnError;
EXEC SQL CONNECT :ora_cn;
return(0);
}
tpsrvdone()
{
EXEC SQL COMMIT WORK RELEASE;
}
DBREAD(TPSVCINFO *rqst)
{
strcpy(ora_no.arr,(char *)rqst->data);
ora_no.len=strlen(ora_no.arr);
ora_no.arr[ora_no.len]='\0';
userlog("ERRSRV: %s",ora_no.arr);
EXEC SQL select name into :ora_value from tuxedo_test where id=:ora_no;
if(sqlca.sqlcode!=0)
{
userlog("ERRSRV: select name from tuxedo_test where id=, sqlcode=%ld , sqlerr=\n",sqlca.sqlcode);
strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
/* Return the transformed buffer to the requestor. */
strset(rqst->data,"");
strcpy(rqst->data,ora_value.arr);
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
TOUPPER(TPSVCINFO *rqst)
{
int i;
for(i = 0; i < rqst->len-1; i++)
rqst->data[i] = toupper(rqst->data[i]);
/* Return the transformed buffer to the requestor. */
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
------------------------
三、編譯服務(wù)
------------------------
編譯命令的注意事項(xiàng),以前Tuxedo系列文章都提過(guò)。
proc server.pc include=%TUXDIR%\include
buildserver -o server -f server.c -s DBREAD -s TOUPPER -v -l orasql9.lib
------------------------
四、配置Tuxedo服務(wù)的config文件
------------------------
完全文件如下:
#Liwei
*RESOURCES
IPCKEY 123456
DOMAINID liweiapp
MASTER lw
MAXACCESSERS 150
MAXSERVERS 100
MAXSERVICES 100
MODEL SHM
LDBAL N
*MACHINES
LWYM
LMID = lw
TUXDIR = "E:\bea\tuxedo9.0"
TUXCONFIG = "G:\Liwei\Tuxedo\dbread\tuxconfig"
APPDIR = "G:\Liwei\Tuxedo\dbread"
MAXWSCLIENTS=1
TLOGDEVICE = "G:\Liwei\Tuxedo\dbread\TLOG"
TLOGNAME=TLOG
TLOGSIZE = 100
*GROUPS
APPGRP LMID=lw GRPNO = 1
#OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=."
#TMSNAME="TMS_ORA9i" TMSCOUNT=2
JSLGRP LMID=lw GRPNO = 2
JREPGRP LMID=lw GRPNO = 3
*SERVERS
server SRVGRP=APPGRP SRVID=1
#WSL SRVGRP=APPGRP SRVID =300
#CLOPT="-A -- -n //192.168.0.166:8888 -d/dev/tcp -m1 -M5 -x 10"
JSL SRVGRP=JSLGRP SRVID=301
CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"
JREPSVR SRVGRP=JREPGRP SRVID=302
CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"
*SERVICES
DBREAD
TOUPPER
細(xì)心一看,這個(gè)config文件比在*GROUPS和*SERVERS各加了兩項(xiàng)對(duì)應(yīng)內(nèi)容:
JSLGRP LMID=lw GRPNO = 2
JREPGRP LMID=lw GRPNO = 3
和
JSL SRVGRP=JSLGRP SRVID=301
CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"
JREPSVR SRVGRP=JREPGRP SRVID=302
CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"
這兩項(xiàng)是用于jolt的訪問(wèn)接口。JSL和JREPSVR必須是獨(dú)自的GROUP,由于外部調(diào)用通過(guò)JSL和JREPSVR直接于
Tuxedo服務(wù)通信,WSL就沒(méi)用了。JSL的主機(jī)地址是Tuxedo服務(wù)器地址,端口是隨意指定的,不要與其他重復(fù)
即可,一般設(shè)置的大一點(diǎn)。在config里面加入這此內(nèi)容后,config文件就Ok了。
------------------------
五、配置jrepository文件
------------------------
直接打開(kāi)E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository文件添加以下內(nèi)容:
add SVC/DBREAD:vs=1:ex=1:bt=STRING:\
bp:pn=STRING:pt=string:pf=167772161:pa=rw:ep:
add PKG/SIMPSERV:DBREAD:
這個(gè)文件如果沒(méi)有DBREAD配置,調(diào)用會(huì)提示DBREAD not avaliable,DBREAD配置錯(cuò)誤,會(huì)提示DBREAD has
been modifed ...
對(duì)這個(gè)文件操作還有以下兩種方式:
方式一:在IE打開(kāi)E:\bea\tuxedo9.0\udataobj\jolt\RE.html,是個(gè)java applet,里面是圖形界面,添加
完服務(wù),設(shè)置好參數(shù)即可。具體方法可以查閱網(wǎng)上資料,有圖文解說(shuō)的。
方式二:在命令行鍵入Java bea.jolt.admin.jbld //192.168.0.166:9878 services.rep,其中//192..要與
JSL的設(shè)置一致。services.rep是隨意的一個(gè)文件,不過(guò)文件內(nèi)容絕對(duì)不隨意,如下:
service=DBREAD
inbuf=STRING
outbuf=STRING
export=true
param=STRING
type=string
access=inout
要執(zhí)行這個(gè)命令設(shè)置jdk環(huán)境變量是必不可少的,PATH,CLASSPATH。我的CLASSPATH加入了以下內(nèi)容,
E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar;
E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar;
E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar;
E:\bea\tuxedo9.0\udataobj\jolt\joltadmin.jar
個(gè)人認(rèn)為對(duì)于這個(gè)java命令joltadmin是必須的,其他三個(gè)沒(méi)用,不過(guò)沒(méi)有親自嘗試。
方式一,二修改后,jrepository文件會(huì)顯得比較亂,所以我不喜歡!最好是自已手工修改。
------------------------
六、編譯啟動(dòng)服務(wù)
------------------------
當(dāng)然,數(shù)據(jù)庫(kù)必須要有了,編譯config后,啟動(dòng)tuxedo服務(wù)。
tmloadcf -y config
tmboot -y
提示如下:
exec BBL -A :
process id=3520 ... Started.
Booting server processes ...
exec server -A :
process id=3812 ... Started.
exec JSL -A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2 :
process id=252 ... Started.
exec JREPSVR -A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository :
process id=2920 ... Started.
4 processes started.
------------------------
七、配置Eclipse3.1
------------------------
我們要在Eclipse里面啟動(dòng)WebLogic服務(wù),《Eclipse3.1 Web開(kāi)發(fā)配置》一文中已經(jīng)說(shuō)明了,如何配置
WebLogic8.1的服務(wù)器,這里對(duì)WebLogic的服務(wù)本身也要做此必要的配置。
打開(kāi)選用的WebLogic8.1服務(wù)路徑,編輯config.xml文件,本機(jī)位置G:\Liwei\WebLogic\WebServer\config.xml。
加入如下內(nèi)容:
<JoltConnectionPool FailoverAddresses="http://192.168.0.166:9878"
MaximumPoolSize="2" MinimumPoolSize="1" Name="JoltPool"
PrimaryAddresses="http://192.168.0.166:9878"
SecurityContextEnabled="false" Targets="webServer"/>
<StartupClass
ClassName="bea.jolt.pool.servlet.weblogic.PoolManagerStartUp"
LoadBeforeAppActivation="true" Name="MyStartup" Targets="webServer"/>
<ShutdownClass
ClassName="bea.jolt.pool.servlet.weblogic.PoolManagerShutDown"
Name="MyShutdown" Targets="webServer"/>
這里要說(shuō)明一下:PrimaryAddresses,F(xiàn)ailoverAddresses地址是前面Tuxedo配置文件指定的JSL地址和端口
SecurityContextEnabled一定要是false!所有name是隨意的,StartupClass和ShutdownClass的ClassName
絕對(duì)不能錯(cuò)!
除此方法,還可以通過(guò)Weblogic服務(wù)的控制臺(tái)進(jìn)行管理。啟動(dòng)服務(wù)后,在http://localhost:7001/console/
登陸后的主頁(yè)面上選擇 連接性->通過(guò) JOLT 的 Tuxedo ->配置新的Jolt 連接緩沖池...輸入?yún)?shù)內(nèi)容就是
上面config.xml的參數(shù)。另外首頁(yè)中 已部署的資源 ->啟動(dòng)和關(guān)閉 需要設(shè)置兩個(gè)Class,參數(shù)也同上。
連接性->通過(guò) JOLT 的 Tuxedo ->配置新的Jolt 連接緩沖池...
①進(jìn)入選項(xiàng)卡的General(常規(guī)),輸入?yún)?shù):
Name: JoltPool
Minimum Pool Size: 1
Maximum Pool Size: 2
Recv Timeout: 0
點(diǎn)擊Apply應(yīng)用按紐
②進(jìn)入選項(xiàng)卡的Addresses(地址),輸入?yún)?shù):
Primary Addresses: //192.168.0.166:9878
Failover Addresses: //192.168.0.166:9878
點(diǎn)擊Apply應(yīng)用按紐
③進(jìn)入Targets欄:
選中myserver
點(diǎn)擊Apply應(yīng)用按紐.
已部署的資源 ->啟動(dòng)和關(guān)閉 分別配置StartUp,ShutDown的Class
①進(jìn)入Configuration(設(shè)置)
在ClassName:中輸入: bea.jolt.pool.servlet.weblogic.PoolManagerStartUp,
其它采用默認(rèn)值。
②進(jìn)入Targets(目標(biāo))欄:
選中myserver,點(diǎn)擊Apply應(yīng)用按紐.
①進(jìn)入Configuration(設(shè)置)
在ClassName:中輸入: bea.jolt.pool.servlet.weblogic.PoolManagerShutDown,
其它采用默認(rèn)值。
②進(jìn)入Targets(目標(biāo)):
選中myserver,點(diǎn)擊Apply應(yīng)用按紐.
到這里config.xml文件就設(shè)置完了,下面需要編輯startWebLogic.cmd,加入對(duì)jolt jar的引用,否則jolt
是啟動(dòng)失敗的。在echo CLASSPATH=%CLASSPATH%前加入以下代碼,設(shè)置CLASSPATH,這里classpath跟外部環(huán)境
變量是兩碼事。
set CLASSPATH=%CLASSPATH%;E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar;E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar;E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar
設(shè)置完后,重啟服務(wù),在Eclipse管理WebLogic服務(wù)時(shí)如果出現(xiàn)啟動(dòng)關(guān)閉不成功,多試幾次就可以了。
在啟動(dòng)的console界面里如果出現(xiàn)以下內(nèi)容,就說(shuō)明jolt pool啟動(dòng)成功!
<2006-6-1 下午09時(shí)12分55秒 CST> <Notice> <WebLogicServer> <BEA-000327> <Starting WebLogic Admin Server "webServer" for domain "WebServer">
Jolt pool deployed for webServer
<2006-6-1 下午09時(shí)13分13秒 CST> <Notice> <Security>...
------------------------
八、Eclipse3.1編寫Servlet代碼
------------------------
首先需要在所建工程->右鍵->Properties->Java BuildPath ->Library->Add External jars ..添加jolt的jar包
這里需要三個(gè)jar包,如下:
E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar
E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar
E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar
添加jar完后,建立一個(gè)主頁(yè)面index.jsp和一個(gè)Servlet。關(guān)于Eclipse3.1配置Servlet在《Eclipse3.1 Web開(kāi)發(fā)配置》
一文也有說(shuō)明。這里Servlet名為liwei.java,具體內(nèi)容如下:
index.jsp
<body>
<form id=form1 name="form1" action=liwei method=post>
<input type="text" name="STRING" value="1">
<input type=submit value=submit>
</form>
</body>
說(shuō)明:name要是STRING,用來(lái)傳遞參數(shù),action是liwei.java即Servlet。
liwei.java
public class liwei extends javax.servlet.http.HttpServlet
{
//聲明管理連接池的變量
private bea.jolt.pool.servlet.ServletSessionPoolManager bool_mgr = (bea.jolt.pool.servlet.ServletSessionPoolManager) bea.jolt.pool.SessionPoolManager.poolmgr;
public void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException
{
//初始化servlet
super.init(config);
}
public void destroy() {
//關(guān)閉servlet
bool_mgr = null;
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException
{
bea.jolt.pool.servlet.ServletResult result;
//設(shè)置頁(yè)面類型,如果沒(méi)有charset,顯示漢字會(huì)亂碼
response.setContentType("text/html;charset=UTF-8");
java.io.PrintWriter out =response.getWriter();
out.println("<html>");
out.println("<body>");
//System.out.println("TEST________________________1");
//獲取在WebLogic服務(wù)定義好的連接池,JoltPool
bea.jolt.pool.servlet.ServletSessionPool pool_session = (bea.jolt.pool.servlet.ServletSessionPool)
bool_mgr.getSessionPool("JoltPool");
if (pool_session == null) {
out.println("獲取Tuxedo服務(wù)失敗。"+
"<br>"+
"確認(rèn)Tuxedo服務(wù)已啟動(dòng)且配置正確。"+
"</font></body></html>");
out.close();
return;
}
System.out.println(pool_session);
String sendvalue;
sendvalue=request.getParameter("STRING");
System.out.println(sendvalue);
// 調(diào)用服務(wù)
try
{
System.out.println("OK!");
//調(diào)用服務(wù)DBREAD
result = pool_session.call("DBREAD", request);
out.println("傳遞的參數(shù) = " + sendvalue);
out.println("Tuxedo服務(wù)成功調(diào)用。 ");
//跟據(jù)傳遞的變量STRING值,獲取返回值
out.println("返回值:"+result.getValue("STRING", ""));
}
catch (bea.jolt.pool.SessionPoolException e)
{
// 連接池繁忙
out.println("此時(shí)請(qǐng)求不能被處理。\n"+
"錯(cuò)誤信息: "+e.getMessage()+"\n"+
"可能的原因:1.無(wú)效的連接池 2.連接池已關(guān)閉");
}
catch (bea.jolt.pool.ServiceException e)
{
// 服務(wù)出錯(cuò),這里主要是Tuxedo的服務(wù)配置,jrepository文件出錯(cuò)
e.printStackTrace();
out.println("錯(cuò)誤信息:"+
"Error message:"+e.getMessage()+
"Error number:"+e.getErrno());
}
catch (bea.jolt.pool.ApplicationException e)
{
// 應(yīng)用程序出錯(cuò)
result = (bea.jolt.pool.servlet.ServletResult) e.getResult();
out.println("錯(cuò)誤代碼:"+result.getApplicationCode());
}
catch (Exception e)
{
out.println("意外錯(cuò)誤:"+e);
}
out.println("</body></html>\n");
out.close();
}
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException
{
this.doGet(request,response);
}
}
------------------------
九、RUN
------------------------
Run on server ,點(diǎn)擊Submit,顯示 傳遞的參數(shù) = 1 Tuxedo服務(wù)成功調(diào)用。 返回值:aaaaaaa !
=======================
Java通過(guò)Jolt訪問(wèn)Tuxedo服務(wù)-補(bǔ)充說(shuō)明
草木瓜
2006-6-2
一、頁(yè)面參數(shù)文件說(shuō)明以及通過(guò)WebLogic調(diào)用Tuxedo服務(wù)
《Java通過(guò)Jolt訪問(wèn)Tuxedo服務(wù)》一文是在Eclipse環(huán)境下開(kāi)發(fā)調(diào)用Tuxedo服務(wù)。
其中在index.asp和liwei.java中有這么幾句語(yǔ)句:
index.asp
<form id=form1 name="form1" action=liwei method=post>
<input type="text" name="STRING" value="1">
<input type=submit value=submit>
liwei.java
//跟據(jù)傳遞的變量STRING值,獲取返回值
out.println("返回值:"+result.getValue("STRING", ""));
這兩段的STRING是不可以隨便替換的,這必須與E:\bea\tuxedo9.0\udataobj\jolt\repository
下jrepository文件描述的服務(wù)參數(shù)相一致!且必須為大寫!即:
add SVC/DBREAD:vs=1:ex=1:bt=STRING:\
bp:pn=STRING:pt=string:pf=167772161:pa=rw:ep: //這里面定義的參數(shù)就是STRING
add PKG/SIMPSERV:DBREAD:
下面用WebLogic對(duì)Tuxedo服務(wù)調(diào)用再詳細(xì)的舉例說(shuō)明。
WebLogic通過(guò)jolt調(diào)用Tuxedo服務(wù),有了上文的前提就顯得很容易,說(shuō)白了只是Servlet與Jsp的一點(diǎn)
小轉(zhuǎn)換。除了最后一步在Eclipse3.1編寫Servlet代碼,其他的前提步驟是必須的。WebLogic要使用
Jolt接口,同樣需要jolt,joltjse,joltwls三個(gè)jar包,將它們Copy到WEB-INF下的lib文件夾即可。
以下是完整的示例,參數(shù)名用大寫的TEST。
index.jsp
---------------------------------
<form action="_test/testTuxedo.jsp" method="post">
<p>
<input type="text" value="1" name="TEST" id="text1"><input type="submit" value="tuxedo">
</p>
</form>
testTuxedo.jsp
---------------------------------
<body>
<p>
<%
bea.jolt.pool.servlet.ServletSessionPoolManager bool_mgr = (bea.jolt.pool.servlet.ServletSessionPoolManager) bea.jolt.pool.SessionPoolManager.poolmgr;
bea.jolt.pool.servlet.ServletResult result;
//獲取在WebLogic服務(wù)定義好的連接池
bea.jolt.pool.servlet.ServletSessionPool pool_session = (bea.jolt.pool.servlet.ServletSessionPool)
bool_mgr.getSessionPool("JoltPool");
if (pool_session == null) {
out.println("獲取Tuxedo服務(wù)失敗。"+
"<br>"+
"確認(rèn)Tuxedo服務(wù)已啟動(dòng)且配置正確。");
out.close();
return;
}
// 調(diào)用服務(wù)
try
{
result = pool_session.call("DBREAD", request);
System.out.println("OK!");
out.println("傳遞的參數(shù) = " + sendvalue);
out.println("Tuxedo服務(wù)成功調(diào)用。 ");
out.println("返回值:"+result.getValue("TEST", ""));
}
catch (bea.jolt.pool.SessionPoolException e)
{
// 連接池繁忙
out.println("此時(shí)請(qǐng)求不能被處理。\n"+
"錯(cuò)誤信息: "+e.getMessage()+"\n"+
"可能的原因:1.無(wú)效的連接池 2.連接池已關(guān)閉");
}
catch (bea.jolt.pool.ServiceException e)
{
// 服務(wù)出錯(cuò)
e.printStackTrace();
out.println("Error:"+
"Error message:"+e.getMessage()+
"Error number:"+e.getErrno());
}
catch (bea.jolt.pool.ApplicationException e)
{
// 應(yīng)用程序出錯(cuò)
result = (bea.jolt.pool.servlet.ServletResult) e.getResult();
out.println("錯(cuò)誤代碼:"+result.getApplicationCode());
}
catch (Exception e)
{
out.println("意外錯(cuò)誤:"+e);
}
%>
</p>
</body>
二、典型的服務(wù)應(yīng)用
Oracle服務(wù)器 192.168.0.111
Tuxedo服務(wù)器 192.168.0.66
Web服務(wù)器
通過(guò)Web客戶端訪問(wèn)Web服務(wù)器,調(diào)用Tuxedo服務(wù)訪問(wèn)數(shù)據(jù)庫(kù)
1.配置Tuxedo服務(wù)器的Oracle連接字符串(TNSNAME)。注意Oracle服務(wù)器的防火墻
WINDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = wincn)
)
)
2.配置Tuxedo的jrepository文件
3.配置Tuxedo的Config文件,JSR服務(wù)的IP與端口要與本地IP一致。
JSL SRVGRP=JSLGRP SRVID=301
CLOPT="-A -- -n //192.168.0.66:9988 -M 10 -x 10 -m 2"
4.配置Web服務(wù)器的WebServer,config.xml中ip與端口即為Tuxedo服務(wù)器的JSR服務(wù)IP與端口
注意Tuxedo服務(wù)器的防火墻。
<JoltConnectionPool FailoverAddresses="http://192.168.0.66:9988"
MaximumPoolSize="2" MinimumPoolSize="1" Name="JoltPool"
PrimaryAddresses="http://192.168.0.66:9988"
SecurityContextEnabled="false" Targets="webServer"/>