[seasar-dotnet:2486] Re: QuillでのDB接続について

新谷将亮 [E-MAIL ADDRESS DELETED]
2016年 5月 10日 (火) 13:35:43 JST


志水様

回答いただき、ありがとうございます。

AppConfigの設定は、ある程度、理解できました。

そこで、根本的な質問になってしまうのですが、ご回答いただけると大変助かります。

現状、S2Containerを使用している箇所が、下記のように設定しています。

【Ado.dicon】

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components namespace="Ado">

  <!-- データプロバイダ -->
  <component name="Oracle" class="Seasar.Extension.ADO.DataProvider">
    <property
name="ConnectionType">"Oracle.DataAccess.Client.OracleConnection"</property>
    <property
name="CommandType">"Oracle.DataAccess.Client.OracleCommand"</property>
    <property
name="ParameterType">"Oracle.DataAccess.Client.OracleParameter"</property>
    <property
name="DataAdapterType">"Oracle.DataAccess.Client.OracleDataAdapter"</property>
  </component>

  <!-- データソース -->
  <component name="setConStrinterceptor"
class="****(名前空間).SetConnectionStringInterceptor">
    <property name="DataSource">DataSource</property>
  </component>
  <component name="DataSource"
class="Seasar.Extension.Tx.Impl.TxDataSource">
    <property name="DataProvider">Oracle</property>
    <!-- ConnectionStringはServer.configで設定-->
    <aspect>setConStrinterceptor</aspect>
  </component>

  <!-- ローカルトランザクション用のインターセプターで使用します。 -->
  <component class="Seasar.Extension.Tx.Impl.TransactionContext" />


  <!--
  <component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
  <component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
  -->

</components>

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【SetConnectionStringInterceptor 】

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  /// <summary>
  /// DataSourceにConnectionStringをセットするインターセプター
  /// </summary>
  public class SetConnectionStringInterceptor : AbstractInterceptor
  {
    private Seasar.Extension.Tx.Impl.TxDataSource ds_;
    //private int intPort;

    /// <summary>
    /// 対象のデータセット
    /// </summary>
    public Seasar.Extension.Tx.Impl.TxDataSource DataSource
    {
      set { ds_ = value; }
      get { return ds_; }
    }

    /// <summary>
    /// 処理
    /// </summary>
    /// <param name="invocation"></param>
    /// <returns></returns>
    public override object Invoke(IMethodInvocation invocation)
    {
      if (ds_.ConnectionString == null || ds_.ConnectionString ==
string.Empty)
      {
        ds_.ConnectionString = GetConnectionString(); ← 接続文字列取得
      }

      object result = invocation.Proceed();

      return result;
    }

  }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

このまま動作させると、ds_がnullとなったため、
「Seasar.Tests.Quill.QuillContainerTest.TestRegistDataSource()」を参考に変更しました。


QuillContainerを使用するということは、「Ado.dicon」を使用しないと認識しております。
⇒Ado.diconのみでなく、diconファイル自体がなくなると思っています。

現状、diconファイルが複数存在しています。

①S2Containerからの移行を行う際に、すべての設定は、AppConfig内に集約されるということでしょうか?

②Quillに移行する過程で下記のようにインターフェースに属性を付加しています。
そもそもの認識が間違っているかもしれませんが、
属性の付加とDB接続は全く関係ないのでしょうか?

  [Implementation]
  [Aspect(typeof(SetConnectionStringInterceptor))] ←
SetConnectionStringInterceptorを付加
 ※S2Container使用時は、付加していない
  public interface IBhvService
  {
(中略)・・・SQL発行
  }

デバッグを行うと、IBhvServiceの中のメソッドが呼ばれた後に、SetConnectionStringInterceptorのInvoke()の
処理が行われる。
⇒Invoke()内でエラー
現状:ds_のNullエラー
修正後: Assert.GreaterThanOrEqualTo<int>(ds.DataSourceCollection.Count, 7);でエラー

長文になってしまい、申し訳ございませんが、
知識不足もあり、根本的な理解ができておらず、
試行錯誤している状態ですが、宜しくお願い致します。

2016年5月10日 10:35 志水正幸 <ie2m-smz @ asahi-net.or.jp>:

> 初めまして
> 志水と申します。
>
> エラー内容に関してはわからないので、質問の回答にはならないのですが
> 私の動作環境はNETFrameworkの4.6.1を使用してるので
> 環境的には類似していると思い返信させてもらいました。
>
> DBはSQLServerです。
> 参考になるかわかりませんが、私のAppConfigの設定内容です。
> ※以前に竹内さんから頂いたメーリングリスト「[seasar-dotnet:2353] Re: QuillでのSQLServerの接続について」を参考に
> 実際の接続文字列の内容は、Properties設定をプログラム内で再設定しています。
> メーリングリスト[seasar-dotnet:2353]
> の内容はブラウザで「[seasar-dotnet:2353]」を検索すれば確認できると思います。
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <configuration>
>   <configSections>
>     <section name="quill" type="Seasar.Quill.Xml.QuillSectionHandler,
> Seasar.Quill" />
>     <sectionGroup name="userSettings"
> type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0,
> Culture=neutral, PublicKeyToken=b77a5c561934e089" >
>       <section name="ProjectWin.Properties.Settings"
> type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0,
> Culture=neutral, PublicKeyToken=b77a5c561934e089"
> allowExeDefinition="MachineToLocalUser" requirePermission="false" />
>     </sectionGroup>
>   </configSections>
>
>   <startup>
>         <supportedRuntime version="v4.0"
> sku=".NETFramework,Version=v4.6.1"/>
>   </startup>
>
>
>   <quill>
>     <dataSources>
>
>       <dataSource name="Project_45">
>         <provider>SqlServer</provider>
>
> <connectionString>ProjectWin.Helpers.ConnectionStringHelper</connectionString>
>         <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
>       </dataSource>
>
>     </dataSources>
>     <assemblys>
>       <!-- for .NET4.0 -->
>       <!--<assembly>MySql.Data, version=6.3.5.0, Culture=neutral,
> PublicKeyToken=c5687fc88969c44d</assembly>-->
>       <!-- for .NET2.0 -->
>       <!--<assembly>MySql.Data, version=1.0.10.1, Culture=neutral,
> PublicKeyToken=c5687fc88969c44d</assembly>-->
>     </assemblys>
>   </quill>
>
>
>   <userSettings>
>     <ProjectWin.Properties.Settings>
>       <setting name="DatabaseDataSource" serializeAs="String">
>         <value>WIN2008-SQLSV\MSSQL2014SERVER</value>
>       </setting>
>       <setting name="DatabasePort" serializeAs="String">
>         <value>1433</value>
>       </setting>
>       <setting name="DatabasePassword" serializeAs="String">
>         <value>ug7ku02IjB4DsAOWfJXeDQ==</value>
>       </setting>
>       <setting name="DatabaseInitialCatalog" serializeAs="String">
>         <value>Project</value>
>       </setting>
>       <setting name="DatabaseUserID" serializeAs="String">
>         <value>Projectdb</value>
>       </setting>
>       <setting name="Keycd" serializeAs="String">
>         <value>1</value>
>       </setting>
>     </ProjectWin.Properties.Settings>
>   </userSettings>
> </configuration>
>
>
> 以上
>
>
> 新谷です。
>
> 久保様、大変申し訳ございません。
> 各設定を記載させていただきます。
>
> 【AppConfig】
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
> <?xml version="1.0"?>
> <configuration>
>
>   <configSections>
>     <section name="log4net"
> type="System.Configuration.IgnoreSectionHandler"/>
>     <section name="seasar" type="Seasar.Framework.Xml.S2SectionHandler,
> Seasar"/>
>       <section name="quill"
>         type="Seasar.Quill.Xml.QuillSectionHandler, Seasar.Quill" />
>   </configSections>
>
> (中略)
>
>   <quill>
>     <dataSources>
>       <dataSource name="ds">
>         <provider>Oracle</provider>
>         <connectionString>"接続文字列"</connectionString>
>         <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
>       </dataSource>
>     </dataSources>
>     <assemblys>
>       <assembly>Seasar.Dao</assembly>
>       <!-- Oracle Data Provider for .NET を使用する場合に必要です。 -->
>       <assembly>
>         Oracle.DataAccess, version=2.111.7.0, Culture=neutral,
>         PublicKeyToken=89b483f429c47342
>       </assembly>
>     </assemblys>
>   </quill>
>
> <startup><supportedRuntime version="v4.0"
> sku=".NETFramework,Version=v4.6"/></startup></configuration>
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>
> 接続文字列の箇所を別のConfigファイルから変更したいと考えています。
>
> また、エラー内容につきましては、
>
> インターフェース
>
>   [Implementation]
>   [Aspect(typeof(SetConnectionStringInterceptor))]
>   public interface IBhvService
>   {
> (中略)
>   }
>
>   public override object Invoke(IMethodInvocation invocation)
>     {
>       QuillContainer container = new QuillContainer();
>
>       QuillComponent qc =
> container.GetComponent(typeof(SelectableDataSourceProxyWithDictionary));
>
>       Dictionary<int, string> dict = new Dictionary<int, string>();
>
>       Assert.AreEqual(typeof(SelectableDataSourceProxyWithDictionary),
> qc.ComponentType, "1");
>       SelectableDataSourceProxyWithDictionary ds =
> (SelectableDataSourceProxyWithDictionary)qc.GetComponentObject(
>           typeof(SelectableDataSourceProxyWithDictionary));
>       Assert.IsNotNull(ds, "2");
>       Assert.GreaterThanOrEqualTo<int>(ds.DataSourceCollection.Count, 7);
>
>
>       foreach (string key in ds.DataSourceCollection.Keys)
>       {
>         IDataSource part = ds.DataSourceCollection[key];
>         if (part is TxDataSource)
>         {
>           //  全てのTxDataSource系のデータソースに
>           //  TransactionContextが設定されているか確認
>           Assert.IsNotNull(((TxDataSource)part).Context,
>               "全てのTxDataSource系のデータソースにTransactionContextが設定されていない");
>         }
>       }
>
>       object result = invocation.Proceed();
>
>       return result;
>
>     }
>
> 上記実行で、「Expected left to be greater or equal than right.」とエラーが発生します。
>
> 参考は 「Seasar.Tests.Quill.QuillContainerTest.TestRegistDataSource()」 です。
>
> 正直な話、参考にしている箇所も理解できていない状態で参考元が正しいのか?
> また、正しかった場合、どこの箇所を変更する必要があるのか?
> がわかっていない状況です。
>
> 大変、大雑把な質問で申し訳ございませんが、
> ご回答いただけると大変助かります。
>
> 以上、宜しくお願い致します。
>
>
> 2016年5月9日 20:36 kubo < <dbflute @ gmail.com>dbflute @ gmail.com>:
>
>> 久保(jflute) です
>>
>> 新谷さん、こんばんは
>>
>> > QuillでDB接続(Oracle)が上手くできないため、
>>
>> どううまくいかないのか具体的に示した方が、
>> ML閲覧者も回答しやすいかと思います。
>> 具体的なエラーの内容や、実際にやってみた設定内容など。
>> (業務上のセキュアな情報はマスクした上で)
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>
>
>
> _______________________________________________
> seasar-dotnet mailing listseasar-dotnet @ ml.seasar.orghttps://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> ウイルス
> フリー。 www.avast.com
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20160510/5d6b190d/attachment.html>


seasar-dotnet メーリングリストの案内