OFMW11.1.1.6.1 Timeout...
At server level there are some parameters which are quite
important and useful; one of them is related to Timeout.
Now definition of timeout is quite simple when you are making
any http/https/rmi etc connection you can specify the timeout parameter which
means after establishing a connection, if transaction is taking more time than
configured timeout value then transaction should get timeout. This is important
to implement because it’s prevent long-running processes from holding resources
over an extended period of time.
I am going to talk about timeout parameters which are
existing in OFM11g 11.1.1.6.1 at
various places and their meaning and relations.
SOA
server’s timeout configuration –
There are multiple places where you can set the timeout for
SOA servers.
1 SyncMaxWaitTime:
The
SyncMaxWaitTime property applies to durable synchronous processes having
breakpoint activities which forces dehydration.
For this parameter you have concentrate more in details because
I have seen lots of audience that have wrong understanding for this parameter.
First of all this parameter only for the Synchronous process
with breakpoint activities e.g. receive (except first one), pick (onAlarm,
onMessage), wait, reply and checkpoint etc. This configuration is not for the asynchronous process since in case of
async BPEL no receiver thread is waiting to timeout.
Another mistake I have noticed the users trying to co-relate
this parameter for the synchronous
transaction to the external system from Asynchronous BPEL/composite process.
Users expect a Sync invocation to external system Webservice should timeout if
it’s taking more time than configure for SyncMaxWaitTime period. This parameter is not applicable for this
scenario, try to implement httpReadTimeout and httpConnTimeout property within
composite itself, later describe in this post.
Example of
Sync BPEL Process with Breakpoint Activities -
<receive
name="receiveInput" partnerLink="client"
variable="input"
createInstance="yes"
/>
<assign>
...
</assign>
<wait
for="'PT10S'" />
<reply
name="replyOutput" partnerLink="client"
variable="output" />
For details understanding for this
parameter, how engine level its works, please refer the below URL
1.1 Steps to modify the SyncMaxWaitTime –
1)
Login into EM console
2)
Expand SOA and right
click on "soa-infra" and select: SOA Administration -> BPEL
Properties
3)
Click on "More
BPEL Configuration Properties" link and Locate syncMaxWaitTime(default 45
second) and change it.
2 BPEL Engine Time:
There are many BPEL engine EJB’s exist in “soa-infra”
Enterprise application which process the message during runtime, each EJB has
its own timeout parameter which need to configure and should be in relation
with JTA and SyncMaxWaitTime.
2.1 Steps to modify the BPEL Engine EJBs timeout–
1)
Log into Oracle WebLogic Administration Console
2)
Click Deployment and find out ‘soa-infra” Enterprise
application, stop this application forcefully.
3)
Click on this application soa-infra -> list of EJBs
will be appeared.
4)
Following EJBs need to be updated
Ø BPELActivityManagerBean
Ø BPELDeliveryBean
Ø BPELDispatcherBean
Ø BPELEngineBean
Ø BPELFinderBean
Ø BPELInstanceManagerBean
Ø BPELProcessManagerBean
Ø BPELSensorValuesBean
Ø BPELServerManagerBean
5)
Change the parameter in the Configuration tab for the
Transaction Timeout setting(default 300 sec for most of EJBs).
6)
Click Save.
7)
Save the Plan.xml to some known location - Ensure no
other file is named Plan.xml -.
8)
Restart the SOA
servers and start this application back.
e.g.
Home >Summary of
Servers >Summary of
Deployments >soa-infra >BPELDispatcherBean
3 JTA:
This is timeout which a weblogic server allows to wait for a
transaction to be complete in first phase for 2 phase transaction which is
getting used for distributed transactions.
3.1 Steps to modify the JTA Timeout in Weblogic–
1)
Log into Oracle WebLogic Administration Console.
2)
Click on your ‘domain name’ in console
3)
Go to JTA tab page
4)
Change the value of Timeout Seconds (the default is
30).
5)
Click Save.
6)
Restart Oracle WebLogic Server.
4 Webservice Read and connection timeout:
When a http request been made to external system using web service
1) httpReadTimeout 2) httpConnTimeout
and 3) optimization properties can be used to timeout that transaction, values
are in milliseconds and this configuration only applicable for http protocol based
web service invocation.
Modify the composite.xml for the service for which timeout has to set-
<reference
name="Service1"
ui:wsdlLocation="http://localhost:8001/soa-infra/services/default/Child!1.0/Child.wsdl">
<interface.wsdl
interface="http://xmlns.oracle.com/test/Child/Child#wsdl.interface(Child)"/>
<binding.ws
port="http://xmlns.oracle.com/test/Child/Child#wsdl.endpoint(child_client_ep/Child_pt)"
location="http://localhost:8001/soa-infra/services/default/Child!1.0/child_client_ep?WSDL">
<property name="oracle.webservices.local.optimization">false</property>
<property name="oracle.webservices.httpReadTimeout"
type="xs:string"
many="false">10000</property>
<property name="oracle.webservices.httpConnTimeout"
type="xs:string" many="false">5000</property>
</binding.ws>
</reference>
oracle.webservices.local.optimization parameter value could
be true/false, make it false if service which user is going to invoke reside in
same Weblogic Instance to avoid execution of SOAP stack
In the BPEL process you can add a
Catch branch for a RemoteFault if you want to catch this error.
Note when using this parameter it
will return a "bpelx:timeout" Fault, and not a RemoteFault. It's
possible to use this setting for Invoke or Receive activities.
Refer the Oracle Note ID 979683.1 for more details
5 Relation between timeouts
If the invocation pattern is like this-
Request - Consumer invokes >> SOA Load
balancer >> SOA Managed Server >> Provider System
Response -
Consumer invokes << SOA Load balancer << SOA Managed Server <<
Provider System
Consumer system/API Timeout >> SOA Load Balancer
Timeout (If Present) >> Global Transaction Timeout JTA >> BPEL
EJB's transaction timeout >> syncMaxWaitTime OR composite Level
Timeout >> Provider System/API timeout
6 Weblogic Server Timeout parameters 10.3.6.
There are few more parameters related to timeout which
probably you might consider to revisit during problem or to improve your
performance.
6.1 Weblogic Console>> DomainName>>Environment >>Servers>>click on particular server>>Protocal tab page >>General tab page:
6.1.1 Complete Message Timeout:
The maximum number
of seconds that this server waits for a complete message to be received.
6.1.2 Idle Connection Timeout:
The maximum number
of seconds that a connection is allowed to be idle before it is closed by the
server.
6.1.3 Tunneling Client Timeout:
The amount of time
(in seconds) after which a missing tunneled client is considered dead.
6.2 Weblogic Console>> DomainName>>Environment >>Servers>>click on particular server>>Protocal tab page >>HTTP tab page:
6.2.1 Post Timeout:
Timeout (in
seconds) for reading HTTP POST data in a servlet request. If the POST data is
chunked, the amount of time the server waits between the end of receiving the
last chunk of data and the end of receiving the next chunk of data in an HTTP
POST before it times out.
6.2.2 Duration:
The amount of time
this server waits before closing an inactive HTTP connection.
6.2.3 Tunneling Client Timeout:
The amount of time (in seconds) after which a missing tunneled client is
considered dead.
6.3 Home >Summary of JDBC Data Sources >SOADataSource>> Transaction Tab page
6.3.1 XA Transaction Timeout:
The number of seconds to set as the transaction branch timeout.If set, this value is passed as the transaction timeout value in the XAResource.setTransactionTimeout() call on the XA resource manager, typically the JDBC driver.
When this value is set to 0, the WebLogic Server Transaction Manager passes the global WebLogic Server transaction timeout in seconds in the method.
If set, this value should be greater than or equal to the global WebLogic Server transaction timeout.
Note: You must enable XaSetTransactionTimeout to enable setting the transaction branch timeout
6.4 Home >Summary of JDBC Data Sources >SOADataSource >> Connection Pool Tab page
6.4.1 Inactive Connection Timeout:
The number of inactive seconds on a reserved connection before WebLogic Server reclaims the connection and releases it back into the connection pool.You can use the Inactive Connection Timeout feature to reclaim leaked connections - connections that were not explicitly closed by the application. Note that this feature is not intended to be used in place of properly closing connections.
When set to 0, the feature is disabled.
6.4.2 Connection Reserve Timeout:
The number of seconds after which a call to reserve a connection from the connection pool will timeout.When set to 0, a call will never timeout.
When set to -1, a call will timeout immediately.
6.4.3 Statement Timeout:
The time after which a statement currently being executed will time out.StatementTimeout relies on underlying JDBC driver support. WebLogic Server passes the time specified to the JDBC driver using the java.sql.Statement.setQueryTimeout() method. If your JDBC driver does not support this method, it may throw an exception and the timeout value is ignored.
A value of -1 disables this feature.
A value of 0 means that statements will not time out
6.5 Connection Factory Timeout:
If you have implemented the JMS in your project, then there
must be a connection factory exist to locate JMS queue, each connection factory
has its own timeout-
Weblogic Admin Console>>Home>>JMS
Module>>(Your JMS Module)>>(connection Factory Name)>>
Transaction Tab page
6.5.1 Transaction Timeout:
The timeout value
(in seconds) for all transactions on connections created with this connection
factory.
If a transacted session is still active after the timeout
has elapsed, the transaction is rolled back. A value of 0 indicates that the
default value will be used. If you have long-running transactions, you might
want to adjust the value of this attribute to allow transactions to complete.