[ 
http://issues.apache.org/jira/browse/IBATISNET-35?page=comments#action_63062 ]
     
Ron Grabowski commented on IBATISNET-35:
----------------------------------------

An alternative to having individual log statements whenever a IDbConnection is 
opened or closed:

 http://issues.apache.org/jira/browse/IBATISNET-34

might be to wrap the IDbConnection, IDbCommand, etc. objects in a proxy when 
they get instanciated from IBatisNet.Common.Provider's GetCommand() and 
GetConnection() methods. Something along the lines of:

// existing code
public IDbConnection GetConnection()
{
 return (IDbConnection) ((ICloneable)_templateConnection).Clone();
}

// better way ???
public IDbConnection GetConnection()
{
 IDbConnection connection = (IDbConnection) 
((ICloneable)_templateConnection).Clone();

 // LogManager.GetLogger("System.Data.IDbConnection") ???
 if (_connectionLogger.IsDebugEnabled)
 {
 connection = (IDbConnection)IDbConnectionLogProxy.NewInstance(connection);
 }

 return connection;
}

I tried writting code using the classes in the Castle.DynamicProxy.dll and from 
IBatisNet's own DynamicProxy class but I keep running into this exception when 
setting the proxified IDbCommand object's Connection property with a proxified 
IDbConnection (does that make sense?):

 [InvalidCastException: Specified cast is not valid.]
   
System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.set_Connection(IDbConnection
 value) +12

Perhaps once a decision is made on this issue:

 http://issues.apache.org/jira/browse/IBATISNET-39

The Castle people might be able to shed some light on exception?

I attached a very basic proof-of-concept class that will raise the exception. I 
didn't write any test cases becuase the SystemDataProxy.cs class really isn't 
functioning at all...

If the logging proxy every gets worked out, I'd personally like it to be in 
IBatisNet.Common.dll so I can include IDbCommand logging in projects that use 
straight ADO.Net.

Gilles, do you think this is the right direction or did you have something else 
in mind?

> Improve logging of text sent to database and recieved from database to match 
> Java version of IBatis
> ---------------------------------------------------------------------------------------------------
>
>          Key: IBATISNET-35
>          URL: http://issues.apache.org/jira/browse/IBATISNET-35
>      Project: iBatis for .NET
>         Type: Improvement
>     Versions: DataAccess 1.5, DataMapper 1.1
>  Environment: Data Mapper - [assembly: AssemblyVersion("1.1.458")]
> Data Access - [assembly: AssemblyVersion("1.5.458")]
>     Reporter: Ron Grabowski
>  Attachments: SystemDataProxy.zip
>
> Here are some example logs from the Java version of IBatis. The examples show 
> INSERT, SELECT, UPDATE, and DELETE statements:
> DEBUG - Checked out connection 30332961 from pool.
> DEBUG - {conn-100003} Connection
> DEBUG - {pstm-100004} PreparedStatement: INSERT INFO UserAudit (UserId, 
> AuditEvent, DateOccurred) values (?,?,?)          
> DEBUG - {pstm-100004} Parameters: [4, audit.login.success, 2004-08-25 
> 09:15:22.809]
> DEBUG - {pstm-100004} Types: [java.lang.Integer, java.lang.String, 
> java.sql.Timestamp]
> DEBUG - {pstm-100005} PreparedStatement: SELECT LAST_INSERT_ID() AS id  
> DEBUG - {pstm-100005} Parameters: []
> DEBUG - {pstm-100005} Types: []
> DEBUG - {rset-100006} ResultSet
> DEBUG - {rset-100006} Header: [id]
> DEBUG - {rset-100006} Result: [422]
> DEBUG - Returned connection 30332961 to pool.
> DEBUG - Checked out connection 30332961 from pool.
> DEBUG - {conn-100007} Connection
> DEBUG - {pstm-100008} PreparedStatement: SELECT UserId, Login, Password FROM 
> User WHERE Login = ? and Password = ?
> DEBUG - {pstm-100008} Parameters: [abc123, def456]
> DEBUG - {pstm-100008} Types: [java.lang.String, java.lang.String]
> DEBUG - {rset-100009} ResultSet
> DEBUG - {rset-100009} Header: [UserId, Login, Password]
> DEBUG - {rset-100009} Result: [4, abc1234, def456]
> DEBUG - Returned connection 30332961 to pool.
> DEBUG - Checked out connection 4548856 from pool.
> DEBUG - {conn-100045} Connection
> DEBUG - {pstm-100046} PreparedStatement: SELECT UserId, Login FROM User
> DEBUG - {pstm-100046} Parameters: []
> DEBUG - {pstm-100046} Types: []
> DEBUG - {rset-100047} ResultSet
> DEBUG - {rset-100047} Header: [UserId, Login]
> DEBUG - {rset-100047} Result: [1, abc123]
> DEBUG - {rset-100047} Result: [4, def456]
> DEBUG - {rset-100047} Result: [6, aaaaa]
> DEBUG - Returned connection 4548856 to pool.
> DEBUG - Checked out connection 7125805 from pool.
> DEBUG - {conn-100043} Connection
> DEBUG - {pstm-100044} PreparedStatement: UPDATE User SET Login = ? WHERE 
> UserId = ?
> DEBUG - {pstm-100044} Parameters: [aaaaa, 4]
> DEBUG - {pstm-100044} Types: [java.lang.String, java.lang.Integer]
> DEBUG - Returned connection 7125805 to pool.
> DEBUG - Checked out connection 27062282 from pool.
> DEBUG - {conn-100043} Connection
> DEBUG - {pstm-100044} PreparedStatement: DELETE FROM User WHERE UserId = ?
> DEBUG - {pstm-100044} Parameters: [4]
> DEBUG - {pstm-100044} Types: [java.lang.Integer]
> DEBUG - Returned connection 27062282 to pool.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to