中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > Tuxedo
Workshop Tuxedo Control的使用
作者:佚名 时间:2005-09-21 10:29 出处:互连网 责编:小渔
              摘要:Workshop Tuxedo Control是 BEA Weblogic Workshop8.1提供了一个控件,用于把TUXEDO服务封装成Webservices。在此之前,曾经有人试着使用WTC或JOLT去把TUXEDO服务封装成Webservices,但前提是程序必须先要掌握WTC或JOLT的配置和编程接口,Workshop Tuxedo Control对WTC作了进一步的包装,从而使TUXEDO服务封装成Webservices的过程更加简化。
一.关于Workshop Tuxedo Control(WTuxC)控件
Workshop Tuxedo Control是 BEA Weblogic Workshop8.1提供了一个控件,用于把TUXEDO服务封装成Webservices。在此之前,曾经有人试着使用WTC或JOLT去把TUXEDO服务封装成Webservices,但前提是程序必须先要掌握WTC或JOLT的配置和编程接口,Workshop Tuxedo Control对WTC作了进一步的包装,从而使TUXEDO服务封装成Webservices的过程更加简化。

二. Workshop Tuxedo Control的平台支持性
Tuxedo Control的Beta版支持WINDOWS2000操作系统
Server Platform Tuxedo Version Tested WebLogic Platform Version
MS Windows 2000 Tuxedo 8.1 WebLogic Platform 8.1 Beta version

Tuxedo Control的GA版支持如下平台:
Server Platform Tuxedo Version WebLogic Platform Version
HP-UX v11i (32 bit) Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
HP-UX v11.00 (32 bit) Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
Solaris 8 (Sparc 32 bit) Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
Solaris 9 (Sparc 32 bit) Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
MS Windows 2000 Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
MS Windows XP (IDEonly) Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1
Red Hat Linux Advanced Server 2.1 Tuxedo 8.1, 8.0, 7.1, 6.5 WebLogic Platform 8.1

三. Workshop Tuxedo Control控件的安装
在安装WebLogic Platform 8.1的Beta版或GA版时,Tuxedo Control被安装到%BEA_HOME%\ ext_components\Tuxedo目录下,如果没有看到这个目录,可以到BEA的dev2dev站点(http://dev2dev.bea.com/code/index.jsp)上去下载TuxedoCtrl_81_beta.zip组件包来单独安装,大约3.1M。

四. Workshop Tuxedo Control的工作原理

Workshop Tuxedo Control使用WTC与TUXEDO系通信。TUXEDO系统需要配置一个域网关,本地网关访问点为TDOM1,监听//localhost:1234,Workshop domain的本地网着访问点为TDOM2,监听//localhost:5678。

五.WtuxC的使用--创建WTC
使用build.xml脚本来创建一个名为myWTC的WTC Service,build.xml脚本内容如下:

(Domain: workshop, AdminServer: cgServer)
<project name="simpapp" default="all" basedir=".">

<!-- set global properties for this build -->
<property environment="env"/>
<property name="myurl" value="t3://localhost:7001"/>

<target name="all" depends="init, setwtc"/>

<target name="init">
<!-- Create the time stamp -->
<tstamp/>
</target>

<!-- create WTCServerbean -->
<target name="setwtc">
<input message="Enter system username:" addproperty="user"/>
<input message="Enter system password:" addproperty="passwd"/>
<input message="Enter name for local access point:" addproperty="lclaccess"/>
<input message="Enter name for remote access point:" addproperty="remaccess"/>
<input message="Enter the Network Address for your local access point:" addproperty="lclnwaddr"/>
<input message="Enter the Network Address for your remote access point:" addproperty="remnwaddr"/>

<property name="mbeanargs" value="-url -username -password "/>

<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=MyWTC,Type=WTCServer"/>
</java>

<!--set local wls domain -->
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myLoclTuxDom,Type=WTCLocalTuxDom,WTCServer=MyWTC"/>
</java>

<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myLoclTuxDom,Type=WTCLocalTuxDom,WTCServer=MyWTC -property
AccessPoint -property AccessPointId -property NWAddr -property
ConnectionPolicy ON_DEMAND -property Security NONE"/>
</java>

<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=MyWTC,Type=WTCServer -property LocalTuxDoms workshop:Name=
myLoclTuxDom,Type=WTCLocalTuxDom,WTCServer=MyWTC"/>
</java>

<!-- set remote tuxedo domain -->
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myRTuxDom,Type=WTCRemoteTuxDom,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myRTuxDom,Type=WTCRemoteTuxDom,WTCServer=MyWTC -property
AccessPoint -property AccessPointId -property NWAddr -property
LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=MyWTC,Type=WTCServer -property RemoteTuxDoms
workshop:Name=myRTuxDom,Type=WTCRemoteTuxDom,WTCServer=MyWTC"/>
</java>

<!-- set imported resources -->
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources1,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources1,Type=WTCImport,WTCServer=MyWTC -property
ResourceName CLOSE_ACCT -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources2,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources2,Type=WTCImport,WTCServer=MyWTC -property
ResourceName DEPOSIT -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources3,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources3,Type=WTCImport,WTCServer=MyWTC -property
ResourceName INQUIRY -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources4,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources4,Type=WTCImport,WTCServer=MyWTC -property
ResourceName OPEN_ACCT -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources5,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources5,Type=WTCImport,WTCServer=MyWTC -property
ResourceName TRANSFER -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" CREATE -mbean workshop:Name=myImportedResources6,Type=WTCImport,WTCServer=MyWTC"/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=myImportedResources6,Type=WTCImport,WTCServer=MyWTC -property
ResourceName WITHDRAWAL -property RemoteAccessPointList -property LocalAccessPoint "/>
</java>
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=MyWTC,Type=WTCServer -property Imports
&quot;workshop:Name=myImportedResources1,Type=WTCImport,WTCServer=MyWTC;workshop:Name=myImportedResources2,
Type=WTCImport,WTCServer=MyWTC;workshop:Name=myImportedResources3,Type=WTCImport,WTCServer=MyWTC;workshop:
Name=myImportedResources4,Type=WTCImport,WTCServer=MyWTC;workshop:Name=myImportedResources5,Type=WTCImport,
WTCServer=MyWTC;workshop:Name=myImportedResources6,Type=WTCImport,WTCServer=MyWTC&quot;"/>
</java>

<!-- Deploy WTCServer -->
<java classname="weblogic.Admin">
<arg line=" SET -mbean workshop:Name=MyWTC,Type=WTCServer -property Targets workshop:Name=cgServer,Type=Server"/>
</java>
</target>

</project>

在build.xml文件所在的目录下执行"ant setwtc"来创建myWTC,创建之前需要依次输入username, password, local access point, remote access point, Network Address for your local access point, Network Address for your remote access point,之后可以看到一系列的OK,如果抛例外,则说明创建不成功,需要重新创建。

创建完成后,可以在Weblogic Server的console中看到myWTC:


六.WtuxC的使用--创建Tuxedo域
在TUXEDO一端,使用bankapp提供后台服务,bankapp的ubb配置文件内容如下:
*RESOURCES
IPCKEY 80952
UID 0
GID 0
PERM 0660
MAXACCESSERS 1100
MAXSERVERS 100
MAXSERVICES 150
MAXCONV 10
MASTER SITE1
SCANUNIT 10
MODEL SHM
LDBAL Y

*MACHINES
JQ LMID=SITE1
TUXDIR="G:\bea\tuxedo"
APPDIR="C:\TuxDAP\solutions\wtc\tux\bankapp"
ENVFILE="C:\TuxDAP\solutions\wtc\tux\bankapp\ENVFILE"
TLOGDEVICE="C:\TuxDAP\solutions\wtc\tux\bankapp\TLOG"
TLOGNAME=TLOG
TUXCONFIG="C:\TuxDAP\solutions\wtc\tux\bankapp\tuxconfig"
ULOGPFX="C:\TuxDAP\solutions\wtc\tux\bankapp\ULOG"
MAXWSCLIENTS=1000
SICACHEENTRIESMAX=1000

#
#
*GROUPS

DMGRP LMID=SITE1 GRPNO=52 OPENINFO=NONE
LGWGRP LMID=SITE1 GRPNO=53 OPENINFO=NONE


#
# Group for Authentication Servers
#
##AUTHGRP LMID=SITE1 GRPNO=101

#
# Group for Application Queue (/Q) Servers
#
##QGRP1 LMID=SITE1 GRPNO=102
## TMSNAME=TMS_QM TMSCOUNT=2
## OPENINFO="TUXEDO/QM:<APPDIR1>/qdevice:QSP_BANKAPP"

#
# Group for Application Manager's Servers
#
##MGRGRP1 LMID=SITE1 GRPNO=103

#
# Group for Event Broker Servers
#
##EVBGRP1 LMID=SITE1 GRPNO=104
WSGRP LMID=SITE1 GRPNO=100
DEFAULT: TMSNAME=TMS_SQL TMSCOUNT=2 LMID=SITE1
BANKB1 GRPNO=1 OPENINFO="TUXEDO/SQL:C:\TuxDAP\devices\bankdl1;bankdb;readwrite"
BANKB2 GRPNO=2 OPENINFO="TUXEDO/SQL:C:\TuxDAP\devices\bankdl2;bankdb;readwrite"
BANKB3 GRPNO=3 OPENINFO="TUXEDO/SQL:C:\TuxDAP\devices\bankdl3;bankdb;readwrite"

#
#
*SERVERS

DMADM SRVGRP=DMGRP SRVID=10
GWADM SRVGRP=LGWGRP SRVID=11
GWTDOMAIN SRVGRP=LGWGRP SRVID=12 REPLYQ=N

simpserv SRVGRP=WSGRP SRVID=250
#
# TUXEDO System /T server providing application specific authentication.
# Ref. AUTHSVR(5).
#
##AUTHSVR SRVGRP=AUTHGRP SRVID=1 RESTART=Y GRACE=0 MAXGEN=2
## CLOPT="-A"

#
# TUXEDO System /T Message Queue Manager. It is a server that enqueues and
# dequeues messages on behalf of programs calling tpenqueue(3) and
# tpdequeue(3) respectively. Ref. TMQUEUE(5).
#
##TMQUEUE SRVGRP=QGRP1 SRVID=1 CONV=N GRACE=0
## CLOPT="-s QSP_BANKAPP:TMQUEUE"

#
# TUXEDO System /T Message Forwarding Server that forwards messages that have
# been stored using tpenqueue(3) for later processing. Ref. TMQFORWARD(5).
#
##TMQFORWARD SRVGRP=QGRP1 SRVID=2 CONV=N REPLYQ=N GRACE=0
## CLOPT="-- -e -n -d -q Q_OPENACCT_LOG"

#
# TUXEDO System /T User Event Broker that manages user events by notifying
# subscribers when those events are posted. Ref. TMUSREVT(5).
#
##TMUSREVT SRVGRP=EVBGRP1 SRVID=1 GRACE=3600
## ENVFILE="<APPDIR1>/TMUSREVT.ENV"
## CLOPT="-e tmusrevt.out -o tmusrevt.out -A --
## -f <APPDIR1>/tmusrevt.dat"
## SEQUENCE=11

#
# TUXEDO Application Server that subscribes to certain events.
#
##ACCTMGR SRVGRP=MGRGRP1 SRVID=1
## CLOPT="-A -o ACCTMGR.LOG -- -w 1000.00"
## SEQUENCE=12

DEFAULT: RESTART=Y MAXGEN=5 REPLYQ=Y CLOPT="-A"
TLR SRVGRP=BANKB1 SRVID=1 CLOPT="-A -- -T 100 -e 1000.00"
TLR SRVGRP=BANKB2 SRVID=2 CLOPT="-A -- -T 500 -e 1000.00"
TLR SRVGRP=BANKB3 SRVID=3 CLOPT="-A -- -T 800 -e 1000.00"
XFER SRVGRP=BANKB1 SRVID=4
XFER SRVGRP=BANKB2 SRVID=5
XFER SRVGRP=BANKB3 SRVID=6
ACCT SRVGRP=BANKB1 SRVID=7
ACCT SRVGRP=BANKB2 SRVID=8
ACCT SRVGRP=BANKB3 SRVID=9
BAL SRVGRP=BANKB1 SRVID=10
BAL SRVGRP=BANKB2 SRVID=11
BAL SRVGRP=BANKB3 SRVID=12
BTADD SRVGRP=BANKB1 SRVID=13
BTADD SRVGRP=BANKB2 SRVID=14
BTADD SRVGRP=BANKB3 SRVID=15
AUDITC SRVGRP=BANKB1 SRVID=16 CONV=Y MIN=1 MAX=10 RQADDR="auditc"
BALC SRVGRP=BANKB1 SRVID=27
BALC SRVGRP=BANKB2 SRVID=28
BALC SRVGRP=BANKB3 SRVID=29

WSL
SRVID=10
SRVGRP=WSGRP
RESTART=Y
MAXGEN=10
GRACE=3600
CLOPT="-A -- -n //JQ:7110 -m 2 -M 10 -x 5 -c 1024 -w WSH"

*SERVICES
DEFAULT: LOAD=50 AUTOTRAN=Y TRANTIME=30
WITHDRAWAL PRIO=50 ROUTING=ACCOUNT_ID
DEPOSIT PRIO=50 ROUTING=ACCOUNT_ID
TRANSFER PRIO=50 ROUTING=ACCOUNT_ID
INQUIRY PRIO=50 ROUTING=ACCOUNT_ID
CLOSE_ACCT PRIO=40 ROUTING=ACCOUNT_ID
OPEN_ACCT PRIO=40 ROUTING=BRANCH_ID
BR_ADD PRIO=20 ROUTING=BRANCH_ID
TLR_ADD PRIO=20 ROUTING=BRANCH_ID
ABAL PRIO=30 ROUTING=b_id
TBAL PRIO=30 ROUTING=b_id
ABAL_BID PRIO=30 ROUTING=b_id
TBAL_BID PRIO=30 ROUTING=b_id
ABALC_BID PRIO=30 ROUTING=b_id
TBALC_BID PRIO=30 ROUTING=b_id
*ROUTING
ACCOUNT_ID FIELD=ACCOUNT_ID
BUFTYPE="FML"
RANGES="10000-49999:BANKB1,
50000-79999:BANKB2,
80000-109999:BANKB3"
BRANCH_ID FIELD=BRANCH_ID
BUFTYPE="FML"
RANGES="1-4:BANKB1,
5-7:BANKB2,
8-10:BANKB3"
b_id FIELD=b_id
BUFTYPE="VIEW:aud"
RANGES="1-4:BANKB1,
5-7:BANKB2,
8-10:BANKB3"

TUXEDO域配置文件dmconfig内容如下:
*DM_RESOURCES
VERSION=U22
*DM_LOCAL_DOMAINS
TDOM1 GWGRP=LGWGRP
TYPE=TDOMAIN
DOMAINID="TDOM1"
BLOCKTIME=20
MAXDATALEN=56
MAXRDOM=89
DMTLOGDEV="C:\TuxDAP\solutions\wtc\tux\simpapp\TLOG"
AUDITLOG="C:\TuxDAP\solutions\wtc\tux\simpapp\AUD"
DMTLOGNAME="DMTLOG_TDOM1"

*DM_REMOTE_DOMAINS
TDOM2 TYPE=TDOMAIN
DOMAINID="TDOM2"

*DM_TDOMAIN
TDOM1 NWADDR="//localhost:1234"
TDOM2 NWADDR="//localhost:5678"

*DM_LOCAL_SERVICES
WITHDRAWAL
DEPOSIT
TRANSFER
INQUIRY
CLOSE_ACCT
OPEN_ACCT

*DM_REMOTE_SERVICES

启动TUXEDO域,输出结果如下:
C:\TuxDAP\solutions\wtc\tux\bankapp>tmboot -y
Booting all admin and server processes in C:\TuxDAP\solutions\wtc\tux\bankapp\tuxconfig
INFO: BEA Tuxedo, Version 8.1
INFO: Serial #: 650522264137-1013080095935, Expiration 2003-07-31, Maxusers 10000
INFO: Licensed to: BEA Evaluation Customer

Booting admin processes ...

exec BBL -A :
process id=13264 ... Started.

Booting server processes ...

exec DMADM -A :
process id=13252 ... Started.
exec GWADM -A :
process id=20568 ... Started.
exec GWTDOMAIN -A :
process id=13536 ... Started.
exec simpserv -A :
process id=12944 ... Started.
exec TMS_SQL -A :
process id=20736 ... Started.
exec TMS_SQL -A :
process id=20800 ... Started.
exec TLR -A -- -T 100 -e 1000.00 :
process id=20100 ... Started.
exec TMS_SQL -A :
process id=18656 ... Started.
exec TMS_SQL -A :
process id=3968 ... Started.
exec TLR -A -- -T 500 -e 1000.00 :
process id=4356 ... Started.
exec TMS_SQL -A :
process id=4348 ... Started.
exec TMS_SQL -A :
process id=4304 ... Started.
exec TLR -A -- -T 800 -e 1000.00 :
process id=4324 ... Started.
exec XFER -A :
process id=4308 ... Started.
exec XFER -A :
process id=4300 ... Started.
exec XFER -A :
process id=10068 ... Started.
exec ACCT -A :
process id=10076 ... Started.
exec ACCT -A :
process id=10084 ... Started.
exec ACCT -A :
process id=10092 ... Started.
exec BAL -A :
process id=10100 ... Started.
exec BAL -A :
process id=10108 ... Started.
exec BAL -A :
process id=4156 ... Started.
exec BTADD -A :
process id=10120 ... Started.
exec BTADD -A :
process id=10128 ... Started.
exec BTADD -A :
process id=4396 ... Started.
exec AUDITC -A :
process id=4392 ... Started.
exec BALC -A :
process id=4416 ... Started.
exec BALC -A :
process id=4408 ... Started.
exec BALC -A :
process id=4404 ... Started.
exec WSL -A -- -n //JQ:7110 -m 10 -M 20 -x 5 -c 1024 -w WSH :
process id=4380 ... Started.
31 processes started.

重点检查域管理进程、域网关管理进程,域网关进程是否正确启动。

七.WtuxC的使用--创建workshop domain
使用BEA WebLogic Platform 8.1的"Configuration Wizard "创建一个workshop domain,命名为workshop,管理服务器命名为cgServer。
使用BEA WebLogic workshop创建一个"Empty Application",命名为JQ:


在Application视区中右健点击JQ下的Libraries,选择"Add Library…",选择%BEA_HOME%\ext_components\Tuxedo\controls目录下面的TuxedoControl.jar,点击"打开"。如下图所示。


八.WtuxC的使用--创建Webservice
在JQ下new一个webservice project,命名为bankapp,如下图所示:

在bankapp下new一个web services,命名为bankapp.jws,


九.WtuxC的使用--创建Tuxedo Contrl

在bankapp( webservice project)下new一个Control Project,命名为TuxCtl,在TuxCtl下new一个Java Control,命名为bankapp,使它扩展Tuxedo控件,如下图所示:

为Bankctrl创建六个方法:CloseAccount, Deposit, GetBalance, OpenAccount, Transfer, Withdraw,如图所示:

BankCtrl.jcx的源代码如下:
package TuxCtl;

import com.bea.control.*;
import com.bea.tuxedo.control.TuxedoControl;

/**
* Defines a new Tuxedo control.
*
*
* :tuxedo mapping-strictness=normal
*
*/
public interface BankCtrl extends TuxedoControl, ControlExtension
{
static public class OPEN_ACCT_RETURN
{
public Integer ACCOUNT_ID;
public String SBALANCE;
}

static public class Balance
{
public String SBALANCE;
}

static public class Balances
{
public String[] SBALANCE;
}

static public class Accounts
{
public Accounts(Integer fromAccount, Integer toAccount)
{
ACCOUNT_ID = new Integer[2];
ACCOUNT_ID[0] = fromAccount;
ACCOUNT_ID[1] = toAccount;
}

public Integer[] ACCOUNT_ID;
}

/**
* OpenAccount is used to open a new account. Branch must be a value
* from 1-10, account type is either a C for checking, or S for savings.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="OPEN_ACCT"
*/
public OPEN_ACCT_RETURN OpenAccount(java.lang.String LAST_NAME, java.lang.String
FIRST_NAME, java.lang.String MID_INIT, java.lang.String SSN, java.lang.String ADDRESS,
java.lang.String PHONE, java.lang.String ACCT_TYPE, java.lang.Integer BRANCH_ID, java.lang.String SAMOUNT);
/**
* Use the CloseAccount service to close an existing account. The balance in the
* closed account is returned.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="CLOSE_ACCT"
*/
public Balance CloseAccount(Integer ACCOUNT_ID);

/**
* GetBalance returns the current balance in the account.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="INQUIRY"
*/
public Balance GetBalance(Integer ACCOUNT_ID);

/**
* Withdraw removes money from the specified account and returns the new balance.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="WITHDRAWAL"
*/
public Balance Withdraw(Integer ACCOUNT_ID, String SAMOUNT);

/**
* Deposit adds money to the specified account and returns the updated balance.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="DEPOSIT"
*/
public Balance Deposit(Integer ACCOUNT_ID, String SAMOUNT);

/**
* Transfer moves money from one account to another. The Accounts class contains
* the two account IDs, the first one being the account to transfer the money from
* and the second being the account to receive the money. The service returns a two
* element array containing the new balances of the accounts.
*
* :tuxedo field-tables="TuxCtl.bankflds" buffer-type="fml"
* service-type="service" service-name="TRANSFER"
*/
public Balances Transfer(Accounts accounts, String SAMOUNT);
}

bankflds.java是BankCtrl使用到的字段描述类,它对应于TUXEDO系统中的FML字段描述文件,其内容如下:
package controls;

import java.io.*;
import java.lang.*;
import java.util.*;
import weblogic.wtc.jatmi.*;

public final class bankflds
implements weblogic.wtc.jatmi.FldTbl
{
Hashtable nametofieldHashTable;
Hashtable fieldtonameHashTable;

/** number: 110 type: long */
public final static int ACCOUNT_ID = 8302;
/** number: 112 type: char */
public final static int ACCT_TYPE = 16496;
/** number: 109 type: string */
public final static int ADDRESS = 41069;
/** number: 117 type: float */
public final static int AMOUNT = 24693;
/** number: 105 type: float */
public final static int BALANCE = 24681;
/** number: 104 type: long */
public final static int BRANCH_ID = 8296;
/** number: 114 type: string */
public final static int FIRST_NAME = 41074;
/** number: 106 type: long */
public final static int LAST_ACCT = 8298;
/** number: 113 type: string */
public final static int LAST_NAME = 41073;
/** number: 107 type: long */
public final static int LAST_TELLER = 8299;
/** number: 115 type: char */
public final static int MID_INIT = 16499;
/** number: 108 type: string */
public final static int PHONE = 41068;
/** number: 111 type: string */
public final static int SSN = 41071;
/** number: 116 type: long */
public final static int TELLER_ID = 8308;
/** number: 201 type: string */
public final static int SBALANCE = 41161;
/** number: 202 type: string */
public final static int SAMOUNT = 41162;
/** number: 203 type: short */
public final static int XA_TYPE = 203;
/** number: 204 type: string */
public final static int CURS = 41164;
/** number: 205 type: string */
public final static int SVCHG = 41165;
/** number: 206 type: string */
public final static int VIEWNAME = 41166;
/** number: 207 type: char */
public final static int OPEN_CR = 16591;
/** number: 208 type: char */
public final static int TYPE_CR = 16592;

public String Fldid_to_name(int fldid)
{
if ( fieldtonameHashTable == null ) {
fieldtonameHashTable = new Hashtable();
fieldtonameHashTable.put(new Integer(ACCOUNT_ID), "ACCOUNT_ID");
fieldtonameHashTable.put(new Integer(ACCT_TYPE), "ACCT_TYPE");
fieldtonameHashTable.put(new Integer(ADDRESS), "ADDRESS");
fieldtonameHashTable.put(new Integer(AMOUNT), "AMOUNT");
fieldtonameHashTable.put(new Integer(BALANCE), "BALANCE");
fieldtonameHashTable.put(new Integer(BRANCH_ID), "BRANCH_ID");
fieldtonameHashTable.put(new Integer(FIRST_NAME), "FIRST_NAME");
fieldtonameHashTable.put(new Integer(LAST_ACCT), "LAST_ACCT");
fieldtonameHashTable.put(new Integer(LAST_NAME), "LAST_NAME");
fieldtonameHashTable.put(new Integer(LAST_TELLER), "LAST_TELLER");
fieldtonameHashTable.put(new Integer(MID_INIT), "MID_INIT");
fieldtonameHashTable.put(new Integer(PHONE), "PHONE");
fieldtonameHashTable.put(new Integer(SSN), "SSN");
fieldtonameHashTable.put(new Integer(TELLER_ID), "TELLER_ID");
fieldtonameHashTable.put(new Integer(SBALANCE), "SBALANCE");
fieldtonameHashTable.put(new Integer(SAMOUNT), "SAMOUNT");
fieldtonameHashTable.put(new Integer(XA_TYPE), "XA_TYPE");
fieldtonameHashTable.put(new Integer(CURS), "CURS");
fieldtonameHashTable.put(new Integer(SVCHG), "SVCHG");
fieldtonameHashTable.put(new Integer(VIEWNAME), "VIEWNAME");
fieldtonameHashTable.put(new Integer(OPEN_CR), "OPEN_CR");
fieldtonameHashTable.put(new Integer(TYPE_CR), "TYPE_CR");
}

return ((String)fieldtonameHashTable.get(new Integer(fldid)));
}

public int name_to_Fldid(String name)
{
if ( nametofieldHashTable == null ) {
nametofieldHashTable = new Hashtable();
nametofieldHashTable.put("ACCOUNT_ID", new Integer(ACCOUNT_ID));
nametofieldHashTable.put("ACCT_TYPE", new Integer(ACCT_TYPE));
nametofieldHashTable.put("ADDRESS", new Integer(ADDRESS));
nametofieldHashTable.put("AMOUNT", new Integer(AMOUNT));
nametofieldHashTable.put("BALANCE", new Integer(BALANCE));
nametofieldHashTable.put("BRANCH_ID", new Integer(BRANCH_ID));
nametofieldHashTable.put("FIRST_NAME", new Integer(FIRST_NAME));
nametofieldHashTable.put("LAST_ACCT", new Integer(LAST_ACCT));
nametofieldHashTable.put("LAST_NAME", new Integer(LAST_NAME));
nametofieldHashTable.put("LAST_TELLER", new Integer(LAST_TELLER));
nametofieldHashTable.put("MID_INIT", new Integer(MID_INIT));
nametofieldHashTable.put("PHONE", new Integer(PHONE));
nametofieldHashTable.put("SSN", new Integer(SSN));
nametofieldHashTable.put("TELLER_ID", new Integer(TELLER_ID));
nametofieldHashTable.put("SBALANCE", new Integer(SBALANCE));
nametofieldHashTable.put("SAMOUNT", new Integer(SAMOUNT));
nametofieldHashTable.put("XA_TYPE", new Integer(XA_TYPE));
nametofieldHashTable.put("CURS", new Integer(CURS));
nametofieldHashTable.put("SVCHG", new Integer(SVCHG));
nametofieldHashTable.put("VIEWNAME", new Integer(VIEWNAME));
nametofieldHashTable.put("OPEN_CR", new Integer(OPEN_CR));
nametofieldHashTable.put("TYPE_CR", new Integer(TYPE_CR));
}

Integer fld = (Integer)nametofieldHashTable.get(name);
if (fld == null) {
return (-1);
} else {
return (fld.intValue());
}
}

public String[] getFldNames()
{
String retval[] = new String[22];
retval[0] = new String("ACCOUNT_ID");
retval[1] = new String("ACCT_TYPE");
retval[2] = new String("ADDRESS");
retval[3] = new String("AMOUNT");
retval[4] = new String("BALANCE");
retval[5] = new String("BRANCH_ID");
retval[6] = new String("FIRST_NAME");
retval[7] = new String("LAST_ACCT");
retval[8] = new String("LAST_NAME");
retval[9] = new String("LAST_TELLER");
retval[10] = new String("MID_INIT");
retval[11] = new String("PHONE");
retval[12] = new String("SSN");
retval[13] = new String("TELLER_ID");
retval[14] = new String("SBALANCE");
retval[15] = new String("SAMOUNT");
retval[16] = new String("XA_TYPE");
retval[17] = new String("CURS");
retval[18] = new String("SVCHG");
retval[19] = new String("VIEWNAME");
retval[20] = new String("OPEN_CR");
retval[21] = new String("TYPE_CR");
return retval;
}
}

十.WtuxC的使用--使用web services封装TUXEDO services
为bankapp.jws创建六个方法:CloseAccount, Deposit, GetBalance, OpenAccount, Transfer, Withdraw,分别用于封装Tuxedo Control的CloseAccount, Deposit, GetBalance, OpenAccount, Transfer, Withdraw方法。把BankCtrl.jcx控件拖放到bankapp.jws的右侧,界面如下:




十一.测试

在workshop中运行bankapp.jws进程测试,显示如下界面:

在GetBalance区域中,输入账号10000,点击GetBalance,得如下界面:

根据结果可知,账号10000的余额为,这与Tuxedo的本地客户端测试结果是一致的!

十二.结论
使用Workshop Tuxedo Control(WTuxC)控件可以很容易地把Tuxedo Services封装成web Services。WtuxC易于使用,程序不需要了解WTC或JOLT的开发细节。

十三. 备注
由于水平有限,不能很好地整理这个文档,但愿它对大家有所帮助,如有问题欢迎和我联系。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有