[seasar-dotnet:968] Re: Quillのデータソース優先順序について質問

k.moriwaki [E-MAIL ADDRESS DELETED]
2008年 10月 16日 (木) 21:58:09 JST


久保さん

森脇です

> Serviceクラスは前回の話で「singleton」でOKということでしたが、
Quill + DBFlute の組み合わせの場合はServiceをsingletonにする
という事で決めたのですが、一応S2Conteiner.NET + DBFluteの
組み合わせは出来ないか調査を行っていたところです。
ちなみに試しているパターンは以下の3通りになります。
 ・Quill + DBFlute
 ・S2Conteiner.NET (+ Quill) + DBFlute
 ・S2Conteiner.NET + S2DAO.NET

> どうしてもステートを持つクラスの場合は、DIContainer管理でなく
> 自分で小さなAbstractFactoryを作ってやっていました。
下手にDIConteinerで管理するよりその方が良いかもしれませんね。
貴重なご意見ありがとうございます。

以上、よろしくお願いいたします。

2008/10/16 21:23 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
>
>> ・Serviceクラス等のインスタンスモードはなるべく自由に設定したい
>
> 参考までにお聞きしたいのですが、
> Serviceクラスは前回の話で「singleton」でOKということでしたが、
> その他のクラスで「prototype」じゃないといけないクラスを
> 作成する予定ということでしょうか?
>
> というのも、自分の経験ではありますが、
> JavaでもC#でも「prototype」を作る必要に迫られたことはなく、
> ほとんど「singleton」で問題ありませんでした。
> (リクエストのパラメータDTOを兼務するPageクラスとかは別ですが)
> どうしてもステートを持つクラスの場合は、DIContainer管理でなく
> 自分で小さなAbstractFactoryを作ってやっていました。
>
> 2008/10/16 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>> 小谷さん
>>
>> 森脇です。
>> 詳細な回答ありがとうございます。
>>
>>> DBFlute(.NET)とQuillとS2Containerを併用する構成は
>>> トリッキーであり、推奨はできないためです。
>> やはりそうですか…
>> こちらとしてもDIConteinerはどちらかに統一したいのですが
>> ・DBFluteを使いたい
>> ・Serviceクラス等のインスタンスモードはなるべく自由に設定したい
>> を両立できないかとPJ内で要望があり試してみた次第です。
>>
>>> ただし「理屈の上では」という前提が付きます。
>>> 実際に使って試してみていただく必要があります。
>> 本日軽く試してみてDBFluteで例外が発生したため、そもそも出来ない
>> 組み合わせなのか気になってメールで質問させていただきました。
>> 理論上は出来るとのことであれば、明日再度試してみたいと思います。
>>
>>
>> 以上、よろしくお願いいたします。
>>
>>
>> 2008/10/16 18:40 koyak <[E-MAIL ADDRESS DELETED]>:
>>> 森脇さん
>>>
>>> 小谷です。
>>>
>>>> ちなみに今回私が修正したやり方でQuillを使うにあたり問題ないでしょうか?
>>>
>>> ほぼ問題ありません。
>>> ただ、アセンブリ(assemblys)の設定は
>>> S2ContainerとQuillContainerのうち先に初期化
>>> (S2ContainerのInitとQuillInjectorのGetInstanceを呼ぶタイミング)
>>> される方に書いた方がいいかと思います。
>>>
>>> S2Containerの方が先に初期化される場合は
>>> Web.configのSeasarセクションの中にあるassemblysへの設定を
>>> お願い致します。
>>>
>>>>DataSorceの取得をS2Conteinerから取得するように変更した場合、
>>>>トランザクションが問題なく設定されるかが気になっています。
>>>
>>> ・トランザクションの設定(TransactionInterceptorなどの記述)は
>>>  全てS2Container(dicon)上で行う
>>> ・トランザクション境界は必ずS2Container管理(dicon)のコンポーネント上に設定する
>>>
>>> 場合は問題なく設定されます。
>>>
>>> ただし「理屈の上では」という前提が付きます。
>>> 実際に使って試してみていただく必要があります。
>>> DBFlute(.NET)とQuillとS2Containerを併用する構成は
>>> トリッキーであり、推奨はできないためです。
>>>
>>> ※複数データソースを切り替えて使う場合、もう少し複雑な話になるため
>>> その場合は別途お知らせ下さい。
>>>
>>>
>>> 以下は上記回答の根拠についての話のため、
>>> 読み飛ばしていただいても大丈夫です。
>>>
>>>
>>> dicon上に(のみ)記述されたデータソースのインスタンスは
>>> 以下の流れで使用されます。
>>>
>>> 1.S2Container上でインスタンス生成
>>> 2.Quillの共通データソースに1のインスタンスが設定される
>>> 3.DBFluteは2.の共通データソースを使いDBに接続する
>>>
>>> 上で書いたように
>>> ・トランザクションの設定(TransactionInterceptorなどの記述)は
>>>  全てS2Container(dicon)上で行う
>>> ・トランザクション境界は必ずS2Container管理(dicon)のコンポーネント上に設定する
>>>
>>> という設定をしていただいた場合、
>>> トランザクション管理で使用されるコンポーネントも
>>> 1.で生成されたものと同じデータソースのインスタンスを使って
>>> トランザクション管理を行います。
>>>
>>> トランザクション管理とDBアクセスとで同じデータソースの
>>> インスタンスが使用されるため、正常に動作するはずです。
>>>
>>> -----------------------------------------------------------------
>>> koyak
>>> [E-MAIL ADDRESS DELETED]
>>> -----------------------------------------------------------------
>>>
>>> 2008/10/16 17:24 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>> 森脇です。
>>>> 少し言葉足らずでした。
>>>>
>>>> DataSorceの取得をS2Conteinerから取得するように変更した場合、
>>>> トランザクションが問題なく設定されるかが気になっています。
>>>>
>>>> 先日質問しましたが、現在Quill+DBFluteの組み合わせの検証をしており、
>>>> QuillではDBFluteのクラスのみを管理し、データソースやトランザクション
>>>> その他のクラスはS2Conteinerで管理することはできないか試していたところです。
>>>>
>>>>
>>>> # JavaのS2、DBFluteの開発経験者が多いためなるべく
>>>> # Javaと同じような環境にしたいためです。
>>>>
>>>> 2008/10/16 16:44 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>> 小谷さん
>>>>>
>>>>> 森脇です。回答ありがとうございます。
>>>>>
>>>>>> 説明文の記述不足でした。
>>>>>> 申し訳ありません。
>>>>>> 近いうちにドキュメントを修正したいと思います。
>>>>> 了解しました、よろしくお願いいたします。
>>>>>
>>>>> ちなみに今回私が修正したやり方でQuillを使うにあたり問題ないでしょうか?
>>>>>
>>>>>
>>>>> 2008/10/16 16:18 koyak <[E-MAIL ADDRESS DELETED]>:
>>>>>> 森脇さん
>>>>>>
>>>>>> 小谷です。
>>>>>>
>>>>>>> web.configのconnectionStringsを以下の用に変更する事により取得出来るようになりましたが
>>>>>>> これは仕様でしょうか?
>>>>>>
>>>>>> .NETの仕様が関係している可能性があります。
>>>>>> http://msdn.microsoft.com/ja-jp/library/ms178685(VS.80).aspx
>>>>>>
>>>>>> 関係すると思われる個所を抜粋します。
>>>>>> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>>>> すべての .NET Framework アプリケーションは、
>>>>>> systemroot\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config ファイルから
>>>>>> 基本構成設定と既定の設定を継承します。Machine.config ファイルは、サーバー全体の構成設定のために使用されます。
>>>>>> これらの設定の一部は、階層内の下位の構成ファイルでオーバーライドできません。
>>>>>>
>>>>>> .NET クライアント アプリケーション (コンソール アプリケーションおよび Windows アプリケーション) は、
>>>>>> ApplicationName.config という構成ファイルを使用して、継承した設定をオーバーライドします。
>>>>>> ASP.NET アプリケーションは、Web.config という構成ファイルを使用して、継承した設定をオーバーライドします。
>>>>>> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>>>>
>>>>>> こちらの記述から、App.config,Web.configにconnectionStringセクションががなかったため
>>>>>> machine.configの設定が使われてしまったものと思われます。
>>>>>>
>>>>>> 説明文の記述不足でした。
>>>>>> 申し訳ありません。
>>>>>> 近いうちにドキュメントを修正したいと思います。
>>>>>>
>>>>>>
>>>>>> 2008/10/16 15:48 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>> 森脇と申します。
>>>>>>>
>>>>>>> Quillの機能について現在調査中なのですが、表題の件について確認したい事があります。
>>>>>>>
>>>>>>> 後述しますQuillのデータソースの設定について書かれているページにて
>>>>>>> 保持されるデータソースの優先順序について書かれていますが、
>>>>>>> その優先順位通りにデータソースが設定されませんでした。
>>>>>>>
>>>>>>> 参考としたページ
>>>>>>> diconファイルを書かずにSeasarの機能を利用する - データソースの設定
>>>>>>> http://s2container.net.seasar.org/ja/quill.html#nodicon_config
>>>>>>>
>>>>>>> 優先順位は以下のようになっており
>>>>>>> 1.App.config内quillセクションのdataSources、dataSourceの設定
>>>>>>> 2.App.config内ConnectionStringsセクションの設定
>>>>>>> 3.XXX.dicon内に記述された設定
>>>>>>> 3.のdiconから取得を試そうとしたのですが、
>>>>>>> %SystemRoot%/Microsoft.NET/Framework/V2.0.*/config/machine.config の
>>>>>>> 設定が優先されうまく取得できませんでした。
>>>>>>> web.configのconnectionStringsを以下の用に変更する事により取得出来るようになりましたが
>>>>>>> これは仕様でしょうか?
>>>>>>>
>>>>>>> ----- web.config -----
>>>>>>> <configuration>
>>>>>>>  <!-- 略 -->
>>>>>>>
>>>>>>>  <!-- Seasar.Quill -->
>>>>>>>  <quill>
>>>>>>>    <assemblys>
>>>>>>>      <assembly>System.Data.OracleClient, version=1.0.5000.0,
>>>>>>> Culture=neutral, PublicKeyToken=b77a5c561934e089</assembly>
>>>>>>>    </assemblys>
>>>>>>>  </quill>
>>>>>>>
>>>>>>>  <!-- Seasar -->
>>>>>>>  <seasar>
>>>>>>>    <assemblys>
>>>>>>>      <configPath>App.dicon</configPath>
>>>>>>>    </assemblys>
>>>>>>>  </seasar>
>>>>>>>
>>>>>>>  <appSettings/>
>>>>>>>
>>>>>>>  <connectionStrings>
>>>>>>>    <remove name ="LocalSqlServer"/>
>>>>>>>  </connectionStrings>
>>>>>>>
>>>>>>>  <!-- 略 -->
>>>>>>> </configuration>
>>>>>>> _______________________________________________
>>>>>>> seasar-dotnet mailing list
>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>>
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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