[jboss-svn-commits] JBL Code SVN: r21521 - in labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna: wst11/messaging and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 13 12:08:13 EDT 2008


Author: adinn
Date: 2008-08-13 12:08:13 -0400 (Wed, 13 Aug 2008)
New Revision: 21521

Modified:
   labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/webservices11/wsat/AtomicTransactionConstants.java
   labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/CoordinatorProcessorImpl.java
   labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorEngine.java
   labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java
Log:
modified 1.1. code to generate UnknownTransaction SoapFault as per 1.1 spec rather than InvalidState Soapfault as per 1.0 spec

Modified: labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/webservices11/wsat/AtomicTransactionConstants.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/webservices11/wsat/AtomicTransactionConstants.java	2008-08-13 16:07:01 UTC (rev 21520)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/webservices11/wsat/AtomicTransactionConstants.java	2008-08-13 16:08:13 UTC (rev 21521)
@@ -209,6 +209,15 @@
     public QName WSAT_ERROR_CODE_INCONSISTENT_INTERNAL_STATE_QNAME = new QName(WSAT_NAMESPACE, WSAT_ERROR_CODE_INCONSISTENT_INTERNAL_STATE, WSAT_PREFIX) ;
 
     /**
+     * The UnknownTransaction error code.
+     */
+    public String WSAT_ERROR_CODE_UNKNOWN_TRANSACTION = "UnknownTransaction" ;
+    /**
+     * The UnknownTransaction error code QName.
+     */
+    public QName WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME = new QName(WSAT_NAMESPACE, WSAT_ERROR_CODE_UNKNOWN_TRANSACTION, WSAT_PREFIX) ;
+
+    /**
      * The atomic transaction protocol.
      */
     public String WSAT_PROTOCOL = WSAT_NAMESPACE ;

Modified: labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/CoordinatorProcessorImpl.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/CoordinatorProcessorImpl.java	2008-08-13 16:07:01 UTC (rev 21520)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/CoordinatorProcessorImpl.java	2008-08-13 16:08:13 UTC (rev 21521)
@@ -13,7 +13,6 @@
 import com.arjuna.webservices11.wsat.processors.CoordinatorProcessor;
 import com.arjuna.webservices11.wscoor.CoordinationConstants;
 import com.arjuna.webservices11.SoapFault11;
-import com.arjuna.webservices11.ServiceRegistry;
 import com.arjuna.wsc11.messaging.MessageId;
 import org.oasis_open.docs.ws_tx.wsat._2006._06.Notification;
 import org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager;
@@ -185,7 +184,7 @@
             }
             else
             {
-                sendInvalidState(addressingProperties, arjunaContext) ;
+                sendUnknownTransaction(addressingProperties, arjunaContext) ;
             }
         }
         else
@@ -279,23 +278,23 @@
      * @param addressingProperties The addressing context.
      * @param arjunaContext The arjuna context.
      *
-     * @message com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_1 [com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_1] - Unknown Transaction.
-     * @message com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_2 [com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_2] - Unexpecting exception while sending InvalidState
+     * @message com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_1 [com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_1] - Unknown Transaction.
+     * @message com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_2 [com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_2] - Unexpecting exception while sending InvalidState
      */
-    private void sendInvalidState(final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
+    private void sendUnknownTransaction(final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
     {
         // KEV add check for recovery
         final AddressingProperties faultAddressingContext = AddressingHelper.createFaultContext(addressingProperties, MessageId.getMessageId()) ;
         final InstanceIdentifier instanceIdentifier = arjunaContext.getInstanceIdentifier() ;
 
         try {
-            final String message = WSTLogger.log_mesg.getString("com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_1") ;
-            final SoapFault soapFault = new SoapFault11(SoapFaultType.FAULT_SENDER, CoordinationConstants.WSCOOR_ERROR_CODE_INVALID_STATE_QNAME, message) ;
+            final String message = WSTLogger.log_mesg.getString("com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_1") ;
+            final SoapFault soapFault = new SoapFault11(SoapFaultType.FAULT_SENDER, AtomicTransactionConstants.WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME, message) ;
             ParticipantClient.getClient().sendSoapFault(faultAddressingContext, soapFault, instanceIdentifier) ;
         } catch (final Throwable th) {
             if (WSTLogger.arjLoggerI18N.isDebugEnabled())
             {
-                WSTLogger.arjLoggerI18N.debug("com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendInvalidState_2", th) ;
+                WSTLogger.arjLoggerI18N.debug("com.arjuna.wst11.messaging.CoordinatorProcessorImpl.sendUnknownTransaction_2", th) ;
             }
         }
     }

Modified: labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorEngine.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorEngine.java	2008-08-13 16:07:01 UTC (rev 21520)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorEngine.java	2008-08-13 16:08:13 UTC (rev 21521)
@@ -10,9 +10,9 @@
 import com.arjuna.webservices11.wsarj.InstanceIdentifier;
 import com.arjuna.webservices11.wsat.CoordinatorInboundEvents;
 import com.arjuna.webservices11.wsat.State;
+import com.arjuna.webservices11.wsat.AtomicTransactionConstants;
 import com.arjuna.webservices11.wsat.client.ParticipantClient;
 import com.arjuna.webservices11.wsat.processors.CoordinatorProcessor;
-import com.arjuna.webservices11.wscoor.CoordinationConstants;
 import com.arjuna.wsc11.messaging.MessageId;
 import org.oasis_open.docs.ws_tx.wsat._2006._06.Notification;
 
@@ -182,20 +182,25 @@
         {
             sendCommit() ;
         }
-        else if ((current == State.STATE_ABORTING) || ((current == null) && !readOnly))
+        else if ((current == State.STATE_ABORTING))
         {
+            if (durable) {
+                sendRollback();
+            } else {
+                sendUnknownTransaction(addressingProperties, arjunaContext) ;
+            }
+            forget();
+        }
+        else if ((current == null) && !readOnly)
+        {
             if (durable)
             {
                 sendRollback() ;
             }
             else
             {
-        	    sendInvalidState(addressingProperties, arjunaContext) ;
+        	sendUnknownTransaction(addressingProperties, arjunaContext) ;
             }
-            if (current != null)
-            {
-        	forget() ;
-            }
         }
     }
 
@@ -386,7 +391,27 @@
             forget() ;
         }
 
-        return waitForState(State.STATE_ABORTING, TransportTimer.getTransportTimeout()) ;
+        waitForState(State.STATE_ABORTING, TransportTimer.getTransportTimeout()) ;
+
+        synchronized(this)
+        {
+            if (state != State.STATE_ABORTING)
+            {
+                // means state must be null and the participant has already been deactivated
+
+                return state ;
+            }
+
+            // the participant has not confirmed that it is aborted so it will be written to the
+            // log in the transaction's heuristic list. it needs to be deactivated here
+            // so that subsequent ABORTED messages are handled correctly, either by sending
+            // an UnknownTransaction fault or a rollback depending upon whether it is
+            // volatile or durable, respectively
+
+            forget();
+
+            return State.STATE_ABORTING;
+        }
     }
 
     /**
@@ -653,27 +678,27 @@
     }
 
     /**
-     * Send the InvalidStateWS message.
+     * Send the UnknownTransaction message.
      *
-     * @message com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_1 [com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_1] - Inconsistent internal state.
-     * @message com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_2 [com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_2] - Unexpecting exception while sending InvalidState
+     * @message com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_1 [com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_1] - Unknown transaction
+     * @message com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_2 [com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_2] - Unexpected exception while sending UnknownTransaction for participant {0}
      */
-    private void sendInvalidState(final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
+    private void sendUnknownTransaction(final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
     {
         try
         {
             final AddressingProperties faultAddressingProperties = AddressingHelper.createFaultContext(addressingProperties, MessageId.getMessageId()) ;
             final InstanceIdentifier instanceIdentifier = arjunaContext.getInstanceIdentifier() ;
 
-            final String message = WSTLogger.log_mesg.getString("com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_1") ;
-            final SoapFault soapFault = new SoapFault11(SoapFaultType.FAULT_SENDER, CoordinationConstants.WSCOOR_ERROR_CODE_INVALID_STATE_QNAME, message) ;
+            final String message = WSTLogger.log_mesg.getString("com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_1") ;
+            final SoapFault soapFault = new SoapFault11(SoapFaultType.FAULT_SENDER, AtomicTransactionConstants.WSAT_ERROR_CODE_UNKNOWN_TRANSACTION_QNAME, message) ;
             ParticipantClient.getClient().sendSoapFault(faultAddressingProperties, soapFault, instanceIdentifier) ;
         }
         catch (final Throwable th)
         {
-            if (WSTLogger.arjLoggerI18N.isDebugEnabled())
+            if (WSTLogger.arjLoggerI18N.isWarnEnabled())
             {
-                WSTLogger.arjLoggerI18N.debug("com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendInvalidState_2", th) ;
+                WSTLogger.arjLoggerI18N.warn("com.arjuna.wst11.messaging.engines.CoordinatorEngine.sendUnknownTransaction_2", new Object[] { id }, th) ;
             }
         }
     }

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	2008-08-13 16:07:01 UTC (rev 21520)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/ParticipantEngine.java	2008-08-13 16:08:13 UTC (rev 21521)
@@ -11,6 +11,7 @@
 import com.arjuna.webservices11.wsat.client.CoordinatorClient;
 import com.arjuna.webservices11.wsat.ParticipantInboundEvents;
 import com.arjuna.webservices11.wsat.State;
+import com.arjuna.webservices11.wsat.AtomicTransactionConstants;
 import com.arjuna.webservices11.wsat.processors.ParticipantProcessor;
 import com.arjuna.wsc11.messaging.MessageId;
 import com.arjuna.wst.*;
@@ -304,6 +305,8 @@
      * @param arjunaContext The arjuna context.
      *
      * @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}
      */
     public void soapFault(final SoapFault soapFault, final AddressingProperties addressingProperties, final ArjunaContext arjunaContext)
     {
@@ -315,8 +318,41 @@
             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()))
+        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()))
         {
+            if (WSTLogger.arjLoggerI18N.isErrorEnabled())
+            {
+                final SoapFaultType soapFaultType = soapFault.getSoapFaultType() ;
+                final QName subCode = soapFault.getSubcode() ;
+                WSTLogger.arjLoggerI18N.error("com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_2", new Object[] {id, soapFaultType, subCode}) ;
+            }
+
+            // unrecoverable error -- forget this participant and delete any persistent
+            //  record of it
+            final State current ;
+
+            synchronized(this)
+            {
+                current = state;
+                state = null;
+            }
+
+            if (persisted && participant instanceof Durable2PCParticipant) {
+                // remove any durable participant recovery record from the persistent store
+                Durable2PCParticipant durableParticipant =(Durable2PCParticipant) participant;
+
+                // if we cannot delete the participant we record an error here
+                if (!XTSATRecoveryManager.getRecoveryManager().deleteParticipantRecoveryRecord(id)) {
+                    // hmm, could not delete entry -- log an error
+                    if (WSTLogger.arjLoggerI18N.isErrorEnabled())
+                    {
+                        WSTLogger.arjLoggerI18N.error("com.arjuna.wst11.messaging.engines.ParticipantEngine.soapFault_3", new Object[] {id}) ;
+                    }
+                }
+            }
+
             forget() ;
         }
     }
@@ -436,7 +472,7 @@
                     return;
                 }
             }
-            
+
             sendCommitted() ;
             forget() ;
         }




More information about the jboss-svn-commits mailing list