[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