ibatis-user-cs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ray Mitchell" <rmitch...@teconline.com>
Subject Transactions and multithreading
Date Wed, 29 Jun 2005 19:20:57 GMT
.NET iBatis users,

 

Hi, my name is Ray Mitchell.  Thanks for any support you could give; I'm
working on my first project using iBatisNet.

 

Here's my question:  Can multiple transactions take place in parallel
across different threads using a single DaoManager?  I understand that
within a single thread a call to DaoManager.BeginTransaction must be
matched with either a call to DaoManager.CommitTransaction or
DaoManager.RollBackTransaction before another call to
DaoManager.BeginTransaction can be made.  Is it possible to have
multiple threads call DaoManager.BeginTransaction on a single
DaoManager?

 

My tests indicate that multiple transactions CAN be in progress in
parallel using a single DaoManager.  The following code works:

 

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Data.SqlClient;

using System.Threading;

using IBatisNet.DataAccess;

using IBatisNet.DataAccess.Configuration;

using IBatisNet.DataAccess.Interfaces;

using NUnit.Framework;

 

namespace Tests

{

   [TestFixture]

   public class IBatisTests

   {

      private static DaoManager mDaoManager;

 

      [Test]

      public void TestTransactions()

      {

         DomDaoManagerBuilder builder = new DomDaoManagerBuilder();

         builder.Configure();

 

         IBatisTests.mDaoManager =
DaoManager.GetInstance("IBatisDataMapperDaoContext");

 

         for (int i = 0; i < 100; ++i)

         {

            IBatisTests.mDaoManager.BeginTransaction();

 

            ThreadStart threadStart = new
ThreadStart(IBatisTests.MyThreadStart);

            Thread workerThread = new Thread(threadStart);

            workerThread.Start();

            workerThread.Join();

 

            IBatisTests.mDaoManager.CommitTransaction();

         }

      }

 

      public static void MyThreadStart()

      {

         IBatisTests.mDaoManager.BeginTransaction();

         IBatisTests.mDaoManager.CommitTransaction();

      }

   }

}

 

Does the DaoManager maintain a different IDalSession for each thread
that requests that a new transaction be started?

 

I need to know because I'd like to use a singleton DaoManager that is
used by multiple pages throughout a website.  Each of these pages will
need to use transactions which will need to run in parallel.

 

Thanks,

Ray


Mime
View raw message