This section contains the following topics:
Tuxedo Web service administration comprises the following:
Each GWWS
server automatically generates a WSDL document for each deployed inbound native WSDF. The WSDL document can be downloaded from any of the HTTP/S listening endpoints via HTTP GET.
Use the following URL to browse the WSDL document:
“http(s)://<host>:<port>/wsdl[? [id=<wsdf_name>] [&mappolicy=<pack|raw|mtom>] [&toolkit=<wls|axis>]]”
Table 2-1 lists all WSDL document download options.
Note: | The WSDL download URL supported by Oracle SALT 2.0 is different from Oracle SALT 1.1. In Oracle SALT 1.1 release, one GWWS server adaptively supports both RPC/encoded and document/literal message style, both SOAP 1.1 and SOAP 1.2 version, from a given configuration file. In Oracle SALT 2.0 release, each WSDF file associated with the GWWS server must be pre-combined with a certain SOAP version and a certain SOAP message style. So the following WSDL download options for SALT 1.1 GWWS server are deprecated in this release. |
The GWWS server is a high performance gateway used between external Web Service application and the Tuxedo application. It uses a thread-pool working model to improve performance in a multi-processor server environment. The GWWS server also provides options to control runtime behavior by setting the <WSGateway
> element property values in the Oracle SALT configuration file. The following topics list deployment considerations based on different scenarios. For more information, see
Configuring the GWWS Servers.
The default thread pool size is 16, but in some cases this may not be enough to handle high volume loads. It is recommended to conduct a typical usage analysis in order to better estimate the proper size requirement. Usually, if the concurrent client number is large (for example, more than 500), it is suggested that you deploy the GWWS gateway on a server with at least a 4-way processor and set the thread pool size to 64.
Oracle SALT provides a network timeout tuning parameter in the configuration file. The default timeout value is 300 seconds.The value can be adjusted to reduce timeout errors.
Oracle SALT administrators may want to limit the buffer size sent from a client. SALT supports this by using a property value that can be set for particular GWWS instances. By default there is no limit.
The default backlog socket listen value is 20. On some systems, such as Windows, 20 may not meet heavy load requirements. The client connection is rejected during TCP handshake.
The recommended value for Windows is based on the max concurrent TCP connections you may encounter. For example, if 80 is the peak point, you may configure the max_backlog
property value to 60 in the SALT configuration file.
Note: | The default backlog value is adequate for most systems. You do not need to tune it unless you experience client connection problems during heavy loads. |
WARNING: | A large backlog value may increase syn-blood attack risk. |
A network receive timeout property is provided in the SALT configuration file. Web service applications are also impacted by the Tuxedo BLOCKTIME parameter. Blocktime accounting begins when a message is transformed from XML to a typed buffer and delivered to the Tuxedo framework.
If no reply is received for a particular Web service client within the BLOCKTIME time frame, the GWWS server sends a SOAP fault message to the client and terminates the connection. If the GWWS server receives a delayed reply, it drops this message because the client has been disconnected.
BLOCKTIME is defined in the
UBBCONFIG file *RESOURCE
section.
If one GWWS
instance is bottlenecks due to network congestion, low CPU resources and so on, multiple GWWS
instances can be deployed with the same Web Service binding on distributed Tuxedo nodes.
Note: | Even though multiple GWWS instances can provide the same logic functionality, from a client perspective, they are different Web service endpoints with different HTTP/S listen ports and addresses. |
The GWWS server supports Tuxedo TMTRACE functionality (used to dynamically trace messages). All trace points are logged in the ULOG file. Checking the ULOG file trace information helps to evaluate GWWS server SOAP message problems. GWWS server message tracing behavior is set using the TMTRACE environment variable, or by using the tmadmin chtr sub-command.
The reserved trace category, msg, is used to trace Oracle SALT messages. It can be used together with other general trace categories. For example, if trace category “atmi+msg” is specified, both Oracle SALT and Tuxedo ATMI trace messages are logged.
Notes: | Message tracing is recommended for diagnostic treatment only. |
Note: | The following trigger specifications are not recommended for GWWS servers: |
Note: | abort, system, sleep |
Note: | In any of these trigger specifications are used, GWWS servers may be unexpectedly terminated. |
For more tmtrace and trace specification information, see tmtrace(5) in the File Formats, Data Descriptions, MIBs, and System Processes Reference.
TMTRACE specification examples for Oracle SALT message tracing are shown below:
Listing 2-1 shows a ULOG file example containing Oracle SALT tracing messages.
183632.BOX1!GWWS.4612.4540.0: TRACE:ms:A HTTP message is received, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:A SOAP message is received, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:Begin data transformation of request message, buffer type = STRING, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:End of data transformation of request message, buffer type = STRING, SCO index=1023
183632. BOX1!GWWS.4612.840.0: TRACE:ms:Delivering a message to Tuxedo, service name =TOUPPER, SCO index=1023
183632. BOX1!GWWS.4612.840.0: TRACE:ms:Got a message from Tuxedo, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:Begin data transformation of reply message, buffer type = STRING, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:End of data transformation of reply message, buffer type = STRING, SCO index=1023
183632. BOX1!GWWS.4612.4540.0: TRACE:ms:Send a http message to net, SCO index=1023
A more complex log is generated by TMTRACE=msg:ulog, used in WS-ReliableMessaging communication. All the application and infrastructure messages are sent to ULOG. Listing 2-2 shows a ULOG file example containing WS-ReliableMessaging TMTRACE messages.
184706.BOX1!GWWS.3640.4772.0: TRACE:ms:A HTTP message is received, SCO index=1023
184706.BOX1!GWWS.3640.4772.0: TRACE:ms:A HTTP Get request is received, SCO index=1023
184706.BOX1!GWWS.3640.4772.0: TRACE:ms:Send a http message to net, SCO index=1023
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:A HTTP message is received, SCO index=1022
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:A SOAP message is received, SCO index=1022
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:Create a new inbound sequence, ID=uuid:4F1FEE40-72CB-118C-FFFFFFC0FFFFFFA8FFFFFFEB010000-1811
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:Create a new outbound sequence, ID=uuid:f7f76200-f612-11da-990d-9f37c3d14ba7
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:Send CreateSequenceResponse message for sequence uuid:4F1FEE40-72CB-118C-FFFFFFC0FFFFFFA8FFFFFFEB010000-1811
184710.BOX1!GWWS.3640.4772.0: TRACE:ms:Send a http message to net, SCO index=1022
184712.BOX1!GWWS.3640.3260.0: TRACE:ms:A HTTP message is received, SCO index=1022
184712.BOX1!GWWS.3640.3260.0: TRACE:ms:A SOAP message is received, SCO index=1022
184712.BOX1!GWWS.3640.3260.0: TRACE:ms:Begin data transformation of request message, buffer type = STRING, SCO index=1022
184712.BOX1!GWWS.3640.3260.0: TRACE:ms:End of data transformation of request message, buffer type = STRING, SCO index=1022
184712.BOX1!GWWS.3640.3260.0: TRACE:ms:Received a request message in sequence uuid:4F1FEE40-72CB-118C-FFFFFFC0FFFFFFA8FFFFFFEB010000-1811
Checking the ULOG tracing information helps to evaluate GWWS server SOAP message problem status.
The GWWS server can be monitored with wsadmin utility, which is a command line tool. This tool can show the running status of GWWS.
An example is shown in Listing 2-3.
$wsadmin
wsadmin - Copyright (c) 2005-2006 BEA Systems, Inc.
Portions * Copyright 1986-1997 RSA Data Security, Inc.
All Rights Reserved.
Distributed under license by BEA Systems, Inc.
SALT is a registered trademark.
> gwstats -i abcd
GWWS Instance : abcd
Inbound Statistics :
---------------------------------
Request Response Succ : 74
Request Response Fail : 32
Oneway Succ : 0
Oneway Fail : 0
Total Succ : 74
Total Fail : 32
Avg. Processing Time : 210.726 (ms)
Outbound Statistics :
---------------------------------
Request Response Succ : 0
Request Response Fail : 0
Oneway Succ : 0
Oneway Fail : 0
Total Succ : 0
Total Fail : 0
Avg. Processing Time : 0.000 (ms)
---------------------------------
Total request Pending : 0
Outbound request Pending : 0
Active Thread Number : 2
> gws -i out -s getTemp
GWWS Instance : out
Service : getTemp
Outboud Statistics :
---------------------------------
Request Response Succ : 333
Request Response Fail : 139
Avg. Processing Time : 143.064 (ms)
>
Command gwstats (abbreviated as gws) can display the statistics data of GWWS server with specific instance ID or of certain service of the GWWS server. The data include the amount of successful and failed request, etc.
Before wsadmin is executed, both TUXCONFIG and SALTCONFIG environment variable must be set. wsadmin supports both active mode and in-active mode, which means wsadmin is able to launch with/without booting the Tuxedo domain.
Table 2-3 lists wsadmin sub-commands.
The following sections explain how to troubleshoot a Oracle SALT run-time failure:
If the GWWS server fails to start, check the following:
Check the Tuxedo service contract definition is correct in the Tuxedo Service Metadata Repository and the Tuxedo Service Metadata Repository Server - TMMETADATA
- is booted successfully.
The GWWS server requires an extra license from Oracle to enable the functionality. Check to make sure it has been installed properly.
Check the GWWS server listen / WS-Addressing endpoints defined in the SALT configuration files. Avoid port conflicts with other applications.
Check the GWWS instance ID to make sure the two names defined in UBBCONFIG
and SALTDEPLOY
file are consistent.
Make sure that MAXWSCLIENTS is defined in the *MACHINE section of UBBCONFIG file on the computer where GWWS server is deployed.
If the GWWS server is set to RESTART=Y in the UBBCONFIG file, REPLYQ=Y must also be defined.
SALTCONFIG
file.
Make sure the binary version SALTCONFIG
file is compiled successfully and the environment variable SALTCONFIG
is set correctly for the GWWS
server.
In some cases, the GWWS server may reject SOAP requests. The most common causes are:
The WSDL document used by SOAP clients is out of date and some services may not be available.
When exporting a Tuxedo service with FML/VIEW buffers to a Web service, make sure the related GWWS environment variables are set with valid values. The GWWS server needs this information for the data mapping conversion.
Check the SOAP client data and make sure Tuxedo Service Metadata Repository restrictions are not violated.
Make sure the Tuxedo service you want exported as a Web service is available.
If the WSDL document is rejected by the Web Service client toolkit, do the following:
document/literal
message style and SOAP 1.1 to define native Tuxedo WSDF file. This is also the default behavior.
Tuxedo SCA component administration comprises the following:
Both The SCA ATMI server and client can utilized the existing tracing capability provided by TUXEDO and SCA. The following sections describe how to use them in detail.
SCA ATMI servers and clients support the Tuxedo tmtrace(5)function. All traces generated from TMTRACE
are logged in the ULOG file. Checking the ULOG file trace information helps to determine the cause of a failure. The Tuxedo TMTRACE
facility is enabled by setting TMTRACE
environmental variable, or by using the tmadmin
chtr
sub-command.
Note: | To trace Tuxedo ATMI messages enter: export TMTRACE=atmi:ulog at the command line. |
To trace the SCA runtime, ATMI service binding, and ATMI reference binding you must set SCACPP_ULOG
. The valid value range of this environmental variable is 10 (limited tracing) to 90 (full tracing). By default, the output is directed to the console. To send information to Tuxedo ULOG, enter "SCACPP_ULOG=yes
".
Note: | This tracing facility is only available for Tuxedo server builds using buildscaserver and SCA client builds using buildscaclient . |
Listing 2-4 shows a ULOG example containing SCA runtime tracing:
142059.STRIATUM!?proc.1108.3000.-2: >> osoa::sca::CompositeContext::getCurrent
142059.STRIATUM!?proc.1108.3000.-2: >> Tuscany::sca::SCARuntime::getCurrent Runtime
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::util::ThreadLocal::getValu e
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::util::ThreadLocal::getValu e
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::SCARuntime::getShared Runtime
142059.STRIATUM!?proc.1108.3000.-2: SCARuntime::getSharedRuntime()
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::util::Mutex::lock
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::util::Mutex::lock
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::util::Mutex::unlock
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::util::Mutex::unlock
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::SCARuntime::getSharedR untime
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::util::ThreadLocal::Thread Local
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::util::ThreadLocal::Thread Local
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::SCARuntime::SCARuntime
142059.STRIATUM!?proc.1108.3000.-2: SCA runtime install root f:\tuxedo\tux101rp _wsc\udataobj\salt\sca
142059.STRIATUM!?proc.1108.3000.-2: Default component: testStringClientComp
142059.STRIATUM!?proc.1108.3000.-2: >> tuscany::sca::util::ThreadLocal::getValu e
142059.STRIATUM!?proc.1108.3000.-2: << tuscany::sca::util::ThreadLocal::getValu e
A Tuxedo SCA server built with the buildscaserver
utility can be monitored using the scaadmin
utility. This utility shows service statistics information and helps perform maintenance through dynamic shared library loading and unloading.
To reload all components hosted by the uBikeServer
Tuxedo server previously built using the buildscaserver
command, do the following:
Enter the following at the command line to display statistics on the services offered by the uBikeServer
Tuxedo server (Table 2-4 shows the results):
Before scaadmin
is executed, you must set the TUXCONFIG
environment variable. Table 2-5 lists scaadmin
sub-commands.
Note: | Both Windows and HP systems have a limitation using the "reload" sub-command. |
Note: | When multiple servers share the same component library on Windows and HP systems, the shared component library cannot be reloaded. To reload a component library common to multiple servers, the "scaadmin " reload sub-command must be performed on all affected servers simultaneously. |
The TUXEDO SCA Java reference binding and data transformation support output to the console and to a log file. By default there will be at most 10 log files, the maximum size of each file is 100000 bytes, and are located in $APPDIR
with name jatmi<number>.log
file. The log file names are cycled with the latest one using the number 0, and the one just before latest one uses 1 (for example. jatmi0.log
is the latest log file, and jatmi9.log
is the oldest log file). If the APPDIR
environment variable is not set and com.oracle.jatmi.APPDIR
java property is not specified, the log is placed in the current working directory.
By default, the log files are overwritten each time the application starts. Many logger parameters can be fine tuned. Table 2-6 lists tunable Java properties related to logging.
To have the TUXEDO SCA Java reference binding log in a different language, first check the supported languages that are installed. The default is English
. To switch to a different language, add: "-Duser.language=<your preferred language>
" to your Java command line when starting the TUXEDO SCA Java client. For example:
java -classpath .:/apps/classes:$CLASSPATH -Duser.langueage=ES -Dcom.oracle.jatmi.LogDestination=console myApplication.
This generates an English log in plain text format to the console only.
Table 2-5 shows an example of the log file contents.
9/3/08:3:19:14 PM:10:TRACE[TuxedoConversion,processSendBuf]< (10) return 1st args
9/3/08:3:19:14 PM:10:DBG[AtmiBindingInvoker,invoke]ServiceType: requestresponse
9/3/08:3:19:14 PM:10:DBG[AtmiBindingInvoker,invoke]Return Type Class: simpapp.View7Rep
9/3/08:3:19:14 PM:10:DBG[AtmiBindingInvoker,invoke]target service name: RULE7
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]TPURCODE: 0
9/3/08:3:19:15 PM:10:TRACE[TuxedoConversion,processReplyBuffer]> (reply simpapp.View7Rep@191777e:0:null)
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processReplyBuffer]returnType: simpapp.View7Rep
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processReplyBuffer]Reply Buffer Class: simpapp.View7Rep
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processReplyBuffer]Reply Buffer Type: X_COMMON
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processReplyBuffer]Reply Buffer Subtype: View7Rep
9/3/08:3:19:15 PM:10:TRACE[TuxedoConversion,processReplyBuffer]< (30) return buffer directly
9/3/08:3:19:15 PM:10:DBG[Accessors,getConventionProperty]Convention Property: CONVENTIONS_TUX
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]networkAddress: host = STRIATUM, port = 8080
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingInvoker,determineServiceCallParameters]> ()
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,isLegacy]> ()
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,isLegacy]< (10) return true
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,isMap]> ()
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,isMap]< (10) return false
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]Operation name = rule7_OVVO
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getServiceType]> (rule7_OVVO)
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getServiceType]< (10) return null
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getInputBufferType]> (rule7_OVVO)
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getInputBufferType]< (10) return null
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getOutputBufferType]> (rule7_OVVO)
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingImpl,getOutputBufferType]< (10) return null
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,getErrorBufferType]> (rule7_OVVO)
9/3/08:3:19:15 PM:10:DBG[AtmiBindingImpl,getErrorBufferType]< (10) return null
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]svcName = RULE7
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]svcType = requestresponse
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]inbuf = X_COMMON
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]outbuf = X_COMMON
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,determineServiceCallParameters]errbuf = null
9/3/08:3:19:15 PM:10:TRACE[AtmiBindingInvoker,determineServiceCallParameters]< (10) return
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]Input Buffer Type: X_COMMON
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]Output Buffer Type: X_COMMON
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]Error Buffer Type: null
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]inBufType:X_COMMON, count: 1
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]outBufType:X_COMMON, count: 1
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]View Classes: simpapp.View7Req,simpapp.View7Rep
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,getClassList]getClassList: Getting class for simpapp.View7Req
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,getClassList]getClassList: Getting class for simpapp.View7Rep
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,setFieldClasses]setFldClasses: null
9/3/08:3:19:15 PM:10:DBG[AtmiBindingInvoker,invoke]Passing thro invoker...
9/3/08:3:19:15 PM:10:TRACE[TuxedoConversion,processSendBuf]> (args [Ljava.lang.Object;@ab1b4)
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processSendBuf]args[0] class simpapp.Rule7Req
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,needConversion]buftype: X_COMMON
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processSendBuf]Argument Class Name: simpapp.Rule7Req
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processSendBuf]Input Buffer Id : XCOMMON
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processSendBuf]Type code : 10
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,processSendBuf]InputBufferType: XCOMMON
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,getClassList]getClassList: Getting class for simpapp.View7Req
9/3/08:3:19:15 PM:10:DBG[TuxedoConversion,getClassList]getClassList: Getting class for simpapp.View7Rep
9/3/08:3:19:15 PM:10:TRACE[Accessors,determineConvention]> (simpapp.Rule7Req)
9/3/08:3:19:15 PM:10:DBG[Accessors,determineConvention]Method name: getId
9/3/08:3:19:15 PM:10:DBG[Accessors,determineConvention]Method name: setCmd
9/3/08:3:19:15 PM:10:DBG[Accessors,determineConvention]Method name: setId
9/3/08:3:19:15 PM:10:DBG[Accessors,determineConvention]Method name: getCmd
9/3/08:3:19:15 PM:10:TRACE[Accessors,determineConvention]< (30) return BEAN