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.