Conflict on session access with multiple DAO contexts 
------------------------------------------------------

                 Key: IBATISNET-214
                 URL: https://issues.apache.org/jira/browse/IBATISNET-214
             Project: iBatis for .NET
          Issue Type: Bug
          Components: DataAccess
    Affects Versions: DataAccess 1.9 .1
            Reporter: Gilles Bayon
         Assigned To: Gilles Bayon
             Fix For: DataAccess 1.9 .2


If I have multiple DAO contexts defined and attempt to open or start a
transaction on more than one context on the same thread  I am receiving
the "session already option / transaction already started" exception.  I
setup a test similar to the MultipleDAOTest in the iBATIS test cases
like so:
      [Test]
      public void TestMultipleDAO()
      {
          DomDaoManagerBuilder builder = new DomDaoManagerBuilder();
          builder.Configure("dao.config");

          IDaoManager mgr1 = DaoManager.GetInstance("Context1");
          IDaoManager mgr2 = DaoManager.GetInstance("Context2");
          IPatronDAO pDao = mgr1[typeof(IPatronDAO)] as IPatronDAO;
          ILogDAO lDao = mgr2[typeof(ILogDAO)] as ILogDAO;

          mgr1.OpenConnection();
          mgr2.OpenConnection();    <--- this is where the exception is
thrown
          ...
          mgr1.CloseConnection();
          mgr2.CloseConnection();
      }

I traced this into the iBATIS source, and see that when the
DomDaoManagerBuilder creates a DaoManager instance
(DaoManager.NewInstance), the internal DaoManager constructor is
invoked, which immediately calls SessionStoreFactory with the DaoManager
id to create a session store.  The problem appears to be that the call
to the SessionStoreFactory will always receive an empty string for id of
the Dao Context, since DomDaoManagerBuilder::GetContexts() doesn't
actually set the context id until after DaoManager.NewInstance()
returns.  As a result, sessions for all contexts on the same thread are
keyed on the default string _IBATIS_LOCAL_DAOSESSION_ from
AbstractSessionStore, which I confirmed through VS2005 debugging.  As
soon as you create one session (openconnection or begintransaction), all
contexts' LocalDaoSession reference this session because the sessionName
is the same for all.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to