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

Sohei Fukumura [E-MAIL ADDRESS DELETED]
2010年 5月 10日 (月) 17:59:48 JST


お世話になっております。
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 メーリングリストの案内