[akabana-user:210] Re: S2Flex2のサーバで返却するfaultDetailについて

Takahiro Ota [E-MAIL ADDRESS DELETED]
2008年 11月 6日 (木) 02:35:16 JST


ふなくら様

太田です。
こんな時間まで対応、本当にお疲れ様ですm(__)m

時間が取れ次第、ありがたく試させていただきたいと思います。

私はフリーのITアーキテクトなのですが、懇意にしているシステム会社が「ユーザIFにFlexを!」
という方針のため、これからも懇意にさせていただくと思います。

まだ、S2やFlexについては初心者なため、度々お手数をおかけしてしまうかもしれませんが、
どうぞよろしくお願いいたします。

jun funakura さんは書きました:
> 太田さま
> 
> ふなくら(nod)です。
> 
> S2Flex2 1.1.1のSNAPSHOTを置きました。
> 
> http://maven.seasar.org/maven2-snapshot/org/seasar/flex2/s2-flex2/1.1.1-rc2-SNAPSHOT/
> 
> 
> faultDetailに caused by..を含んだtrack情報を含めるようにしました。
> rootCause以下には、faultCode,faultDetailを含めないようにしました。
> rootCauseの階層を一部変更しました。発生した例外をrootCauseに含めるようにしました。
> rootCause以下はfaultDetail,faultString属性を作成しないようにしました。
> 
> 以前にあった
> http://ml.seasar.org/archives/akabana-user/2008-May/000175.html
> も解消しているつもりです。
> 
> あれからS2Flex2とともにBlazeDSも調べていたのですが、
> 現状BlazeDSは、faultDetailはnullで返ってきているようでした。
> S2Flex2では、今回暫定でcaused byの情報も含めるようにしています。
> 
> 別の問題が発生したらまたそのときに対応を考える事にし対と思います。
> 
> お時間ありましたら、お試しください。
> よろしくお願いいたします。
> 
> 
> --
> ふなくら
> 
> 
> 
> 2008/10/25 20:45 Takahiro Ota <[E-MAIL ADDRESS DELETED]>:
>> ふなくら様
>>
>> 太田です。詳細なご回答ありがとうございます。
>>
>> rootCause.faultDetailに詳細な情報が入っているのは存じていました。
>> 但し当たり前ですがcause以下しか入ってないので、発生元は判別できても
>> 発生先が判別できなかったりします。
>> なので、faultDetailとrootCause.faultDetailの2つを合わせて見なきゃいけない
>> となり少し面倒だなぁと。。
>> # 余談ですがRemotingServiceがthrowする例外がRuntimeでない場合、
>> # InvocationTargetRuntimeExceptionでラップされてしまい、
>> # このときはrootCauseの方をみないといけない。
>> # というのもあり、flex側で例外の区別と情報伝達で悩んでいました。
>>
>> ただ、ふなくら様のおっしゃるとおり、面倒なだけで実現は可能なので
>> 一旦その方向で進んでみようと思います。
>>
>> rootCauseの問題については今知りました。
>> ver1.1をstableにするには、まだまだ大変ですね。
>> 利用しておきながらご協力できなく心苦しいのですが、
>> うまく解決できることを願っています
>>
>> 以上、貴重なお時間を割いていただきありがとうございました。
>>
>> jun funakura さんは書きました:
>>> 太田さん
>>>
>>> はじめまして、ふなくら(nod)です。
>>> S2Flex2をお使いいただいてありがとうございます。
>>>
>>> causeの内容ですが、現在リリースしている最新では
>>> FaultにrootCauseを追加して、例外の情報を取得できるようにしています。
>>>
>>> 経緯はこちら。
>>> http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=1752
>>>
>>> で、rootCauseに詳細を入れて取得できるようになったものの、今度は
>>> 以下の問題が発生してしまっています。
>>>
>>> http://ml.seasar.org/archives/akabana-user/2008-May/000175.html
>>>
>>> rootCauseに含まれる例外によっては、FlashPlayer側で取得できない
>>> (Decodeできない)ようになっているようです。
>>> プロパティの型、サイズ、数または
>>> 例外の大元になる原因の深さによるのかもしれません。
>>>
>>> ですので現在、例外発生時に返す情報を再考している状態です。
>>> faultDetailに例外の大元となる情報を追加することで、FlashPlayer側で
>>> さらにエラーを取得できないケースが増えてしまうかもしれません。
>>>
>>> 現在のverでは、faultのrootCauseから情報を取得できると思いますので
>>> (例外によっては上記の問題が発生してしまいますが..)
>>> その情報があればサーバ開発担当者に例外情報を伝えられるのではないでしょうか。
>>>
>>> ご検討ください。
>>>
>>> BlazeDSではFaultDetailに
>>>             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
>>>             PrintWriter pr = new PrintWriter(outputStream);
>>>             pr.println();
>>>             e.printStackTrace(pr);
>>>             pr.flush();
>>>             trace = outputStream.toString();
>>>
>>> といった形で設定しているらしきコードもあったので、
>>> 提案いただいた形を追加しても問題ないのかもしれません。
>>> rootCauseの問題ととも確認/検討したいと思います。
>>> 今しばらく検証と修正するお時間をいただければと思います。
>>>
>>> 以上とりいそぎご回答まで。
>>>
>>> --
>>> ふなくら
>>>
>>>
>>> 2008/10/23 0:49 Takahiro Ota <[E-MAIL ADDRESS DELETED]>:
>>>> はじめまして。太田と申します。
>>>> Flexを利用したプロジェクトでありがたくS2Flex2を使わせていただいております。
>>>> # 環境 サーバ:S2(2.4.24)+S2Flex2(1.1.1-rc1) クライアント:Flex & Flash (flash.net.NetConnection)
>>>>
>>>> 現在私が開発しているプロジェクトで、RemotingServiceがthrowした例外の情報を
>>>> Flex側で受け取り、分岐処理を行っているのですが、
>>>> その際、バグか否かを判別するため、Flex側の開発担当からエラーの情報として、
>>>> faultDetailの内容をサーバ側の開発担当に渡し、解析を行う。といったことを行っております。
>>>>
>>>> その際、faultDetailにはcauseの情報が含まれておらず、結局サーバ側でスタックトレースを含む
>>>> 詳細なログを出力し探し出すという手間を取っております。
>>>>
>>>> そこで、まことに勝手ながら、faultDetailにcauseの情報も含めていただけると
>>>> 助かるのですがお願いできませんでしょうか?
>>>>
>>>>
>>>> 稚拙ながら、
>>>> org.seasar.flex2.rpc.remoting.message.data.factory.impl.FaultFactoryImplにおいて、
>>>> private static final String getStackTraceString(final Throwable t) {
>>>>    String result;
>>>>    final StringWriter stringWriter = new StringWriter();
>>>>    final PrintWriter printWriter = new PrintWriter(stringWriter);
>>>>    try {
>>>>        t.printStackTrace(printWriter);
>>>>        printWriter.flush();
>>>>        result = stringWriter.toString();
>>>>    } finally {
>>>>        if (printWriter !=null) {
>>>>            printWriter.close();
>>>>        }
>>>>    }
>>>>    result = result.replaceAll("\r", "");
>>>>    return result;
>>>> }
>>>> みたいに変更すれば可能かと考えておりますが、いかがでしょうか?
>>>> # replaceAll使ってたりとか性能的に問題があるかものソースではあるのですが・・・
>>>>
>>>> 以上、お忙しい中申し訳ありませんが、ご検討していただけると助かります。
>>>> _______________________________________________
>>>> akabana-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>>>
>>> _______________________________________________
>>> akabana-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>>
>>>
>> _______________________________________________
>> akabana-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>
> _______________________________________________
> akabana-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
> 
> 


akabana-user メーリングリストの案内