[ 
https://issues.apache.org/jira/browse/IBATISNET-291?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12735062#action_12735062
 ] 

M F edited comment on IBATISNET-291 at 7/24/09 7:20 AM:
--------------------------------------------------------

Here's a hastily hacked patch I made for the revision 709676 source.
(Resulting DLL also attached.)

I implemented the submitter's idea of having SqlMapSession.Dispose() call 
SqlMapper._sessionStore.Dispose() when the connection is closed:

            if (_isTransactionOpen == false)
            {
                if (_connection.State != ConnectionState.Closed)
                {
                    _sqlMapper.CloseConnection();
                }
                else
                {
                    _sqlMapper.SessionStore.Dispose();
                }
            }


Note that this also involved adding a public getter for SessionStore.

If anyone encounters problems with this, please comment about it.

      was (Author: maf7777):
    Here's a hastily hacked patch I made for the revision 709676 source.
(Resulting DLL also attached.)

I implemented the submitter's idea of having SqlMapSession.Dispose() call 
SqlMapper._sessionStore.Dispose() when the connection is closed:

                        if (_isTransactionOpen == false)
                        {
                                if (_connection.State != ConnectionState.Closed)
                                {
                                        _sqlMapper.CloseConnection();
                                }
                                else
                                {
                                    _sqlMapper.SessionStore.Dispose();
                                }
                        }


Note that this also involved adding a public getter for SessionStore.

If anyone encounters problems with this, please comment about it.
  
> SqlMapper.OpenConnection() does not actually open connection
> ------------------------------------------------------------
>
>                 Key: IBATISNET-291
>                 URL: https://issues.apache.org/jira/browse/IBATISNET-291
>             Project: iBatis for .NET
>          Issue Type: Bug
>          Components: DataMapper
>    Affects Versions: DataMapper 1.6.1
>            Reporter: Jonas Hamnered
>         Attachments: IBATISNET-291_session-dispose.patch, 
> IBatisNet.DataMapper_patched.dll
>
>
> The second sqlMap.OpenConnection() in the following sample causes an 
> exception for DataMapper 1.6.1.
>         ISqlMapper sqlMap = Mapper.Get();
>         using (IDalSession session = sqlMap.OpenConnection())
>         {
>                 // session for some reason never used, could be due to logic 
> in called methods
>         }
>         using (IDalSession session = sqlMap.OpenConnection())
>         {
>         }
> The exception is:
> IBatisNet.DataMapper.Exceptions.DataMapperException: SqlMap could not invoke 
> OpenConnection(). A connection is already started. Call CloseConnection first.
>    at IBatisNet.DataMapper.SqlMapper.OpenConnection() in 
> C:\Devel\lib\iBatis\IBatisNet.DataMapper\SqlMapper.cs:line 204
> The reason is as far as I can tell that sqlMap.OpenConnection no longer opens 
> the underlying connection. Instead this is done "on demand". 
> The problem is that if the session is never used before being disposed, 
> SqlMapSession.Dispose() does not properly cause the 
> SqlMapper._sessionStore.Dispose() to be called:
> [from IBatisNet.DataMapper.SqlMapSession.Dispose()]
>         if (_isTransactionOpen == false)
>         {
>                 if (_connection.State != ConnectionState.Closed)
>                 {
>                         _sqlMapper.CloseConnection();
>                 }
>         }
> This finally causes the second sqlMap.OpenConnection() call to throw an 
> exception since the 
> [from IBatisNet.DataMapper.SqlMapper]
>         public ISqlMapSession OpenConnection() 
>         {
>                 if (_sessionStore.LocalSession != null) 
>                 {
>                         throw new DataMapperException("SqlMap could not 
> invoke OpenConnection(). A connection is already started. Call 
> CloseConnection first.");
>                 }
>                 ...
> A possible work-around is to manually call session.OpenConnection() inside 
> the using block.
> Possible fixes could obviously be:
> * to make sqlMap.OpenConnection always open the db connection (like in 
> earlier versions, and as the name says)
> * alter SqlMapSession.Dispose() to somehow cause a 
> SqlMapper._sessionStore.Dispose() even if the connection is closed

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


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ibatis.apache.org
For additional commands, e-mail: dev-h...@ibatis.apache.org

Reply via email to