You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-cs@ibatis.apache.org by Rafi Ghazarian <rg...@privateaccess.info> on 2008/09/03 18:46:14 UTC

Can iBatis handle multiple Dao Managers in the same app domain?

Hi All,

I have two DaoManagers in my application.   I saw an inconsistent behavior when getting the local session handler from one of the Dao Managers.    I noticed that one of the Dao Manager gave me the context (session handler) that belonged to the other Dao Manager.  Furthermore, I noticed this when I had called OpenConnection on the incorrect Dao Manager.  After I switched the OpenConnection on the correct Dao Manager, I got the correct session handler.  Currently I notice that CondfiguerAndWatch will only work on one of the DaoManager configurations, but not both.  The one that it works on, is random.

Some sample code

public void Init()
{            _daoManager1 = ServiceConfig1.GetInstance().DaoManager;
            _DaoManager2 = ServiceConfig2.GetInstance().DaoManager;
            _subjectDao = (ISubjectDao)_daoManager[typeof(ISubjectDao)];
            _subjectIndexDao = (ISubjectIndexDao)_subjectIndexDaoManager[typeof(ISubjectIndexDao)];
            _dataRequestDao = (IDataRequestDao)_daoManager[typeof(IDataRequestDao)];
}

public SubjectSearchCollection SearchSubject(SubjectSearchInputs ssi, PaginationInfo pageInfo)
{
    SubjectSearchCollection subjectSearch = null;

    try
    {
//I found the issue here, where I was calling _ daoManager1.OpenConnection(); instead of _ DaoManager2.OpenConnection()

        _ DaoManager2.OpenConnection();


        subjectSearch = _subjectIndexDao.SearchSubject(ssi, pageInfo);
    }
    finally
    {
        if (_subjectIndexDaoManager != null)
            _subjectIndexDaoManager.CloseConnection();
    }

    return subjectSearch;
}

I realize that I can have a single DaoManager with 2 contexts for the 2 different data sources, however, due to system security requirements these two database connections need to be as physically segregated as possible.  That is why I went with a completely separate Dao Manager.

Please let me know if I am violating any of the base assumptions in ibatis, such as, you can only have a single dao manager in your app domain.  Also, will run into any distributed transaction management issues in the future?

Thanks for your help in advance,
Rafi

Re: Can iBatis handle multiple Dao Managers in the same app domain?

Posted by Simone Busoli <si...@gmail.com>.
I think this is a bug in the released version of iBatis. That should be
fixed in the trunk.

On Wed, Sep 3, 2008 at 6:46 PM, Rafi Ghazarian <
rghazarian@privateaccess.info> wrote:

>  Hi All,
>
>
>
> I have two DaoManagers in my application.   I saw an inconsistent behavior
> when getting the local session handler from one of the Dao Managers.    I
> noticed that one of the Dao Manager gave me the context (session handler)
> that belonged to the other Dao Manager.  Furthermore, I noticed this when I
> had called OpenConnection on the incorrect Dao Manager.  After I switched
> the OpenConnection on the correct Dao Manager, I got the correct session
> handler.  Currently I notice that CondfiguerAndWatch will only work on one
> of the DaoManager configurations, but not both.  The one that it works on,
> is random.
>
>
>
> Some sample code
>
>
>
> public void Init()
>
> {            _daoManager1 = ServiceConfig1.GetInstance().DaoManager;
>
>             _DaoManager2 = ServiceConfig2.GetInstance().DaoManager;
>
>             _subjectDao = (ISubjectDao)_daoManager[typeof(ISubjectDao)];
>
>             _subjectIndexDao = (ISubjectIndexDao)_subjectIndexDaoManager[
> typeof(ISubjectIndexDao)];
>
>             _dataRequestDao = (IDataRequestDao)_daoManager[typeof(
> IDataRequestDao)];
>
> }
>
>
>
> public SubjectSearchCollection SearchSubject(SubjectSearchInputs ssi,
> PaginationInfo pageInfo)
>
> {
>
>     SubjectSearchCollection subjectSearch = null;
>
>
>
>     try
>
>     {
>
> //I found the issue here, where I was calling _
> daoManager1.OpenConnection(); instead of _ DaoManager2.OpenConnection()
>
>
>
>         _ DaoManager2.OpenConnection();
>
>
>
>
>
>         subjectSearch = _subjectIndexDao.SearchSubject(ssi, pageInfo);
>
>     }
>
>     finally
>
>     {
>
>         if (_subjectIndexDaoManager != null)
>
>             _subjectIndexDaoManager.CloseConnection();
>
>     }
>
>
>
>     return subjectSearch;
>
> }
>
>
>
> I realize that I can have a single DaoManager with 2 contexts for the 2
> different data sources, however, due to system security requirements these
> two database connections need to be as physically segregated as possible.
> That is why I went with a completely separate Dao Manager.
>
>
>
> Please let me know if I am violating any of the base assumptions in ibatis,
> such as, you can only have a single dao manager in your app domain.  Also,
> will run into any distributed transaction management issues in the future?
>
>
>
> Thanks for your help in advance,
>
> Rafi
>