[Seasar-user:9187] Re: [Teeda] ダウンロード時に発生するIllegalStateExceptionに

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 7月 17日 (火) 16:42:05 JST


原田です。お疲れ様です。

下記について、色々と確認してみました。
原因がそこにあるかどうか不明ですが
現在の構成として、ダウンロード部分は
いくつかのシステムの部品として、JavaBeanにて
提供しています。
それをjarファイルにして各システムのプロジェクトに
組み込んでいるのですが、そのJavaBeanクラスを
システムのプロジェクトに組み込み実行してみると
旧ソースでも問題なく動作しました。

jarで組み込んだ場合のみうまく行かない事例など
あれば、教えていただければ参考になるかもしれません。

以上


>大谷です.
>
>> 元々は、下記のソースのようにDIされたものではなく
>> FacesContextを取得してやっていたのですが、これに
>> 問題があったという認識でよいでしょうか?
>> つまり、responseCompleteを発行する場合は、Seasar2では
>> DIされたFacesContextに対してresponseCompleteを
>> 発行しなければならないとなる認識になるのかと。
>
>いえ、どちらも同一のFacesContextです.
>特に違いは無いと思いますが.
>
>
>07/07/13 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> 原田です。お世話になっております。
>>
>> 下記の件、うまく行きました。ありがとうございます。
>>
>> 元々は、下記のソースのようにDIされたものではなく
>> FacesContextを取得してやっていたのですが、これに
>> 問題があったという認識でよいでしょうか?
>> つまり、responseCompleteを発行する場合は、Seasar2では
>> DIされたFacesContextに対してresponseCompleteを
>> 発行しなければならないとなる認識になるのかと。
>>
>> --------ソース---------
>> // FacesContextからresponse取得
>> FacesContext fctx = FacesContext.getCurrentInstance();
>> ExternalContext ectx = fctx.getExternalContext();
>> HttpServletResponse res = (HttpServletResponse) ectx.getResponse();
>>
>> // コンテキストタイプの設定
>> res.setContentType(contentType);
>>
>> // ファイル名設定
>> StringBuffer attachment = new StringBuffer();
>> attachment.append("attachmenter;filename=");
>> attachment.append(fileName);
>> res.setHeader("Content-Disposition", attachment.toString());
>>
>> // 出力領域の設定
>> ServletOutputStream outData = res.getOutputStream();
>>
>> // ファイルのバイナリ取得
>> byte[]  fBuf = new byte[4096];
>> int     readLen = 0;
>>
>> // ファイルを読込みレスポンスに書き込み
>> while ((readLen = in.read(fBuf)) != -1) {
>>
>>     outData.write(fBuf, 0, readLen);
>> }
>> outData.flush();
>> outData.close();
>>
>> fctx.responseComplete();
>>
>> 以上
>>
>>
>> >ひがです。
>> >>
>> >> 本件ですが、すでにresponseCompleteは呼び出しています。
>> >> ただし、JSF仕様で、FacesContextをDIせずにやっていたため
>> >> ひがさんが言うようにDIしたfacesContextに対して
>> >> responseCompleteをやってみましたがIllegalStateExceptionが
>> >> 発生しました。
>> >>
>> >LifecycleImplの124行目を見るとわかりますが、
>> >responseComplieteが呼び出されていれば、レンダリングや
>> >フォワードは行われないはずです。
>> >
>> >FacesContextのresponseCompleteがTeedaが認識できる形で
>> >呼び出されていないのではないかと思います。
>> >
>> >実はスレッドが違うとか、違うリクエストでresponseCompleteを
>> >呼び出しているとか。
>> >ダウンロードしたスレッドでresponseCompleteを呼び出せば
>> >大丈夫なはずです。
>> >
>> >--
>> >Yasuo Higa
>> >[E-MAIL ADDRESS DELETED]
>> >_______________________________________________
>> >Seasar-user mailing list
>> >[E-MAIL ADDRESS DELETED]
>> >https://ml.seasar.org/mailman/listinfo/seasar-user
>> >
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
>
>-- 
>=============================
>Shinpei Ohtani
>[E-MAIL ADDRESS DELETED]
>=============================
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
>



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