[ 
https://issues.apache.org/jira/browse/IBATISNET-214?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gilles Bayon closed IBATISNET-214.
----------------------------------

    Resolution: Fixed

In SVN

> 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