TUXEDO与WEBLOGIC通过WTC进行互连的配置

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)

你可能感兴趣的:(应用服务器,xml,weblogic,ejb,gwt)