[seasar-dotnet:2487] Re: QuillでのDB接続について
志水正幸
[E-MAIL ADDRESS DELETED]
2016年 5月 10日 (火) 15:00:58 JST
志水です。
>このまま動作させると、ds_がnullとなったため、
>「Seasar.Tests.Quill.QuillContainerTest.TestRegistDataSource()」 を参
考に変更しました。
◆すいません、上記に関してはちょっとわかりません。
◆これって、どういう環境で実行していますか?
①Seasarとかのテスト用プロジェクトを使用しているんですかね?
②それとも、現行システムにQuillを付け足した環境で接続テストの実行をして
いるんですかね?
③それとも、新規プロジェクトを作って接続テストのみしているんですかね?
→ ①の場合、付属のテスト環境などは使用したことがないのでわからないです。
②の場合、実行するのは一旦やめた方がいいと思います。
上記①、②の場合
③のように新規プロジェクトで接続できる環境を作成して
簡単な画面から接続確認した方が、設定方法などが
わかるので理解するためや後の実験にも使用できるので良いように思い
ます。
現行環境にQuillを入れいるのではなく、
この新規環境に現行システムを移植する方法も検討してもよいのではな
いでしょうか?
>QuillContainerを使用するということは、「Ado.dicon」を使用しないと認識
しております。
>⇒Ado.diconのみでなく、diconファイル自体がなくなると思っています。
>現状、diconファイルが複数存在しています。
◆少なくとも私の環境ではdiconファイルに関して何も意識していませんし、触っ
たこともありません。
普通に一つのDBを使用する程度ならAppConfigに接続文字列と使用する
DB(ORACLE)の指定をするだけでいいと思いま す。
>①S2Containerからの移行を行う際に、すべての設定は、AppConfig内に集約さ
れるということでしょうか?
◆すべての設定が何かわからないですが、少なくともDB設定はAppConfig内で行え
ばいいとおもいます。
例えばlog4netはDLしたプロジェクトをソリューションにいれてコンパイルして
使用しています。
既存のxmlを使用していないので、AppConfigでなくassemblyInfoに設定しています。
→[assembly: log4net.Config.XmlConfigurator(ConfigFile =
"Log4netConfig.xml", Watch = true)]
私はDBFLUTE.NETを使っているため
トランザクションは、クラスの更新メソッド実行時に[Transaction]設定してい
るので
独自のトランザクション開始終了やコミットに関しての設定はわかりません。
>②Quillに移行する過程で下記のようにインターフェースに属性を付加しています。
> そもそもの認識が間違っているかもしれませんが、
> 属性の付加とDB接続は全く関係ないのでしょうか?
私はDBFLUTE.NETを使っているため複数DBの接続を切り替えたりしないのであれ
ばDB接続時はなにも意識していません。
※フォームに追加した羽マークのQuillコントロールがうまく制御してくれている
のかな?
実行時の接続で「Seasar.Quill.QuillConfig.cs」の
SetupDataSourceByQuillSection を通過すると思うんですがここでDSとれてない
んですかね?
以上
> 志水様
>
> 回答いただき、ありがとうございます。
>
> 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
> <mailto: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
>> <mailto:dbflute @ gmail.com>>:
>>
>> 久保(jflute) です
>>
>> 新谷さん、こんばんは
>>
>> > QuillでDB接続(Oracle)が上手くできないため、
>>
>> どううまくいかないのか具体的に示した方が、
>> ML閲覧者も回答しやすいかと思います。
>> 具体的なエラーの内容や、実際にやってみた設定内容など。
>> (業務上のセキュアな情報はマスクした上で)
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org <mailto:seasar-dotnet @ ml.seasar.org>
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>>
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org <mailto:seasar-dotnet @ ml.seasar.org>
>> https://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 <mailto:seasar-dotnet @ ml.seasar.org>
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
>
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
---
このEメールはアバスト アンチウイルスによりウイルススキャンされています。
https://www.avast.com/antivirus
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20160510/ba19c6d6/attachment.html>
seasar-dotnet メーリングリストの案内