- 浏览: 25315 次
- 性别:
- 来自: 杭州
最新评论
-
xiangxingchina:
困扰我一天的问题啊 谢谢了
linux环境 关于总报错说缺少mysql.sock的问题 -
gaobo:
好深奥啊,一看就是高人
linux环境 关于总报错说缺少mysql.sock的问题
BEA公司的TUXEDO,WEBLOGIC作为最优秀的中间件产品,在银行、电信、金融等行业广泛使用,通常采用TUXEDO实现系
统的核心业务,用 WEBLOGIC做为系统扩展到INTERNET的平台,实现电子商务,由WEBLOGIC调用TUXEDO上的服务,所以
TUXEDO与 WEBLOGIC之间的互连经常遇到。下面通过一个例子介绍TUXEDO与WEBLOGIC通过WTC进行连接的配置方法。
WEBLOGIC与TUXEDO的互连有两中方式,通过JOLT或通过WTC(WEBLOGIC TUXEDO CONNECTOR)。它们都是BEA的产品,WTC
不仅能让WEBLOGIC调用TUXEDO中的SERVICE,而且能让TUXEDO调用 WEBLOGIC中的EJB;而JOLT只能让WEBLOGIC调用
TUXEDO. 但JOLT可以使TUXEDO与WEBSPERE等其他应用服务器相连,而WTC只能用于WEBLOGIC与TUXEDO之间进行互连。
一、WTC说明
(1)WEBLOIGIC5.1无法通过WTC与TUXEDO连接.
(2)WEBLOGIC6.0与TUXEDO连接时,要安装WTC软件包.
(3)WTC已集成在在EBLOGIC6.1中,只要配置一下就可以了,不用单独安装WTC软件包.
(4)目前WTC只支持TUXEDO6.5,TUXEDO8.0两个版本,不支持TUXEDO7.1版本.
(5)目前WTC有两个版本, Windows版本支持2000/NT,UNIX为统一版本.
(6)WTC可从http://commerce.bea .com/downloads/tuxedo.jsp下载,目前的版本为1.0.
二、WTC安装过程
(1) WEBLOGIC与TUXEDO必须先安装好.
(2)WTC要求在JAVA环境下安装,可在命令行下,运行weblogic主目录下config/EXAMPLE/setEnv.sh(NT/2000 下为
setenv.cmd)配置JAVA环境
(3)在DOS命令行下执行安装程序WTC_10_win.exe。按提示操作就可以. 注意:如果在WINDOW下安装,到COPY文件那一步
时,不会执行,但提示安装成功,实际是假的。所以应在DOS命令行下安装.
三、WTC配置说明 TUXEDO与WEBLOGIC之间通过DOMAIN方式实现互相调用,在这个例子中有两个DOMAIN:TUXEDO所在的
DOMAIN名为 TDOM1, WEBLOGIC所在的 DOMAIN名为TDOM2。TDOM1上有TOUPPER它是一个TUXEDO SERVEICE,TDOM2上有
TOLOWER它是一个EJB,下面以WTC安装带的例子simpapp(在WTC安装目录的examples/wtc/atmi/simpapp下)说明配置过
程: TUXEO版本: TUXEDO65 WEBLOGIC版本: WEBLOGIC6.0 TUXEO安装目录: D:\TUXEDO65 WEBLOGIC安装目录:
D:\WEBLOGIC 操作系统: WIN2000 例子目录: D:\SIMPAPP(把WTC安装目录的examples/wtc/atmi/simpapp目录COPY到
D:\SIMPAPP) 服务器名: DEMOSERVER WTC安装目录: D:\WEBLOGIC \WTC1.0
四、TUXEDO要做的配置
(1)修改D:\SIMPAPP\SETENV.CMD为: set TUXDIR=d:\tuxedo65 set WSNADDR=//DEMOSERVER:8888 set
APPDIR=d:\simpapp set PATH=%TUXDIR%\bin;%APPDIR%;%PATH% set TUXCONFIG=%APPDIR%\tuxconfig set
BDMCONFIG=%APPDIR%/dbmconfig
(2)修改D:\SIMPAPP\UBBDOMAIN为:
*RESOURCES
IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEMOSERVER LMID=simple
APPDIR="d:\simpapp"
TUXCONFIG="d:\simpapp\tuxconfig"
TUXDIR="d:\tuxedo65"
*GROUPS
GROUP1 LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS DEFAULT: CLOPT="-A" simpserv SRVGRP=GROUP1 SRVID=1 *SERVICES TOUPPER
(3)修改D:\SIMPAPP\DOM1CONFIG: 修改dom1config,加入TLOG的路径 和AUDITLOG的路径。
然后修改TDOM1的NWADDR="IP:PORT"为TUXEDO的IP和端口,TDOM2的 NWADDR="IP:PORT"为WEBLOGIC的IP和端口。
*DM_RESOURCES VERSION=U22
*DM_LOCAL_DOMAINS T
DOM1 GWGRP=GROUP2 TYPE=TDOMAIN DOMAINID="TDOM1" BLOCKTIME=20 MAXDATALEN=56 MAXRDOM=89
TLOG="d:\simpapp\TLOG" AUDITLOG="d:\simpapp\AUDITLOG" *DM_REMOTE_DOMAINS TDOM2 TYPE=TDOMAIN
DOMAINID="TDOM2" *DM_TDOMAIN TDOM1 NWADDR="//DEMOSERVER:9998" TDOM2 NWADDR="//DEMOSERVER:9999"
*DM_REMOTE_SERVICES TOLOWER RDOM="TDOM2"
(4) tmloadcf -y ubbdomain
(5) dmloadcf -y dom1config
(6)buildserver -o simpserv -f simpserv.c -s TOUPPER
(7)将examples/wtc/atmi/simpapp/simpserv下的tolower.c 拷贝到D:\SIMPAPP,并执行buildclinet -v -f
tolower.c -o tolower
五、WEBLOGIC要做的配置
(1)修改weblogic目录下config/examples/setExamplesEnv.cmd及startExamplesServer.cmd,在CLASSPATH中加入:
d:\weblogic\wtc1.0\lib/jatmi.jar。执行setExamplesEnv.cmd
(2)修改bdmconfig.xml 修改<!DOCTYPE>中的:[WTC installation directory]
\weblogic\wtc\gwt\wtc_config_1_0.dtd(WLS60) 修改TDOM1和TDOM2的NWADDR和TUXEDO中的dom1config中的一致如果
tuxedo为6.5版本则在<T_DM_LOCAL_TDOMAIN AccessPoint="TDOM2">中加入<Interoperate>Yes</Interoperate>如果为
TUXEOD8.0则不需要。
(3)修改后的bdmconfig.xml内容如下:
<?xml version="1.0"?>
<!DOCTYPE BDMCONFIG SYSTEM "file:D:\weblogic\wtc1.0\weblogic\wtc\gwt\wtc_config_1_0.dtd">
<!--Java and XML-->
<WTC_CONFIG>
<BDMCONFIG>
<T_DM_LOCAL_TDOMAIN AccessPoint="TDOM2">
<WlsClusterName>Coolio</WlsClusterName>
<AccessPointId>TDOM2& lt;/AccessPointId>
<Type>TDOMAIN</Type>
<Security>NONE</Security>
<ConnectionPolicy>ON_DEMAND</ConnectionPolicy>
<BlockTime>30</BlockTime>
<NWAddr>//DEMOSERVER:9999</NWAddr>
<!-- Example address: //mydomain.acme.com:9999 -->
<Interoperate>Yes</Interoperate>
</T_DM_LOCAL_TDOMAIN>
<T_DM_REMOTE_TDOMAIN AccessPoint="TDOM1">
<LocalAccessPoint>TDOM2</LocalAccessPoint>
<AccessPointId>TDOM1</AccessPointId>
<Type>TDOMAIN</Type>
<NWAddr>//DEMOSERVER:9998</NWAddr>
<!-- Example address: //mydomain.acme.com:9998 --> </T_DM_REMOTE_TDOMAIN>
<T_DM_EXPORT ResourceName="TOLOWER" LocalAccessP oint="TDOM2">
<EJBName>tuxedo.services.TOLOWERHome</EJBName> </T_DM_EXPORT> <T_DM_IMPORT ResourceName="TOUPPER"
LocalAccessPoint="TDOM2" RemoteAccessPointList="TDOM1"> <TranTime>600</TranTime> </T_DM_IMPORT>
</BDMCONFIG> </WTC_CONFIG> (4)执行java weblogic.wtc.gwt.WTCValidateCF bdmconfig.xml监测xml是否正确。
(5)在D:\SIMPAPP下执行build命令,然后在D:\weblogic\wtc1.0\examples\simpserv下执行build命令
(6)启动welogic
(7)察看wtc_tolower.jar、wtc_toupper.jar是否deploy成功
(8)建立一个WEBLOGIC StartUp Class: classname为 weblogic.wtc.gwt.WTCStartup 参数为
BDMCONFIG=D:\SIMPAPP\bdmconfig.xml,并设置其TARGET为EXAMPLESERVER
(9)建立一个WEBLOGIC ShutDown Class: classname为weblogic.wtc.gwt.WTCShutdown,并设置其TARGET为
EXAMPLESERVER
(10)重新启动we blogic,并注意WEBLOGIC的启动日志看StartUp Class启动过程是否成功,失败会报错,成功没有提示信
息 如果失败没有检查config.xml中是否为 <StartupClass Arguments="BDMCONFIG=d:\wtc_load4
\examples\simpapp\bdmconfig.xml" ClassName="weblogic.wtc1.0.gwt.WTCStartup" FailureIsFatal="false"
Name="MyWTCStartup Class" Targets="myserver"/> <ShutdownClass Arguments=""
ClassName="weblogic.wtc1.0.gwt.WTCShutdown" Name="MyWTCShutdown Class"/>
六、启动tuxedo 七、运行例子 在d:/simpapp下执行run.cmd,这是WEBLOGIC 做CLIENT端调用Toupper ejb,由Toupper
ejb调用TUXEDO的SERVICE:TOUPPER 在d:/simpapp下执行run.cmd,这是TUXEDO做CLIENT端调用WEBLOGIC中的Tolower
ejb,八、如果是WEBLOGIC6.1 TUXEDO的配置不变 WEBLOGIC中从(2)开始配置.其中:DMCONFIG.XML中的,因为
WEBLOGIC6.1中找不到wtc_config_1_0.dtd, 可从WEBLOGIC6.1拷贝一个到WEBLOGIC6.1的安装目录下: 如
D:\WEBLOGIC6.1,并在DMCONFIG.XML指定它的路径 <!DOCTYPE BDMCONFIG SYSTEM "file:D:\weblogic6.1
\wtc_config_1_0.dtd"> 九、失败处理 如果失败,可设置weblogic.wtc.gwt.WTCStartup的跟踪选项,即把它的参数设
置为: BDMCONFIG=D:\simpapp\bdmconfig.xml,TraceLevel=20000 并请查看WEBLOGIC,TUXEDO的日志.做相应的处理。
=============================================================================
概述
tuxedo是很好的一用服务器,很灵活扩展和伸缩性能,能很好地和别的tuxedo结合。但是提供一个可以才作用的界面来使用tuxedo服务呢?必须用应用程序调用服务,然后把结果展示给用户,提供用户操作。
可以用wtc将weblogic和tuxedo连接起来,将web应用部署在weblogic上,通过wtc调用tuxedo服务。但是这样有个限制,就是必须weblogic。
还可以采用一个中间件,比如apache,开发fastcgi程序调用tuxedo服务。由于cgi采用http协议承载,有很强的通用性,这样再终端不管是windows,tomcat都很很好地调用fastcgi,展示终端平台将不受限制。
这儿只讲解wtc的使用。
环境概述:
tuxedo,weblogic都在一台主机上,操作系统是winxp,软件tuxedo8.1,weblogic8.1,ip=192.168.1.110
tuxedo配置和源代码:
ubbconfig内容:
*RESOURCES
IPCKEY 123456
DOMAINID chenli
MASTER chenli
MAXACCESSERS 500
MAXSERVERS 200
MAXSERVICES 100
MAXGTT 50
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="D:\bea\tuxedo8.1\apps\simpapp"
TUXCONFIG="D:\bea\tuxedo8.1\apps\simpapp\tuxconfig"
TUXDIR="D:\bea\tuxedo8.1"
ULOGPFX="D:\bea\tuxedo8.1\apps\simpapp\log.txt"
MAXWSCLIENTS=40
#<Machine-name>
CHENLI LMID=chenli
*GROUPS
GROUP1 LMID=chenli GRPNO=1 OPENINFO=NONE
LGWGRP LMID=chenli GRPNO=2 OPENINFO=NONE
LDMGRP LMID=chenli GRPNO=4 OPENINFO=NONE
*SERVERS
simpserv CLOPT="-A" SRVGRP=GROUP1 SRVID=1 MIN = 1 MAX = 5
DMADM SRVGRP=LDMGRP SRVID=200
GWADM SRVGRP=LGWGRP SRVID=310
GWTDOMAIN SRVGRP=LGWGRP SRVID=330
WSL SRVGRP=GROUP1 SRVID=100 CLOPT="-A -- -n //192.168.1.100:9005 -m1 -M10 -x5"
*SERVICES
SERV_TEST
TOUPPER
LDOMAIN_TEST
domain配置dmconfig内容
*DM_LOCAL_DOMAINS
TDOM01 GWGRP=LGWGRP
TYPE=TDOMAIN
DOMAINID="TDOM01"
DMTLOGDEV="D:\bea\tuxedo8.1\apps\simpapp\dlog1.txt"
*DM_REMOTE_DOMAINS
TDOM02 TYPE=TDOMAIN DOMAINID="TDOM02"
TDOM03 TYPE=TDOMAIN DOMAINID="TDOM03"
*DM_TDOMAIN
TDOM03 NWADDR="//192.168.1.100:9998"
TDOM02 NWADDR="//192.168.1.113:3071"
TDOM01 NWADDR="//192.168.1.100:3070"
*DM_REMOTE_SERVICES
DOMAIN_TEST RDOM=TDOM02 RNAME="DOMAIN_TEST"
*DM_LOCAL_SERVICES
TOUPPER LACCESSPOINT="TDOM01"
LDOMAIN_TEST LACCESSPOINT="TDOM01"
domain解说,注意通过DM_REMOTE_SERVICES从别的tuxedo导入的服务,不能直接导出,否在会出现调用错误。
在这个例子中,由于需要用到DOMAIN_TEST服务的功能,所以本例通过在tuxedo上提供一个LDOMAIN_TEST服务,在LDOMAIN_TEST中调用DOMAIN_TEST,再把结果返回。
服务端程序simpserv.c:
/* (c) 2003 BEA Systems, Inc. All Rights Reserved. */
/* Copyright (c) 1997 BEA Systems, Inc.
All rights reserved
THIS IS UNPUBLISHED PROPRIETARY
SOURCE CODE OF BEA Systems, Inc.
The copyright notice above does not
evidence any actual or intended
publication of such source code.
*/
/* #ident "@(#) samples/atmi/simpapp/simpserv.c $Revision: 1.5 $" */
#include <stdio.h>
#include <ctype.h>
#include <atmi.h> /* TUXEDO Header File */
#include <userlog.h> /* TUXEDO Header File */
#include "data.h"
/* tpsvrinit is executed when a server is booted, before it begins
processing requests. It is not necessary to have this function.
Also available is tpsvrdone (not used in this example), which is
called at server shutdown time.
*/
#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
/* 如果没有argc、argv一些编译系统会有警告信息. */
/* Some compilers warn if argc and argv aren''t used. */
argc = argc;
argv = argv;
/* userlog 把tuxedo消息写入日志文件中 */
/* userlog writes to the central TUXEDO message log */
userlog("Welcome to the simple server");
return(0);
}
/* This function performs the actual service requested by the client.
Its argument is a structure containing among other things a pointer
to the data buffer, and the length of the data buffer.
*/
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
SERV_TEST(TPSVCINFO *rqst) /*tuxedo服务名字SERV_TEST*/
#else
SERV_TEST(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
int x;
trans_data_t buf_data;
char *data = "how are you?";
char *ref;
int len = strlen(data) + 1;
userlog("start proccess SERV_TEST service");
ref = (char *)malloc(len);
strcpy(ref, data);
userlog("rqst->len=%d\n", rqst->len);
memcpy(&buf_data, rqst->data, sizeof(trans_data_t));
userlog("receive string:%s", rqst->data);
userlog("receive name:%s", buf_data.name);
userlog("receive age:%d", buf_data.age);
buf_data.age += 100;
memcpy(rqst->data, &buf_data, sizeof(trans_data_t));
//data = rqst->data;
/* Return the transformed buffer to the requestor. */
/* 设置返回客户端buffer */
tpreturn(TPSUCCESS, 0, rqst->data, sizeof(trans_data_t), 0);
free(ref);
}
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
TOUPPER(TPSVCINFO *rqst)
#else
TOUPPER(rqst)
TPSVCINFO *rqst;
#endif
{
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);
}
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
LDOMAIN_TEST(TPSVCINFO *rqst)
#else
LDOMAIN_TEST(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
char *sendbuf, *rcvbuf;
long sendlen, rcvlen;
int ret;
rcvlen = sendlen = strlen(rqst->data);
if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating send buffer\n");
tpterm();
exit(1);
}
if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating receive buffer\n");
tpfree(sendbuf);
tpterm();
exit(1);
}
(void) strcpy(sendbuf, rqst->data);
ret = tpcall("DOMAIN_TEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
if(ret == -1) {
(void) fprintf(stderr, "Can''t send request to service DOMAIN_TEST\n");
(void) fprintf(stderr, "Tperrno = %d\n", tperrno);
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
(void) strcpy(rqst->data, rcvbuf);
/*
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);
}
编译服务端程序
buildserver -o simpserv -f simpserv.c -s SERV_TEST -s TOUPPER -s LDOMAIN_TEST
编译ubbconfig,dmconfig
tmloadcf -y ubbconfig
dmloadcf -y dmconfig
weblogic配置
在weblogic目录下,打开config.xml添加如下内容,建立wtc连接。
<WTCServer Name="MyWTCServer" Targets="myserver">
<WTCLocalTuxDom AccessPoint="TDOM03" AccessPointId="TDOM03"
NWAddr="//192.168.1.100:9998" Name="WTCLocalTuxDom-1111629491418"/>
<WTCRemoteTuxDom AccessPoint="TDOM01" AccessPointId="TDOM01"
LocalAccessPoint="TDOM03" NWAddr="//192.168.1.100:3070" Name="WTCRemoteTuxDom-1055574870891"/>
<!--===================tuxedo服务列表====================-->
<WTCExport EJBName="wtcservice" LocalAccessPoint="TDOM03"
Name="WTCExport-1111629542315" ResourceName="TOLOWER"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013932"
RemoteAccessPointList="TDOM01" RemoteName="TOUPPER" ResourceName="TOUPPER"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013933"
RemoteAccessPointList="TDOM01" RemoteName="TOUPPER" ResourceName="TEST"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013934"
RemoteAccessPointList="TDOM01" RemoteName="LDOMAIN_TEST" ResourceName="LDOMAIN_TEST"/>
</WTCServer>
注意,要定义WTCLocalTuxDom,WTCRemoteTuxDom,在这两个节点中AccessPoint和AccessPointId分别对应tuxedo端的DM_REMOTE_DOMAINS,DM_LOCAL_DOMAINS的名字,NWAddr指定的ip地址和端口号也要配对。
最后用WTCImport导入tuxedo在domain中导出的服务,注意RemoteAccessPointList指定的值,必须是前面定义的WTCRemoteTuxDom,RemoteName指定domain导出的服务名字,ResourceName是在weblogic上可见的服务名,在weblogic上通过调用wtc调用tuxedo的时候,必须使用ResourceName指定的服务名字。
在每个节点中,都有Name属性,注意该属性的名字必须唯一,所以在添加节点的时候,不能简单的拷贝,必须注意修改该属性,保证唯一。
最后启动tuxedo服务和weblogic。
在weblogic下部署一个web应用,测试wtc连接。
编写一个jsp测试页面,代码内容如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="weblogic.wtc.jatmi.*"%>
<%@ page import="weblogic.wtc.gwt.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.sql.*"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>wtc测试,weblogic客户端</title>
</head>
<body>
<%
java.util.Date date=new java.util.Date();
String strErr = new String();
String outStr = new String();
String inStr = "hello,world!";
%>
<%=(date.getYear()+1900)%>年<%=date.getMonth()+1%>月<%=date.getDate()%>日</n>
<%
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("TOUPPER", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试TOUPPER服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
<%
outStr = "";
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("TEST", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试TEST服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
<%
outStr = "";
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("LDOMAIN_TEST", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试LDOMAIN_TEST服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
</body>
</html>
在ie上面打开请求web应用的该页面,查看显示结果。如果有错误,根据显示的错误信息和weblogic标准输出的错误信息更改配置,解决问题。
文章出处:DIY部落(http://www.diybl.com/course/1_web/webjs/200855/114446.html)
统的核心业务,用 WEBLOGIC做为系统扩展到INTERNET的平台,实现电子商务,由WEBLOGIC调用TUXEDO上的服务,所以
TUXEDO与 WEBLOGIC之间的互连经常遇到。下面通过一个例子介绍TUXEDO与WEBLOGIC通过WTC进行连接的配置方法。
WEBLOGIC与TUXEDO的互连有两中方式,通过JOLT或通过WTC(WEBLOGIC TUXEDO CONNECTOR)。它们都是BEA的产品,WTC
不仅能让WEBLOGIC调用TUXEDO中的SERVICE,而且能让TUXEDO调用 WEBLOGIC中的EJB;而JOLT只能让WEBLOGIC调用
TUXEDO. 但JOLT可以使TUXEDO与WEBSPERE等其他应用服务器相连,而WTC只能用于WEBLOGIC与TUXEDO之间进行互连。
一、WTC说明
(1)WEBLOIGIC5.1无法通过WTC与TUXEDO连接.
(2)WEBLOGIC6.0与TUXEDO连接时,要安装WTC软件包.
(3)WTC已集成在在EBLOGIC6.1中,只要配置一下就可以了,不用单独安装WTC软件包.
(4)目前WTC只支持TUXEDO6.5,TUXEDO8.0两个版本,不支持TUXEDO7.1版本.
(5)目前WTC有两个版本, Windows版本支持2000/NT,UNIX为统一版本.
(6)WTC可从http://commerce.bea .com/downloads/tuxedo.jsp下载,目前的版本为1.0.
二、WTC安装过程
(1) WEBLOGIC与TUXEDO必须先安装好.
(2)WTC要求在JAVA环境下安装,可在命令行下,运行weblogic主目录下config/EXAMPLE/setEnv.sh(NT/2000 下为
setenv.cmd)配置JAVA环境
(3)在DOS命令行下执行安装程序WTC_10_win.exe。按提示操作就可以. 注意:如果在WINDOW下安装,到COPY文件那一步
时,不会执行,但提示安装成功,实际是假的。所以应在DOS命令行下安装.
三、WTC配置说明 TUXEDO与WEBLOGIC之间通过DOMAIN方式实现互相调用,在这个例子中有两个DOMAIN:TUXEDO所在的
DOMAIN名为 TDOM1, WEBLOGIC所在的 DOMAIN名为TDOM2。TDOM1上有TOUPPER它是一个TUXEDO SERVEICE,TDOM2上有
TOLOWER它是一个EJB,下面以WTC安装带的例子simpapp(在WTC安装目录的examples/wtc/atmi/simpapp下)说明配置过
程: TUXEO版本: TUXEDO65 WEBLOGIC版本: WEBLOGIC6.0 TUXEO安装目录: D:\TUXEDO65 WEBLOGIC安装目录:
D:\WEBLOGIC 操作系统: WIN2000 例子目录: D:\SIMPAPP(把WTC安装目录的examples/wtc/atmi/simpapp目录COPY到
D:\SIMPAPP) 服务器名: DEMOSERVER WTC安装目录: D:\WEBLOGIC \WTC1.0
四、TUXEDO要做的配置
(1)修改D:\SIMPAPP\SETENV.CMD为: set TUXDIR=d:\tuxedo65 set WSNADDR=//DEMOSERVER:8888 set
APPDIR=d:\simpapp set PATH=%TUXDIR%\bin;%APPDIR%;%PATH% set TUXCONFIG=%APPDIR%\tuxconfig set
BDMCONFIG=%APPDIR%/dbmconfig
(2)修改D:\SIMPAPP\UBBDOMAIN为:
*RESOURCES
IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEMOSERVER LMID=simple
APPDIR="d:\simpapp"
TUXCONFIG="d:\simpapp\tuxconfig"
TUXDIR="d:\tuxedo65"
*GROUPS
GROUP1 LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS DEFAULT: CLOPT="-A" simpserv SRVGRP=GROUP1 SRVID=1 *SERVICES TOUPPER
(3)修改D:\SIMPAPP\DOM1CONFIG: 修改dom1config,加入TLOG的路径 和AUDITLOG的路径。
然后修改TDOM1的NWADDR="IP:PORT"为TUXEDO的IP和端口,TDOM2的 NWADDR="IP:PORT"为WEBLOGIC的IP和端口。
*DM_RESOURCES VERSION=U22
*DM_LOCAL_DOMAINS T
DOM1 GWGRP=GROUP2 TYPE=TDOMAIN DOMAINID="TDOM1" BLOCKTIME=20 MAXDATALEN=56 MAXRDOM=89
TLOG="d:\simpapp\TLOG" AUDITLOG="d:\simpapp\AUDITLOG" *DM_REMOTE_DOMAINS TDOM2 TYPE=TDOMAIN
DOMAINID="TDOM2" *DM_TDOMAIN TDOM1 NWADDR="//DEMOSERVER:9998" TDOM2 NWADDR="//DEMOSERVER:9999"
*DM_REMOTE_SERVICES TOLOWER RDOM="TDOM2"
(4) tmloadcf -y ubbdomain
(5) dmloadcf -y dom1config
(6)buildserver -o simpserv -f simpserv.c -s TOUPPER
(7)将examples/wtc/atmi/simpapp/simpserv下的tolower.c 拷贝到D:\SIMPAPP,并执行buildclinet -v -f
tolower.c -o tolower
五、WEBLOGIC要做的配置
(1)修改weblogic目录下config/examples/setExamplesEnv.cmd及startExamplesServer.cmd,在CLASSPATH中加入:
d:\weblogic\wtc1.0\lib/jatmi.jar。执行setExamplesEnv.cmd
(2)修改bdmconfig.xml 修改<!DOCTYPE>中的:[WTC installation directory]
\weblogic\wtc\gwt\wtc_config_1_0.dtd(WLS60) 修改TDOM1和TDOM2的NWADDR和TUXEDO中的dom1config中的一致如果
tuxedo为6.5版本则在<T_DM_LOCAL_TDOMAIN AccessPoint="TDOM2">中加入<Interoperate>Yes</Interoperate>如果为
TUXEOD8.0则不需要。
(3)修改后的bdmconfig.xml内容如下:
<?xml version="1.0"?>
<!DOCTYPE BDMCONFIG SYSTEM "file:D:\weblogic\wtc1.0\weblogic\wtc\gwt\wtc_config_1_0.dtd">
<!--Java and XML-->
<WTC_CONFIG>
<BDMCONFIG>
<T_DM_LOCAL_TDOMAIN AccessPoint="TDOM2">
<WlsClusterName>Coolio</WlsClusterName>
<AccessPointId>TDOM2& lt;/AccessPointId>
<Type>TDOMAIN</Type>
<Security>NONE</Security>
<ConnectionPolicy>ON_DEMAND</ConnectionPolicy>
<BlockTime>30</BlockTime>
<NWAddr>//DEMOSERVER:9999</NWAddr>
<!-- Example address: //mydomain.acme.com:9999 -->
<Interoperate>Yes</Interoperate>
</T_DM_LOCAL_TDOMAIN>
<T_DM_REMOTE_TDOMAIN AccessPoint="TDOM1">
<LocalAccessPoint>TDOM2</LocalAccessPoint>
<AccessPointId>TDOM1</AccessPointId>
<Type>TDOMAIN</Type>
<NWAddr>//DEMOSERVER:9998</NWAddr>
<!-- Example address: //mydomain.acme.com:9998 --> </T_DM_REMOTE_TDOMAIN>
<T_DM_EXPORT ResourceName="TOLOWER" LocalAccessP oint="TDOM2">
<EJBName>tuxedo.services.TOLOWERHome</EJBName> </T_DM_EXPORT> <T_DM_IMPORT ResourceName="TOUPPER"
LocalAccessPoint="TDOM2" RemoteAccessPointList="TDOM1"> <TranTime>600</TranTime> </T_DM_IMPORT>
</BDMCONFIG> </WTC_CONFIG> (4)执行java weblogic.wtc.gwt.WTCValidateCF bdmconfig.xml监测xml是否正确。
(5)在D:\SIMPAPP下执行build命令,然后在D:\weblogic\wtc1.0\examples\simpserv下执行build命令
(6)启动welogic
(7)察看wtc_tolower.jar、wtc_toupper.jar是否deploy成功
(8)建立一个WEBLOGIC StartUp Class: classname为 weblogic.wtc.gwt.WTCStartup 参数为
BDMCONFIG=D:\SIMPAPP\bdmconfig.xml,并设置其TARGET为EXAMPLESERVER
(9)建立一个WEBLOGIC ShutDown Class: classname为weblogic.wtc.gwt.WTCShutdown,并设置其TARGET为
EXAMPLESERVER
(10)重新启动we blogic,并注意WEBLOGIC的启动日志看StartUp Class启动过程是否成功,失败会报错,成功没有提示信
息 如果失败没有检查config.xml中是否为 <StartupClass Arguments="BDMCONFIG=d:\wtc_load4
\examples\simpapp\bdmconfig.xml" ClassName="weblogic.wtc1.0.gwt.WTCStartup" FailureIsFatal="false"
Name="MyWTCStartup Class" Targets="myserver"/> <ShutdownClass Arguments=""
ClassName="weblogic.wtc1.0.gwt.WTCShutdown" Name="MyWTCShutdown Class"/>
六、启动tuxedo 七、运行例子 在d:/simpapp下执行run.cmd,这是WEBLOGIC 做CLIENT端调用Toupper ejb,由Toupper
ejb调用TUXEDO的SERVICE:TOUPPER 在d:/simpapp下执行run.cmd,这是TUXEDO做CLIENT端调用WEBLOGIC中的Tolower
ejb,八、如果是WEBLOGIC6.1 TUXEDO的配置不变 WEBLOGIC中从(2)开始配置.其中:DMCONFIG.XML中的,因为
WEBLOGIC6.1中找不到wtc_config_1_0.dtd, 可从WEBLOGIC6.1拷贝一个到WEBLOGIC6.1的安装目录下: 如
D:\WEBLOGIC6.1,并在DMCONFIG.XML指定它的路径 <!DOCTYPE BDMCONFIG SYSTEM "file:D:\weblogic6.1
\wtc_config_1_0.dtd"> 九、失败处理 如果失败,可设置weblogic.wtc.gwt.WTCStartup的跟踪选项,即把它的参数设
置为: BDMCONFIG=D:\simpapp\bdmconfig.xml,TraceLevel=20000 并请查看WEBLOGIC,TUXEDO的日志.做相应的处理。
=============================================================================
概述
tuxedo是很好的一用服务器,很灵活扩展和伸缩性能,能很好地和别的tuxedo结合。但是提供一个可以才作用的界面来使用tuxedo服务呢?必须用应用程序调用服务,然后把结果展示给用户,提供用户操作。
可以用wtc将weblogic和tuxedo连接起来,将web应用部署在weblogic上,通过wtc调用tuxedo服务。但是这样有个限制,就是必须weblogic。
还可以采用一个中间件,比如apache,开发fastcgi程序调用tuxedo服务。由于cgi采用http协议承载,有很强的通用性,这样再终端不管是windows,tomcat都很很好地调用fastcgi,展示终端平台将不受限制。
这儿只讲解wtc的使用。
环境概述:
tuxedo,weblogic都在一台主机上,操作系统是winxp,软件tuxedo8.1,weblogic8.1,ip=192.168.1.110
tuxedo配置和源代码:
ubbconfig内容:
*RESOURCES
IPCKEY 123456
DOMAINID chenli
MASTER chenli
MAXACCESSERS 500
MAXSERVERS 200
MAXSERVICES 100
MAXGTT 50
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="D:\bea\tuxedo8.1\apps\simpapp"
TUXCONFIG="D:\bea\tuxedo8.1\apps\simpapp\tuxconfig"
TUXDIR="D:\bea\tuxedo8.1"
ULOGPFX="D:\bea\tuxedo8.1\apps\simpapp\log.txt"
MAXWSCLIENTS=40
#<Machine-name>
CHENLI LMID=chenli
*GROUPS
GROUP1 LMID=chenli GRPNO=1 OPENINFO=NONE
LGWGRP LMID=chenli GRPNO=2 OPENINFO=NONE
LDMGRP LMID=chenli GRPNO=4 OPENINFO=NONE
*SERVERS
simpserv CLOPT="-A" SRVGRP=GROUP1 SRVID=1 MIN = 1 MAX = 5
DMADM SRVGRP=LDMGRP SRVID=200
GWADM SRVGRP=LGWGRP SRVID=310
GWTDOMAIN SRVGRP=LGWGRP SRVID=330
WSL SRVGRP=GROUP1 SRVID=100 CLOPT="-A -- -n //192.168.1.100:9005 -m1 -M10 -x5"
*SERVICES
SERV_TEST
TOUPPER
LDOMAIN_TEST
domain配置dmconfig内容
*DM_LOCAL_DOMAINS
TDOM01 GWGRP=LGWGRP
TYPE=TDOMAIN
DOMAINID="TDOM01"
DMTLOGDEV="D:\bea\tuxedo8.1\apps\simpapp\dlog1.txt"
*DM_REMOTE_DOMAINS
TDOM02 TYPE=TDOMAIN DOMAINID="TDOM02"
TDOM03 TYPE=TDOMAIN DOMAINID="TDOM03"
*DM_TDOMAIN
TDOM03 NWADDR="//192.168.1.100:9998"
TDOM02 NWADDR="//192.168.1.113:3071"
TDOM01 NWADDR="//192.168.1.100:3070"
*DM_REMOTE_SERVICES
DOMAIN_TEST RDOM=TDOM02 RNAME="DOMAIN_TEST"
*DM_LOCAL_SERVICES
TOUPPER LACCESSPOINT="TDOM01"
LDOMAIN_TEST LACCESSPOINT="TDOM01"
domain解说,注意通过DM_REMOTE_SERVICES从别的tuxedo导入的服务,不能直接导出,否在会出现调用错误。
在这个例子中,由于需要用到DOMAIN_TEST服务的功能,所以本例通过在tuxedo上提供一个LDOMAIN_TEST服务,在LDOMAIN_TEST中调用DOMAIN_TEST,再把结果返回。
服务端程序simpserv.c:
/* (c) 2003 BEA Systems, Inc. All Rights Reserved. */
/* Copyright (c) 1997 BEA Systems, Inc.
All rights reserved
THIS IS UNPUBLISHED PROPRIETARY
SOURCE CODE OF BEA Systems, Inc.
The copyright notice above does not
evidence any actual or intended
publication of such source code.
*/
/* #ident "@(#) samples/atmi/simpapp/simpserv.c $Revision: 1.5 $" */
#include <stdio.h>
#include <ctype.h>
#include <atmi.h> /* TUXEDO Header File */
#include <userlog.h> /* TUXEDO Header File */
#include "data.h"
/* tpsvrinit is executed when a server is booted, before it begins
processing requests. It is not necessary to have this function.
Also available is tpsvrdone (not used in this example), which is
called at server shutdown time.
*/
#if defined(__STDC__) || defined(__cplusplus)
tpsvrinit(int argc, char *argv[])
#else
tpsvrinit(argc, argv)
int argc;
char **argv;
#endif
{
/* 如果没有argc、argv一些编译系统会有警告信息. */
/* Some compilers warn if argc and argv aren''t used. */
argc = argc;
argv = argv;
/* userlog 把tuxedo消息写入日志文件中 */
/* userlog writes to the central TUXEDO message log */
userlog("Welcome to the simple server");
return(0);
}
/* This function performs the actual service requested by the client.
Its argument is a structure containing among other things a pointer
to the data buffer, and the length of the data buffer.
*/
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
SERV_TEST(TPSVCINFO *rqst) /*tuxedo服务名字SERV_TEST*/
#else
SERV_TEST(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
int x;
trans_data_t buf_data;
char *data = "how are you?";
char *ref;
int len = strlen(data) + 1;
userlog("start proccess SERV_TEST service");
ref = (char *)malloc(len);
strcpy(ref, data);
userlog("rqst->len=%d\n", rqst->len);
memcpy(&buf_data, rqst->data, sizeof(trans_data_t));
userlog("receive string:%s", rqst->data);
userlog("receive name:%s", buf_data.name);
userlog("receive age:%d", buf_data.age);
buf_data.age += 100;
memcpy(rqst->data, &buf_data, sizeof(trans_data_t));
//data = rqst->data;
/* Return the transformed buffer to the requestor. */
/* 设置返回客户端buffer */
tpreturn(TPSUCCESS, 0, rqst->data, sizeof(trans_data_t), 0);
free(ref);
}
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
TOUPPER(TPSVCINFO *rqst)
#else
TOUPPER(rqst)
TPSVCINFO *rqst;
#endif
{
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);
}
#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
LDOMAIN_TEST(TPSVCINFO *rqst)
#else
LDOMAIN_TEST(rqst)
TPSVCINFO *rqst;
#endif
{
int i;
char *sendbuf, *rcvbuf;
long sendlen, rcvlen;
int ret;
rcvlen = sendlen = strlen(rqst->data);
if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating send buffer\n");
tpterm();
exit(1);
}
if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {
(void) fprintf(stderr,"Error allocating receive buffer\n");
tpfree(sendbuf);
tpterm();
exit(1);
}
(void) strcpy(sendbuf, rqst->data);
ret = tpcall("DOMAIN_TEST", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
if(ret == -1) {
(void) fprintf(stderr, "Can''t send request to service DOMAIN_TEST\n");
(void) fprintf(stderr, "Tperrno = %d\n", tperrno);
tpfree(sendbuf);
tpfree(rcvbuf);
tpterm();
exit(1);
}
(void) strcpy(rqst->data, rcvbuf);
/*
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);
}
编译服务端程序
buildserver -o simpserv -f simpserv.c -s SERV_TEST -s TOUPPER -s LDOMAIN_TEST
编译ubbconfig,dmconfig
tmloadcf -y ubbconfig
dmloadcf -y dmconfig
weblogic配置
在weblogic目录下,打开config.xml添加如下内容,建立wtc连接。
<WTCServer Name="MyWTCServer" Targets="myserver">
<WTCLocalTuxDom AccessPoint="TDOM03" AccessPointId="TDOM03"
NWAddr="//192.168.1.100:9998" Name="WTCLocalTuxDom-1111629491418"/>
<WTCRemoteTuxDom AccessPoint="TDOM01" AccessPointId="TDOM01"
LocalAccessPoint="TDOM03" NWAddr="//192.168.1.100:3070" Name="WTCRemoteTuxDom-1055574870891"/>
<!--===================tuxedo服务列表====================-->
<WTCExport EJBName="wtcservice" LocalAccessPoint="TDOM03"
Name="WTCExport-1111629542315" ResourceName="TOLOWER"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013932"
RemoteAccessPointList="TDOM01" RemoteName="TOUPPER" ResourceName="TOUPPER"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013933"
RemoteAccessPointList="TDOM01" RemoteName="TOUPPER" ResourceName="TEST"/>
<WTCImport LocalAccessPoint="TDOM03"
Name="WTCImport-1111634013934"
RemoteAccessPointList="TDOM01" RemoteName="LDOMAIN_TEST" ResourceName="LDOMAIN_TEST"/>
</WTCServer>
注意,要定义WTCLocalTuxDom,WTCRemoteTuxDom,在这两个节点中AccessPoint和AccessPointId分别对应tuxedo端的DM_REMOTE_DOMAINS,DM_LOCAL_DOMAINS的名字,NWAddr指定的ip地址和端口号也要配对。
最后用WTCImport导入tuxedo在domain中导出的服务,注意RemoteAccessPointList指定的值,必须是前面定义的WTCRemoteTuxDom,RemoteName指定domain导出的服务名字,ResourceName是在weblogic上可见的服务名,在weblogic上通过调用wtc调用tuxedo的时候,必须使用ResourceName指定的服务名字。
在每个节点中,都有Name属性,注意该属性的名字必须唯一,所以在添加节点的时候,不能简单的拷贝,必须注意修改该属性,保证唯一。
最后启动tuxedo服务和weblogic。
在weblogic下部署一个web应用,测试wtc连接。
编写一个jsp测试页面,代码内容如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="weblogic.wtc.jatmi.*"%>
<%@ page import="weblogic.wtc.gwt.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.sql.*"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>wtc测试,weblogic客户端</title>
</head>
<body>
<%
java.util.Date date=new java.util.Date();
String strErr = new String();
String outStr = new String();
String inStr = "hello,world!";
%>
<%=(date.getYear()+1900)%>年<%=date.getMonth()+1%>月<%=date.getDate()%>日</n>
<%
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("TOUPPER", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试TOUPPER服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
<%
outStr = "";
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("TEST", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试TEST服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
<%
outStr = "";
try
{
//调用接口服务
Context ctx = new InitialContext();
TuxedoConnectionFactory cdmaTuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
System.out.println("------------------------------>1");
TuxedoConnection cdmaTuxedo = cdmaTuxedoFactory.getTuxedoConnection();
System.out.println("------------------------------>2");
TypedString cdmaData = new TypedString(inStr);
System.out.println("------------------------------>3");
Reply cdmaRtn = cdmaTuxedo.tpcall("LDOMAIN_TEST", cdmaData, 0);
System.out.println("------------------------------>4");
cdmaData = (TypedString) cdmaRtn.getReplyBuffer();
System.out.println("------------------------------>5");
outStr = cdmaData.toString();
cdmaTuxedo.tpterm();
}
catch(Exception e)
{
e.printStackTrace();
strErr = e.getMessage();
}
%>
<p>测试LDOMAIN_TEST服务:</p>
<p>inStr:<%out.println(inStr);%></p></n>
<p>outStr:<%out.println(outStr);%></p></n>
<p>strErr:<%out.println(strErr);%></p></n>
</body>
</html>
在ie上面打开请求web应用的该页面,查看显示结果。如果有错误,根据显示的错误信息和weblogic标准输出的错误信息更改配置,解决问题。
文章出处:DIY部落(http://www.diybl.com/course/1_web/webjs/200855/114446.html)
相关推荐
weblogic通过wtc与tuxedo进行通讯的配置过程详细说明:1.tuxedo配置;2.weblogic通过jolt(或corba)方式进行配置的步骤。
本文将详细介绍如何使用 WebLogic 通过 WTC(WebLogic Tuxedo Connector)与 Tuxedo 进行通讯配置。WTC 是一个连接 WebLogic 服务器与 Tuxedo 服务器的桥梁,它允许 WebLogic 应用程序与 Tuxedo 应用程序之间进行...
这些配置完成后,WebLogic Server 将能够通过WTC调用Tuxedo服务进行事务处理。在实际操作中,可能还需要考虑其他的配置,如安全设置、性能优化、错误处理和日志记录等。此外,测试和调试是确保配置正确并能正常工作...
首先,我们来看一下通过WTC进行Tuxedo与WebLogic通信的配置与开发。WTC是WebLogic Server的一部分,它提供了Tuxedo和WebLogic之间的双向互操作性,允许Tuxedo服务调用WebLogic中的EJB,反之亦然。实现这一功能的关键...
以上就是TUXEDO与WEBLOGIC通过WTC进行互连的配置过程。在实际操作中,根据具体环境和需求,可能需要对配置文件进行适当调整。正确配置后,TUXEDO和WEBLOGIC可以无缝协作,共同提供高效、稳定的企业级应用服务。
【通过wtc、jolt进行tuxedo与weblogic通信开发】 Tuxedo和WebLogic是两种广泛应用在企业级服务中的中间件产品。Tuxedo以其高性能和强一致性在传统交易处理领域占据重要地位,而WebLogic则在互联网应用和企业Java ...
- **JOLT**:虽然只能让WebLogic调用Tuxedo,但它可以与其他应用服务器如WebSphere进行互连。 **总结** 集成WebLogic和Tuxedo的过程涉及多个步骤,包括环境变量配置、应用部署、WebLogic域配置以及客户端开发。WTC...
### WebLogic Tuxedo WTC配置详解 ...通过上述配置,可以在Tuxedo系统中定义服务,并与WebLogic Server中的WTC服务建立连接,实现两个系统的互操作性和集成。这对于构建复杂的企业级应用架构是非常重要的。
完成以上步骤后,WebLogic 将能够通过 WTC 与 Tuxedo 进行通信,处理分布式事务。在实际部署和运行环境中,还应考虑监控和故障排查,确保服务的稳定性和性能。同时,根据安全策略,可能还需要配置 SSL 证书、权限...
本文将深入探讨如何在WebLogic上配置WTC(WebLogic Tuxedo Connector)实例,实现WebLogic Server与BEA Tuxedo系统的无缝对接。 #### 二、WTC简介 WTC(WebLogic Tuxedo Connector)是Oracle提供的一个组件,用于...
1. **配置WebLogic Tuxedo连接器(WTC)**: WebLogic提供了WebLogic Tuxedo Connector (WTC)来连接到Tuxedo环境。需要在WebLogic管理控制台中配置WTC资源,包括Tuxedo服务器的主机名、端口号、应用域和服务名等...
#### Weblogic 通过配置WTC连接方式与TUXEDO进行通信 - **背景简介**:在企业级应用环境中,Weblogic作为主流的应用服务器之一,常常需要与Tuxedo这样的事务处理监控系统进行交互。这种交互通常采用Weblogic ...
本文将详细介绍如何配置WebLogic与Tuxedo之间的通信,主要涉及JOLT和WTC(WebLogic Transaction Coordinator)两个组件。JOLT是WebLogic与Tuxedo之间的适配器,使得Java应用程序能够与Tuxedo服务进行交互;WTC则提供...
。。。
WebLogic Tuxedo Connector(WTc)是两者之间的桥梁,允许WebLogic应用与Tuxedo服务进行交互。在本配置文档中,我们将深入探讨如何设置和配置WTc,以便在WebLogic与Tuxedo之间建立通信。 首先,了解WTc的基本概念是...
WTC(WebLogic Transaction Coordinator)是TUXEDO中的一个重要组件,它在WebLogic Server中扮演着关键的角色,主要用于处理分布式事务的协调与管理。 在源码层面,TUXEDO和WTC的设计基于微内核架构,允许开发者...
本文档描述了如何使用WebLogic Tuxedo连接器将weblogic server8.1和tuxedo8.1互连。使用的例子为weblogic的simpapp和simpserv,以及tuxedo的simpapp。对unix用户可将本文中"\" 换成 "/",并将 ".cmd" 换成 ".sh"。 ...
本文将深入探讨如何通过Tuxedo调用Weblogic的EJB(Enterprise JavaBeans)服务,这一过程称为“WTC暴露ejb服务”。WebLogic Transaction Coordinator (WTC) 是Oracle WebLogic Server中的一个关键组件,它允许应用...