[jboss-svn-commits] JBL Code SVN: r25363 - labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Feb 20 09:55:03 EST 2009


Author: adinn
Date: 2009-02-20 09:55:02 -0500 (Fri, 20 Feb 2009)
New Revision: 25363

Modified:
   labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java
Log:
patched error in participant soap fault handling where it was failing to rollback a prepared participant when notified that it was unknown to the coordinator

Modified: labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java	2009-02-20 14:42:00 UTC (rev 25362)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java	2009-02-20 14:55:02 UTC (rev 25363)
@@ -330,6 +330,7 @@
      * @message com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_1 [com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_1] - Unexpected SOAP fault for participant {0}: {1} {2}
      * @message com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_2 [com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_2] - Unrecoverable error for participant {0} : {1} {2}
      * @message com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_3 [com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_3] - Unable to delete recovery record at commit for participant {0}
+     * @message com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_4 [com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_4] - Unexpected error rolling back participant {0}
      */
     public void soapFault(final SoapFault soapFault, final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
     {
@@ -341,9 +342,11 @@
             WSTLogger.arjLoggerI18N.debug("com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_1", new Object[] {instanceIdentifier, soapFaultType, subCode}) ;
         }
 
-        if (CoordinationConstants.WSCOOR_ERROR_CODE_INVALID_STATE_QNAME.equals(soapFault.getSubcode()) ||
-                AtomicTransactionConstants.WSAT_ERROR_CODE_INCONSISTENT_INTERNAL_STATE_QNAME.equals(soapFault.getSubcode()) ||
-                AtomicTransactionConstants.WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME.equals(soapFault.getSubcode()))
+        QName subcode = soapFault.getSubcode();
+
+        if (CoordinationConstants.WSCOOR_ERROR_CODE_INVALID_STATE_QNAME.equals(subcode) ||
+                AtomicTransactionConstants.WSAT_ERROR_CODE_INCONSISTENT_INTERNAL_STATE_QNAME.equals(subcode) ||
+                AtomicTransactionConstants.WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME.equals(subcode))
         {
             if (WSTLogger.arjLoggerI18N.isErrorEnabled())
             {
@@ -362,6 +365,19 @@
                 state = null;
             }
 
+            if (current == State.STATE_PREPARED_SUCCESS &&
+                    AtomicTransactionConstants.WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME.equals(subcode)) {
+                // we need to tell this participant to roll back
+                try {
+                    participant.rollback();
+                } catch (Exception e) {
+                    if (WSTLogger.arjLoggerI18N.isErrorEnabled())
+                    {
+                        WSTLogger.arjLoggerI18N.error("com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_3", new Object[] {id}) ;
+                    }
+                }
+            }
+
             if (persisted && participant instanceof Durable2PCParticipant) {
                 // remove any durable participant recovery record from the persistent store
                 Durable2PCParticipant durableParticipant =(Durable2PCParticipant) participant;




More information about the jboss-svn-commits mailing list