[seasar-dotnet:477] Re: S2DAO.NET1.0.2でのCommandTimeoutのコントロール方法
koyak
[E-MAIL ADDRESS DELETED]
2007年 3月 7日 (水) 03:25:34 JST
中川様
小谷と申します。
タイムアウトの設定についてですが、
どこかで何らかのクラスの拡張が必要になるかと思います。
〜HandlerはSeasar管理ではないため、インジェクション等で
タイムアウトは設定できません。
〜Handlerを使用している〜AutoStaticCommand,〜DynamicCommandも
Seasar管理ではないため、継承してTimeOutプロパティを追加して
使うことはできません。
私が現在所属しているプロジェクトでは
(DBFluteでは、と言った方がいいかもしれませんが)
Seasar.Dao.Impl.DaoMetaDataImplを継承してその中で
タイムアウト時間をIDBCommandに対して設定しています。
同じくS2DaoInterceptorを継承したクラスの中に
IDaoMetaDataFactoryを持たせ、
IDaoMetaDataFactoryを実装したクラスで拡張したDaoMetaDataを
作成して使用しています。
中川様が挙げられたやり方に近い形で実装する場合、
IDataSouceを実装した以下のようなクラスを作成し、
<component name="DataSource" class="hoge.hogeImpl.DataSourceExtension">
<property name="DataProvider">SqlClient</property>
<property name="ConnectionString">hoge</property>
<property name="CommandTimeOut">180</property>
</component>
とすれば、タイムアウト時間を設定できないでしょうか。
(実際に試したわけではないのでこのままだとうまく
いかない可能性もあります。。。)
public class DataSourceExtension : IDataSource
{
private DataSourceImpl _dataSouce;
private int _commandTimeOut;
public DataSourceExtension()
{
_dataSouce = new DataSourceImpl();
}
public DataSourceExtension(DataProvider provider, string
connectionString)
{
_dataSouce = new DataSourceImpl(provider, connectionString);
}
public int CommandTimeOut
{
set { _commandTimeOut = value; }
get { return _commandTimeOut; }
}
public DataProvider DataProvider
{
set { _dataSouce.DataProvider = value; }
get { return _dataSouce.DataProvider; }
}
public string ConnectionString
{
set { _dataSouce.ConnectionString = value; }
get { return _dataSouce.ConnectionString; }
}
#region IDataSource メンバ
public System.Data.IDbConnection GetConnection()
{
return _dataSouce.GetConnection();
}
public System.Data.IDbCommand GetCommand()
{
IDbCommand cmd = _dataSouce.GetCommand();
cmd.CommandTimeout = this.CommandTimeout;
return cmd;
}
public System.Data.IDbCommand GetCommand(string cmdText)
{
IDbCommand cmd = _dataSouce.GetCommand(cmdText);
cmd.CommandTimeout = this.CommandTimeout;
return cmd;
}
public System.Data.IDbCommand GetCommand(string cmdText,
System.Data.IDbConnection connection)
{
IDbCommand cmd = _dataSouce.GetCommand(cmdText, connection);
cmd.CommandTimeout = this.CommandTimeout;
return cmd;
}
public System.Data.IDbCommand GetCommand(string cmdText,
System.Data.IDbConnection connection,
System.Data.IDbTransaction transaction)
{
IDbCommand cmd = _dataSouce.GetCommand(cmdText, connection,
transaction);
cmd.CommandTimeout = this.CommandTimeout;
return cmd;
}
public System.Data.IDataParameter GetParameter()
{
return _dataSouce.GetParameter();
}
public System.Data.IDataParameter GetParameter(string name,
System.Data.DbType dataType)
{
return _dataSouce.GetParameter(name, dataType);
}
public System.Data.IDataParameter GetParameter(string name,
object value)
{
return _dataSouce.GetParameter(name, value);
}
public System.Data.IDataParameter GetParameter(string name,
System.Data.DbType dataType, int size)
{
return _dataSouce.GetParameter(name, dataType, size);
}
public System.Data.IDataParameter GetParameter(string name,
System.Data.DbType dataType, int size, string srcColumn)
{
return _dataSouce.GetParameter(name, dataType, size, srcColumn);
}
public IDataAdapter GetDataAdapter()
{
return _dataSouce.GetDataAdapter();
}
public IDataAdapter GetDataAdapter(IDbCommand selectCommand)
{
return _dataSouce.GetDataAdapter(selectCommand);
}
public IDataAdapter GetDataAdapter(string selectCommandText,
string selectConnectionString)
{
return _dataSouce.GetDataAdapter(selectCommandText,
selectConnectionString);
}
public IDataAdapter GetDataAdapter(string selectCommandText,
IDbConnection selectConnection)
{
return _dataSouce.GetDataAdapter(selectCommandText,
selectConnection);
}
public virtual IDbTransaction GetTransaction()
{
return _dataSouce.GetTransaction();
}
#endregion
}
seasar-dotnet メーリングリストの案内