|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Transaction problem with MQSI |
« View previous topic :: View next topic » |
Author |
Message
|
Galichet |
Posted: Sun Jan 27, 2002 4:26 pm Post subject: |
|
|
Acolyte
Joined: 26 Jun 2001 Posts: 69 Location: Paris - France
|
Hi all,
I'm still having the following problem with MQSI (using MQSI 2.0.2 on AIX or NT)
I have a flow with 1 input Node (Queue IN) and two output nodes (Queue A and Queue B)
I want to send a message in the Queue CATCH if the MQPUT in Queue A or Queue B fails
If a problem occurs for Queue A, I don't want to have a message in Queue B
If a problem occurs for Queue B, I don't want to have a message in Queue A
If the message is not put in the Queue CATCH successfully, I want to have a message in the Queue FAILURE
If the message is successfully put in the Queue CATCH, I don't want a message in the Queue FAILURE
For this problem, to be sure to have a complete rollback for Queue A and B,
I have to generate a Throw node in my Catch Path
In that case, the Queue CATCH has to be with Transaction Mode = No
My problem now is how to know if the rollback has been generated by my
Throw Node or because the put in the Queue CATCH has failed...
I've thought to use Database Nodes:
In the catch path:
I store in a Table the msgid of my message (with Transaction mode = no)
Then I try to put my message in the Queue CATCH (Transaction Mode = No)
If the put is not successful I delete this record (Transaction Mode = No)
After that I call the Throw Node
In the Failure Path
I access the Database to verify if my msgid is stored
If it is stored, then I want to delete it (because I'm sure that a message
has been sent to the Queue CATCH) and nothing more (Transaction Mode = No)
If the msgid is not in the Database, I want to have a message in the Queue
FAILURE.
I have the following problem when a message cannot be put in the Queue A or
Queue B:
The first message in error works fine
--> One message in the Queue CATCH
--> No message in the Queue FAILURE
--> The msgid has been inserted and deleted in the Database
The second message in error is not processed well
--> No message in the Queue CATCH
--> One message in the queue FAILURE
--> no msgid inserted in the database ....
I've generated the following trace :
*******************************************************************************Insert DB error
(
(0x1000000)RecoverableException = (
(0x3000000)File
= 'F:/build/S202_P/src/DataFlowEngine/ImbDataFlowNode.cpp'
(0x3000000)Line = 538
(0x3000000)Function
= 'ImbDataFlowNode::createExceptionList'
(0x3000000)Type = 'ComIbmDatabaseNode'
(0x3000000)Name
= '9e1e0693-eb00-0000-0080-d7403b445807'
(0x3000000)Label = 'TEST_TRANSAC.Insert MSGID'
(0x3000000)Text = 'Node throwing exception'
(0x3000000)Catalog = 'MQSIv202'
(0x3000000)Severity = 3
(0x3000000)Number = 2230
(0x1000000)RecoverableException = (
(0x3000000)File
= 'F:/build/S202_P/src/DataFlowEngine/ImbDatabaseNode.cpp'
(0x3000000)Line = 251
(0x3000000)Function = 'ImbDatabaseNode::evaluate'
(0x3000000)Type = 'ComIbmDatabaseNode'
(0x3000000)Name = '9e1e0693-eb00-0000-0080-d7403b445807'
(0x3000000)Label = 'TEST_TRANSAC.Insert MSGID'
(0x3000000)Text = 'Node will cause a database commit, but an
active transaction is pending on the same connection'
(0x3000000)Catalog = 'MQSIv202'
(0x3000000)Severity = 1
(0x3000000)Number = 3901
)
)
)
*******************************************************************************
I don't understand why I have this error message ... I'm processing a new
message, for me it's a new flow and all the access to the database are with
Transaction Mode = no .... ???
Do you have an idea what to do ?
The table where I store my message contains one field called MSGID (VARCHAR 50)
If you have an idea, you're welcome
Thank you very much for your help
_________________ Eric Galichet
SMABTP
France |
|
Back to top |
|
 |
Sandman |
Posted: Wed Jan 30, 2002 1:09 pm Post subject: |
|
|
Centurion
Joined: 16 Oct 2001 Posts: 134 Location: Lincoln, RI
|
Have you considered just wiring the Failure terminal of your CATCH output queue to store the message in the FAILURE queue and just leave the Failure terminal of the MQInput node unwired? |
|
Back to top |
|
 |
Galichet |
Posted: Thu Jan 31, 2002 4:57 am Post subject: |
|
|
Acolyte
Joined: 26 Jun 2001 Posts: 69 Location: Paris - France
|
The problem is that I need to use the Catch path to retrieve the ExceptionList... The Catch Queue is used bye another flow to log and store in a database all the errors.
If I have only one output destination in my flow all works fine.
What do you think of the postit plugin node ?
If I setup something with the postit just before doing the throw in the Catch path, Do you think I can retrieve this information in the failure path ?
_________________
Eric Galichet
IBM Global Services
France
[ This Message was edited by: Galichet on 2002-01-31 04:58 ] |
|
Back to top |
|
 |
Sandman |
Posted: Thu Jan 31, 2002 2:17 pm Post subject: |
|
|
Centurion
Joined: 16 Oct 2001 Posts: 134 Location: Lincoln, RI
|
I still don't understand why you need the MQInput node's Failure terminal wired if it's only used to catch messages that couldn't be put to your CATCH queue - IOW, only when the Catch path's CATCH MQOutput node fails?
I haven't used the PostIt plugin, but we ARE using the WKSPACE parser which I believe does pretty much the same thing? |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|