You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2011/02/04 22:10:08 UTC
svn commit: r1067285 - in
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp:
NetTxConnection.cs Session.cs TransactionContext.cs
Author: tabish
Date: Fri Feb 4 21:10:07 2011
New Revision: 1067285
URL: http://svn.apache.org/viewvc?rev=1067285&view=rev
Log:
Do a little code cleanup and enahance the trace statements in the TransactionContext to also log the associated TX Id.
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/NetTxConnection.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/TransactionContext.cs
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/NetTxConnection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/NetTxConnection.cs?rev=1067285&r1=1067284&r2=1067285&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/NetTxConnection.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/NetTxConnection.cs Fri Feb 4 21:10:07 2011
@@ -16,7 +16,6 @@
*/
using System;
-using Apache.NMS;
using Apache.NMS.ActiveMQ.Transport;
using Apache.NMS.ActiveMQ.Util;
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs?rev=1067285&r1=1067284&r2=1067285&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs Fri Feb 4 21:10:07 2011
@@ -882,7 +882,7 @@ namespace Apache.NMS.ActiveMQ
}
}
- private void ClearMessages(object value)
+ private static void ClearMessages(object value)
{
MessageConsumer consumer = value as MessageConsumer;
@@ -944,7 +944,7 @@ namespace Apache.NMS.ActiveMQ
/// <param name="message">
/// A <see cref="ActiveMQMessage"/>
/// </param>
- private void DoNothingAcknowledge(ActiveMQMessage message)
+ private static void DoNothingAcknowledge(ActiveMQMessage message)
{
}
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/TransactionContext.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/TransactionContext.cs?rev=1067285&r1=1067284&r2=1067285&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/TransactionContext.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/TransactionContext.cs Fri Feb 4 21:10:07 2011
@@ -17,6 +17,7 @@
using System;
using System.Text;
+using System.Threading;
using System.Transactions;
using System.Collections;
using System.Collections.Generic;
@@ -198,11 +199,18 @@ namespace Apache.NMS.ActiveMQ
#region Transaction Members used when dealing with .NET System Transactions.
+ private readonly ManualResetEvent dtcControlEvent = new ManualResetEvent(false);
+
public bool InNetTransaction
{
get{ return this.transactionId != null && this.transactionId is XATransactionId; }
}
+ public WaitHandle DtcWaitHandle
+ {
+ get { return dtcControlEvent; }
+ }
+
public void Begin(Transaction transaction)
{
Tracer.Debug("Begin notification received");
@@ -254,7 +262,9 @@ namespace Apache.NMS.ActiveMQ
{
try
{
- Tracer.Debug("Prepare notification received");
+ dtcControlEvent.Reset();
+
+ Tracer.Debug("Prepare notification received for TX id: " + this.transactionId);
BeforeEnd();
@@ -277,7 +287,7 @@ namespace Apache.NMS.ActiveMQ
IntegerResponse response = (IntegerResponse) this.connection.SyncRequest(info);
if(response.Result == XA_READONLY)
{
- Tracer.Debug("Transaction Prepare Reports Done with no need to Commit: ");
+ Tracer.Debug("Transaction Prepare done and doesn't need a commit, TX id: " + this.transactionId);
this.transactionId = null;
this.currentEnlistment = null;
@@ -295,7 +305,7 @@ namespace Apache.NMS.ActiveMQ
}
else
{
- Tracer.Debug("Transaction Prepare finished Successfully: ");
+ Tracer.Debug("Transaction Prepare succeeded TX id: " + this.transactionId);
// If work finished correctly, reply prepared
preparingEnlistment.Prepared();
@@ -303,7 +313,9 @@ namespace Apache.NMS.ActiveMQ
}
catch(Exception ex)
{
- Tracer.Debug("Transaction Prepare failed with error: " + ex.Message);
+ Tracer.DebugFormat("Transaction[{0}] Prepare failed with error: {1}",
+ this.transactionId, ex.Message);
+
AfterRollback();
preparingEnlistment.ForceRollback();
try
@@ -318,13 +330,19 @@ namespace Apache.NMS.ActiveMQ
this.currentEnlistment = null;
this.transactionId = null;
}
+ finally
+ {
+ this.dtcControlEvent.Set();
+ }
}
public void Commit(Enlistment enlistment)
{
try
{
- Tracer.Debug("Commit notification received");
+ dtcControlEvent.Reset();
+
+ Tracer.Debug("Commit notification received for TX id: " + this.transactionId);
if (this.transactionId != null)
{
@@ -337,7 +355,7 @@ namespace Apache.NMS.ActiveMQ
this.connection.CheckConnected();
this.connection.SyncRequest(info);
- Tracer.Debug("Transaction Commit Reports Done: ");
+ Tracer.Debug("Transaction Commit Done TX id: " + this.transactionId);
RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
@@ -349,7 +367,8 @@ namespace Apache.NMS.ActiveMQ
}
catch(Exception ex)
{
- Tracer.Debug("Transaction Commit failed with error: " + ex.Message);
+ Tracer.DebugFormat("Transaction[{0}] Commit failed with error: {1}",
+ this.transactionId, ex.Message);
AfterRollback();
try
{
@@ -370,16 +389,20 @@ namespace Apache.NMS.ActiveMQ
{
latch.countDown();
}
+
+ this.dtcControlEvent.Set();
}
}
public void SinglePhaseCommit(SinglePhaseEnlistment enlistment)
{
- Tracer.Debug("Single Phase Commit notification received");
-
try
{
- if(this.transactionId != null)
+ dtcControlEvent.Reset();
+
+ Tracer.Debug("Single Phase Commit notification received for TX id: " + this.transactionId);
+
+ if (this.transactionId != null)
{
BeforeEnd();
@@ -392,7 +415,7 @@ namespace Apache.NMS.ActiveMQ
this.connection.CheckConnected();
this.connection.SyncRequest(info);
- Tracer.Debug("Transaction Single Phase Commit Reports Done: ");
+ Tracer.Debug("Transaction Single Phase Commit Done TX id: " + this.transactionId);
// if server responds that nothing needs to be done, then reply done.
enlistment.Done();
@@ -402,7 +425,8 @@ namespace Apache.NMS.ActiveMQ
}
catch(Exception ex)
{
- Tracer.Debug("Transaction Single Phase Commit failed with error: " + ex.Message);
+ Tracer.DebugFormat("Transaction[{0}] Single Phase Commit failed with error: {1}",
+ this.transactionId, ex.Message);
AfterRollback();
enlistment.Done();
try
@@ -418,6 +442,8 @@ namespace Apache.NMS.ActiveMQ
{
this.currentEnlistment = null;
this.transactionId = null;
+
+ this.dtcControlEvent.Set();
}
}
@@ -425,7 +451,9 @@ namespace Apache.NMS.ActiveMQ
{
try
{
- Tracer.Debug("Rollback notification received");
+ dtcControlEvent.Reset();
+
+ Tracer.Debug("Rollback notification received for TX id: " + this.transactionId);
if (this.transactionId != null)
{
@@ -444,7 +472,7 @@ namespace Apache.NMS.ActiveMQ
this.connection.CheckConnected();
this.connection.SyncRequest(info);
- Tracer.Debug("Transaction Rollback Reports Done: ");
+ Tracer.Debug("Transaction Rollback Done TX id: " + this.transactionId);
RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
@@ -456,7 +484,8 @@ namespace Apache.NMS.ActiveMQ
}
catch(Exception ex)
{
- Tracer.Debug("Transaction Rollback failed with error: " + ex.Message);
+ Tracer.DebugFormat("Transaction[{0}] Rollback failed with error: {1}",
+ this.transactionId, ex.Message);
AfterRollback();
try
{
@@ -477,6 +506,8 @@ namespace Apache.NMS.ActiveMQ
{
latch.countDown();
}
+
+ this.dtcControlEvent.Set();
}
}
@@ -484,7 +515,9 @@ namespace Apache.NMS.ActiveMQ
{
try
{
- Tracer.Debug("In doubt notification received, Rolling Back TX");
+ dtcControlEvent.Reset();
+
+ Tracer.Debug("In Doubt notification received for TX id: " + this.transactionId);
BeforeEnd();
@@ -501,7 +534,7 @@ namespace Apache.NMS.ActiveMQ
this.connection.CheckConnected();
this.connection.SyncRequest(info);
- Tracer.Debug("InDoubt Transaction Rollback Reports Done: ");
+ Tracer.Debug("InDoubt Transaction Rollback Done TX id: " + this.transactionId);
RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
@@ -520,6 +553,8 @@ namespace Apache.NMS.ActiveMQ
{
latch.countDown();
}
+
+ this.dtcControlEvent.Set();
}
}
@@ -580,11 +615,13 @@ namespace Apache.NMS.ActiveMQ
foreach (KeyValuePair<XATransactionId, byte[]> recoverable in matches)
{
this.transactionId = recoverable.Key;
+ Tracer.Info("Reenlisting recovered TX with Id: " + this.transactionId);
this.currentEnlistment =
TransactionManager.Reenlist(ResourceManagerGuid, recoverable.Value, this);
}
this.recoveryComplete.await();
+ Tracer.Debug("All Recovered TX enlistments Reports complete, Recovery Complete.");
TransactionManager.RecoveryComplete(ResourceManagerGuid);
return;
}