You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/02/15 10:44:38 UTC

[13/50] [abbrv] ignite git commit: IGNITE-4619 .NET: TransactionScope example

IGNITE-4619 .NET: TransactionScope example

This closes #1492


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e6cc8cda
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e6cc8cda
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e6cc8cda

Branch: refs/heads/ignite-3477-merge2.0
Commit: e6cc8cdab85c96d7a2088d3a5267f3f42039601b
Parents: 26ee9c2
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Wed Feb 8 13:15:08 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Wed Feb 8 13:15:08 2017 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Examples.csproj               |  1 +
 .../Datagrid/TransactionExample.cs              | 75 +++++++++++++++-----
 2 files changed, 59 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e6cc8cda/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
index ebf9e92..c3ea378 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
@@ -49,6 +49,7 @@
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Transactions" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Compute\ClosureExample.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/e6cc8cda/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs
index f90cf96..83d08ff 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs
@@ -18,7 +18,9 @@
 namespace Apache.Ignite.Examples.Datagrid
 {
     using System;
+    using System.Transactions;
     using Apache.Ignite.Core;
+    using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Transactions;
     using Apache.Ignite.ExamplesDll.Binary;
@@ -59,18 +61,9 @@ namespace Apache.Ignite.Examples.Datagrid
                     AtomicityMode = CacheAtomicityMode.Transactional
                 });
 
-                // Clean up caches on all nodes before run.
-                cache.Clear();
+                InitAccounts(cache);
 
-                // Initialize.
-                cache.Put(1, new Account(1, 100));
-                cache.Put(2, new Account(2, 200));
-
-                Console.WriteLine();
-                Console.WriteLine(">>> Accounts before transfer: ");
-                Console.WriteLine(">>>     " + cache.Get(1));
-                Console.WriteLine(">>>     " + cache.Get(2));
-                Console.WriteLine();
+                Console.WriteLine("\n>>> Transferring with Ignite transaction API...");
 
                 // Transfer money between accounts in a single transaction.
                 using (var tx = cache.Ignite.GetTransactions().TxStart(TransactionConcurrency.Pessimistic,
@@ -88,18 +81,66 @@ namespace Apache.Ignite.Examples.Datagrid
                     tx.Commit();
                 }
 
-                Console.WriteLine(">>> Transfer finished.");
+                DisplayAccounts(cache);
 
-                Console.WriteLine();
-                Console.WriteLine(">>> Accounts after transfer: ");
-                Console.WriteLine(">>>     " + cache.Get(1));
-                Console.WriteLine(">>>     " + cache.Get(2));
-                Console.WriteLine();
+                InitAccounts(cache);
+
+                Console.WriteLine("\n>>> Transferring with TransactionScope API...");
+
+                // Do the same transaction with TransactionScope API.
+                using (var ts = new TransactionScope())
+                {
+                    Account acc1 = cache.Get(1);
+                    Account acc2 = cache.Get(2);
+
+                    acc1.Balance += 100;
+                    acc2.Balance -= 100;
+
+                    cache.Put(1, acc1);
+                    cache.Put(2, acc2);
+
+                    ts.Complete();
+                }
+
+                DisplayAccounts(cache);
             }
 
             Console.WriteLine();
             Console.WriteLine(">>> Example finished, press any key to exit ...");
             Console.ReadKey();
         }
+
+        /// <summary>
+        /// Displays accounts.
+        /// </summary>
+        private static void DisplayAccounts(ICache<int, Account> cache)
+        {
+            Console.WriteLine(">>> Transfer finished.");
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Accounts after transfer: ");
+            Console.WriteLine(">>>     " + cache.Get(1));
+            Console.WriteLine(">>>     " + cache.Get(2));
+            Console.WriteLine();
+        }
+
+        /// <summary>
+        /// Initializes account balance.
+        /// </summary>
+        private static void InitAccounts(ICache<int, Account> cache)
+        {
+            // Clean up caches on all nodes before run.
+            cache.Clear();
+
+            // Initialize.
+            cache.Put(1, new Account(1, 100));
+            cache.Put(2, new Account(2, 200));
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Accounts before transfer: ");
+            Console.WriteLine(">>>     " + cache.Get(1));
+            Console.WriteLine(">>>     " + cache.Get(2));
+            Console.WriteLine();
+        }
     }
 }