When there is a distributed transaction involved in message processing, it is very important that all the resources involved in the transaction are reachable without any latency. When this is not the case and there is an issue with the communication between the resources, there can be issues of message processing which might result in transaction timeouts, rollbacks and other runtime errors.
Take a scenario of the below architecture:
A SLSB client/Application sends a message of 2MB size to weblogic Queue, that message is received by the MDB deployed on the weblogic server. That message is then processed, retrieves some information from databases. After the processing is complete, the messages is then displayed by the MDB.
First of all we need to identify where is the message size causing an issue. Is it from the queue end, message bridge end (if used), or is it the MDB that is not able to consume the messages. Enable the debug flags as required.
When these messages are large in size and out of the size limit of the queue or the protocol by which the message is being transferred, below errors can occur:
1) weblogic.socket.MaxMessageSizeExceededException: Incoming message of size: ‘10000080’ bytes exceeds the configured maximum of: ‘10000000’ bytes for protocol : ‘t3’.
Solution : Try to increase the message size from the admin console for the protocol by:
– Queue-> Configuration-> Threshholds and Quotas-> Maximum Message Size
– MAX message size in Server-> Admin/managed server-> Protocals-> General
– Setting the system property -Dweblogic.MaxMessageSize=20000000
Note : The message size would vary as per the application requirement.
2) <BEA-489003> <Caught Exception: com.bea.wli.variables.XmlObjectRuntimeException: Error Creating the XmlObject
com.bea.wli.variables.XmlObjectRuntimeException: Error Creating the XmlObject
– This is seen when the message processing includes retrieving some data from the database using SQL Queries but the messages size exceeds the maximum size of a document stored in the SQL Document Store.
Solution: – Increase the values of weblogic.wli.DocumentMaxInlineSize and weblogic.wli.DocumentMaxInMemorySize in wli-config.properties.
– Increase the WLI transaction timeout in the wlw-config.xml.
– Set the parameters XASetTransactionTimeout=”true” and XATransactionTimeout=”xxx” as perferred.
3)java.io.IOException: Could not connect to SQL Document Store
Caused by: com.bea.wli.store.DocumentStoreException: Could not connect to SQL Document Store
– Check if there is a network issue and the SQL store is available. Take 5-6 thread dumps at the interval of 10 seconds each to check if there are any stuck threads while connecting to the SQL store.
4) java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: Transaction rolled
back: Transaction timed out after 600 seconds
– Now if the message size of 2mb is being processed successfully and if you are facing issue with a larger message say 3mb, you might see the above transaction timeout error in the log files. This means issue is with the message processing taking a long time.
– If the whole sending and receiving of messages from application is one single transaction, check where is the latency. Is the communication between all the resources happening properly or is there a network issue. Check if all the information is being retrieved from the database on time or is it taking long.
If you find any other issue or reason for the JMS transaction rollbacks or delay in message processing, feel free to comment and let us know about it, we will take a look and try to resolve the issue.