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

Hiroaki Fujii [E-MAIL ADDRESS DELETED]
2008年 10月 27日 (月) 02:23:23 JST


藤井です。

> http://s2container.seasar.org/2.4/ja/s2dxo.html#nestedProperty
> を見ると、Java版は1階層までのようですね。
> 無限階層はC#版特有のもののようです。
>> コミッタの方々、これ直しませんか?

す、すいませんm(_ _)m
がんばって、時間を作ってみます。


kubo さんは書きました:
> 久保(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 メーリングリストの案内