[seasar-dotnet:1674] Re: 2Container.NET、S2Dao.NET(Windows7)調査状況

kubo [E-MAIL ADDRESS DELETED]
2010年 5月 10日 (月) 19:22:45 JST


久保(jflute)です。

> そうすると、次は何故LogicだとNGになるのか。
> が観点になってくるので、
> その辺りを中心に調査を継続したいと思います。

Daoは、実装クラスが存在せず、インターフェースに
直接AOPを付与して、Interceptorにそのまま処理を
任せているため、AOPの利用の仕方としては、
非常に特殊なものではあります。
そういう意味では、Logicのようなオーソドックスな
利用方法の場合に発生する現象と言えるかもしれませんね。

もし、余裕があれば、Quillを使った場合の
ほぼ同じ構造(Logic + Dao)でエラーが発生するか
どうか試してみると良いと思います。
DaoのAOPが関係ないとなると、もう一度この点を
疑って、しっかり状況を明確にするのもいいのかなと。
もし、同じエラーが発生すればQuillでも共通の話と
なるので、他の人も検証しやすくなるかなと。
やはり、Quillでは発生しないと確定したらしたで、
その違いを探ることで原因が掴みやすくなります。

2010/5/10 Sohei Fukumura <[E-MAIL ADDRESS DELETED]>:
> お世話になっております。
> Sfukuです。
> 久保(jflute)様、返信ありがとうございます。
>
>> A. traceInterceptor だけを適用の実験
> Logicクラスのエンハンスが失敗する。
>
>> B. requiredTx だけを適用の実験
> Logicクラスのエンハンスが失敗する。
>
>>Win7 + DynamicProxyで、AOP利用の可否が、
>>「DaoだとOKだが、LogicだとNG」
>>という状況がとりあえず判明したって感じですね。
> ありがとうございます。
> そうすると、次は何故LogicだとNGになるのか。
> が観点になってくるので、
> その辺りを中心に調査を継続したいと思います。
> Logic及びDaoのクラス・インタフェースの定義は下記のようになります。
> << Logic のクラス>>
>  public class KojinLogicImpl : IKojinLogic
>  {
>        private IKojinDao _kojinDao;
> //<< Daoのインターフェース>>をprivateで宣言している
>        public IKojinDao KojinDao
>        {
>            get { return _kojinDao; }
>            set { _kojinDao = value; }
> //XP,VistaではSingletonS2ContainerFactory.Init(); 時に
> //set { _kojinDao = value; }が実行されるが
> //Win7では実行されない
> //※ここを見て『Daoの生成がうまくいかない』と考えておりました※
>        }
>> }
>
> << Logic のインタフェース>>
> public interface IKojinLogic
> {
>        KojinDS FindSearch(Kojin dto);
> }
>
> << Daoのクラス>>
> [Table("T_KOJIN")]
> public class Kojin
> {
>        private System.String _HOSPID;
>
>        public System.String HOSPID
>        {
>            get { return _HOSPID; }
>            set { _HOSPID = value; }
>        }
> }
>
> << Daoのインターフェース>>
>  [Bean(typeof(Kojin))]
> public interface IKojinDao
> {
>        IList<Kojin> FindSearch(Kojin dto);
> }
>
>
> 以上、よろしくお願い致します。
> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of kubo
> Sent: Monday, May 10, 2010 5:24 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [seasar-dotnet:1668] Re:2Container.NET、S2Dao.NET(Windows7)調査状況
>
> 久保(jflute)です。
>
>> はい。Win7 で DynamicProxy を利用した環境でも、
>> 検索してデータを実際に取得できました。
>
> なるほど、すると、Daoインターフェースのエンハンス自体は
> うまくいっていて、Logicクラスのエンハンスがうまく
> いっていないってことになりますね。
> (もともとDaoの生成がうまくいかないって話になっていた
> と思いますが、Logicの生成がうまくいかないって話になるのかと)
>
> 試しに、Logicクラスに、
> A. traceInterceptor だけを適用
> B. requiredTx だけを適用
> して、もう一度試してみて下さい。
> これで、Interceptorの違いが影響するのか
> どうか(の可能性)が確認できます。
>
>> Win7 で DynamicProxy を利用できていないが、
>> IKojinDaoを経由してDBアクセスを実行することができた。
>> ということになるのでしょうか。
> IKojinDaoでは、DynamicProxyを使っているので、
> 微妙にこの表現は違います。
> ("Win7 で DynamicProxy を利用できていないが" の部分)
>
> Logic -- DynamicProxyを使ってない (AOPを外した)
> Dao -- DynamicProxyを使っている (そもそもAOPが必須)
>
> Win7 + DynamicProxyで、AOP利用の可否が、
> 「DaoだとOKだが、LogicだとNG」
> という状況がとりあえず判明したって感じですね。
>
> 2010/5/10 Sohei Fukumura <[E-MAIL ADDRESS DELETED]>:
>> お世話になっております。
>> Sfukuです。
>> 久保(jflute)様、返信ありがとうございます。
>>
>>>KojinLogicImplからaspect属性を全て排除したら、
>>>Win7 で DynamicProxy を利用した環境でも、
>>> (IKojinDaoを経由して)DBアクセスを実行することが
>>>できた(例えば、検索してデータを実際に取得できた)、
>>>ということでしょうか?
>> はい。Win7 で DynamicProxy を利用した環境でも、
>> 検索してデータを実際に取得できました。
>>
>>>KojinLogicからaspect属性を全て排除したということは、
>>>KojinLogic には AOP が掛からない、とということです。
>>>なので、"DynamicProxyではない" というか、
>>>"そもそもこのクラスに対して Proxy を適用しない"
>>>という解釈
>> という事ですので、
>> Win7 で DynamicProxy を利用できていないが、
>> IKojinDaoを経由してDBアクセスを実行することができた。
>> ということになるのでしょうか。
>>
>>
>> 以上、よろしくお願い致します。
>>
>> -----Original Message-----
>> From: [E-MAIL ADDRESS DELETED]
>> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of kubo
>> Sent: Monday, May 10, 2010 4:30 PM
>> To: [E-MAIL ADDRESS DELETED]
>> Subject: [seasar-dotnet:1665] Re:2Container.NET、S2Dao.NET(Windows7)調査状況
>>
>> 久保(jflute)です。
>>
>> Sfukuさん、こんにちは
>>
>>> 1『traceInterceptor』や『RequiredTx』の使い方が悪いため、
>>> 『traceInterceptor』や『RequiredTx』をaspectするとエラーが発生するのでしょ
>>> うか。
>>>
>>> 2『traceInterceptor』はトレースを出力のため問題ない気がしますが、
>>> 『RequiredTx』はTransactionを織り込んでいるため、
>>> 『RequiredTx』をaspectしない場合、機能によっては問題が発生する可能性があ
>>> る。
>> ※丸付き数字を普通の数字に変えました。
>>
>> <1>
>> Win7限定でエラーが出る原因がそもそも
>> わかってないので、こういう質問をされても
>> やっぱり、わからない、としか言いようがありません。
>> ただ、Win7でなければちゃんと動いているので(そうなんですよね?)、
>> 少なくとも使い方が悪いからっていうのは想像しにくいですね。
>>
>> <2>
>> "機能によっては問題が発生する可能性がある"  かどうかは、
>> アプリでの要件次第かと。ただ、通常はトランザクションなし
>> でDBアクセスするというのは業務的に問題があることが
>> 多いとは思われます。
>>
>>> そもそも<aspect>を全て排除したということは
>>> Dynamicproxsyではないということでしょうか。
>> KojinLogicからaspect属性を全て排除したということは、
>> KojinLogic には AOP が掛からない、とということです。
>> なので、"DynamicProxyではない" というか、
>> "そもそもこのクラスに対して Proxy を適用しない"
>> という解釈になります。
>>
>>> 次の記載に修正すると、DynamicProxsyでも動作する。
>>>  <component class="Info.Logic.Impl.KojinLogicImpl" >
>>>  </component>
>>> ・・・
>> ここちょっと大事ですね。
>> 状況を詳しく確認させて下さい。
>>
>> KojinLogicImplからaspect属性を全て排除したら、
>> Win7 で DynamicProxy を利用した環境でも、
>> (IKojinDaoを経由して)DBアクセスを実行することが
>> できた(例えば、検索してデータを実際に取得できた)、
>> ということでしょうか?
>> _______________________________________________
>> 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 メーリングリストの案内