[seasar-dotnet:1024] Re: DBFlute &S2Dxoによるデータ詰め替えについて

Nakai [E-MAIL ADDRESS DELETED]
2008年 10月 20日 (月) 19:16:40 JST


久保さん

お世話になります。中井です。

当面は改造で対応し、(手動で詰替えは大変なので。。。)
公式に対応していただけるなら後で差し替えようと思います。

お忙しい中ありがとうございました。



kubo <[E-MAIL ADDRESS DELETED]> wrote:

> 久保(jflute)です。
> 
> 中川さん、フォローありがとうございます!
> 事象がより具体化され、状況が把握できてきました。
> 
> http://s2container.seasar.org/2.4/ja/s2dxo.html#nestedProperty
> を見ると、Java版は1階層までのようですね。
> 無限階層はC#版特有のもののようです。
> > コミッタの方々、これ直しませんか?
> 
> 
> 中井さん、とりあえずはこのような状況で、
> ・コメントアウトや階層制限など改造方式で回避するか
> ・S2Dxo自体の利用を止めてSetSet書くか
> になります。
> 
> 
> 
> #
> # 個人的には、実行時に動的に探すんじゃなくて、
> # VisualStudio上で、同じ名前のプロパティをSetSetする
> # プログラムを生成する補完機能があればいいなぁと
> # いつも思います。
> #
> 
> 2008/10/20 中川弘一08 <[E-MAIL ADDRESS DELETED]>:
> > 中井さん
> >
> > はじめまして、中川と申します。
> >
> > 私も過去に同じ現象に遭遇しました。
> >
> > DBFluteで生成したEntityと自作のPONO間でデータを写す際に同じ現象が発生し
> > ました。
> > S2Dxoが無限に階層を掘り下げてプロパティ情報を取得しに行くので、循環参照
> > するようなプロパティがある場合に、オーバーフローが発生しているようでした。
> > たしかDBMetaプロパティあたりだったと記憶しています。
> >
> > 今取り組んでいる案件では、2階層以上はプロパティを検索しないように改造し
> > て使用しています。
> >
> > 根本的な解決策でなくて申し訳ありませんが、情報共有まで。
> >
> >
> > Nakai さんは書きました:
> >> 小谷さん
> >>
> >> お世話になります。中井です。
> >>
> >>>> ソースを読んでみた限りでは
> >>>> 再帰的にプロパティを探しに行かなくなるので
> >>>> 変換先にお目当ての名称をもつプロパティがなければ
> >>>> 移し替えが行われない、という可能性がありそうです。
> >>
> >> 何故か全項目移し替えが行われてます。不思議です・・・。
> >>
> >>>> 恥ずかしながらすぐには良い修正方法が思いつかないので
> >>>> もう少々お時間を下さい。
> >>
> >> お忙しいところ申し訳ありません。
> >> よろしくお願い致します。
> >>
> >>
> >>
> >> koyak <[E-MAIL ADDRESS DELETED]> wrote:
> >>
> >>> 中井さん
> >>>
> >>> 小谷です。
> >>> S2Dxoには詳しくないコミッタですが、
> >>> コメントさせていただきます。
> >>>
> >>>> S2Dxoのソースを見て、下記部分をコメントアウトすると、
> >>>> データの移し替えも正しく行われたのですが、何か他に影響が出ますでしょうか?
> >>> ソースを読んでみた限りでは
> >>> 再帰的にプロパティを探しに行かなくなるので
> >>> 変換先にお目当ての名称をもつプロパティがなければ
> >>> 移し替えが行われない、という可能性がありそうです。
> >>>
> >>>
> >>> StackOverflowExceptionが起きている原因は
> >>> そのお目当てのプロパティを再帰的に"ずっと"探し続けて
> >>> しまっていることによると思います。
> >>> (見当違いでしたらツッコミをお願いします>識者の方々)
> >>>
> >>> 恥ずかしながらすぐには良い修正方法が思いつかないので
> >>> もう少々お時間を下さい。
> >>>
> >>> 2008/10/20 17:53 kubo <[E-MAIL ADDRESS DELETED]>:
> >>>> 久保(jflute)です。
> >>>>
> >>>> 中井さん、こんばんは
> >>>>
> >>>> 早速確認させて下さい。
> >>>> コメントアウトされた部分で、実際例外が発生する直前
> >>>> の処理における「destType」と「srcValue」は何になるか
> >>>> 教えて頂けますでしょうか?
> >>>>
> >>>>
> >>>> #
> >>>> # S2Dxo詳しいコミッタの方気づいた時に「Help」お願いします
> >>>> #
> >>>>
> >>>> 2008/10/20 中井 雅文 <[E-MAIL ADDRESS DELETED]>:
> >>>>> お世話になります。中井と申します。
> >>>>>
> >>>>> 現在、Quill、DBFlute、S2Dxoでアプリケーションを作成しております。
> >>>>>
> >>>>> DBFluteで自動生成したEntityをカスタムDtoに移送しようとS2Dxoを使ったのですが、
> >>>>> 以下のExceptionが発生してしまいました。
> >>>>> (移送元が試しに作ったカスタムEntityであれば問題ありません)
> >>>>>
> >>>>> 【発生場所】
> >>>>> Seasar.Dxo.Interceptor.DxoInterceptor._TryExchangeSameNameProperty
> >>>>>
> >>>>> 【例外内容】
> >>>>> 'System.StackOverflowException' のハンドルされていない例外が mscorlib.dll で発生しました。
> >>>>>
> >>>>>
> >>>>> S2Dxoのソースを見て、下記部分をコメントアウトすると、データの移し替えも正しく行われたのですが、何か他に影響が出ますでしょうか?
> >>>>>
> >>>>> お忙しいところ申し訳ありませんが、よろしくお願い致します。
> >>>>>
> >>>>>
> >>>>> -----------------------------------------------------
> >>>>>
> >>>>> destInfo = destType.GetProperty(targetPropertyName);
> >>>>> if (destInfo != null && destInfo.CanRead && destInfo.CanWrite)
> >>>>> {
> >>>>>    _ConvertProperty(sourceInfo, source, dest, destInfo, existProperty);
> >>>>> }
> >>>>>    // 異なる場合、再帰で調査する
> >>>>>
> >>>>>
> >>>>> ↓↓↓↓↓↓↓↓↓↓以下コメントアウトで正常動作↓↓↓↓↓↓↓↓↓
> >>>>> /*
> >>>>> else
> >>>>> {
> >>>>>    object srcValue = sourceInfo.GetValue(source, null);
> >>>>>    if (srcValue != null)
> >>>>>    {
> >>>>>        // 変換元を調査する
> >>>>>        if (srcValue.GetType().Namespace != "System")
> >>>>>        {
> >>>>>            AssignTo(srcValue, dest);
> >>>>>        }
> >>>>>            // 変換先を調査する
> >>>>>        else
> >>>>>        {
> >>>>>                        ↓↓↓↓↓↓↓↓↓↓ここでException発生↓↓↓↓↓↓↓↓↓
> >>>>>            PropertyInfo[] properties = destType.GetProperties();
> >>>>>                        ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
> >>>>>            foreach (PropertyInfo property in properties)
> >>>>>            {
> >>>>>                object destValue = property.GetValue(dest, null);
> >>>>>                if (destValue != null && destValue.GetType().BaseType != typeof (ValueType) &&
> >>>>>                    destValue.GetType().Namespace != "System")
> >>>>>                    AssignTo(source, destValue);
> >>>>>            }
> >>>>>        }
> >>>>>    }
> >>>>> }
> >>>>> */
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> 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 メーリングリストの案内