2015-09-25 15 views
6

非常に大きなファイルがいくつかアップロードされているとセッションタイムアウトが発生する可能性がありますか? 5 GByteの大きなファイルをアップロードし、短いセッションタイムアウトが設定されているとします。ファイルのストリーミング中にセッションタイムアウトが発生する可能性はありますか?プライムフェイスファイルアップロードとセッションのタイムアウト

答えて

8

はい、できます。 servlet specificationでは、アクティブな要求中にセッションが破棄されることはありません。そのようなアップロードがBeanに到着すると、ViewExpiredExceptionのリスクが発生します。

これはあなたの関心事であるならば、あなたはいくつかのオプションをしました:

  1. はアップロードフォームが非同期セッションを存続する間隔でサーバにポーリングしてみましょう。 ELで#{session.maxInactiveInterval}を使用すると、現在のタイムアウトを秒単位で取得できます。

    <p:fileUpload ... /> 
    <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" /> 
    

    10秒の差がちょうどページ自体も、すべてのHTMLをロードすると、投票を初期化するために時間がかかる場合がありますので、それは遅すぎる、数秒に到達することを防ぐためです。アップロードの開始時に条件付きで投票を開始/レンダリングすることができます。


  2. アップロードの「ONSTART」イベントは一定の限界(時間?)にセッションタイムアウトを増やしてみようと、アップロードの「onCompleteの」イベントが戻ってそれを置くましょう。あなたは豆に秒単位で希望セッションタイムアウトを設定するためにExternalContext#setSessionMaxInactiveInterval()を使用することができます

    <p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" /> 
    <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" /> 
    <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" /> 
    


  3. stateless JSFフォームを使用します。 HTTPセッションの動作に関係なく、ビューは期限切れになりません。

    <f:view transient="true"> 
        ... 
    </f:view> 
    

    注:すべてのビューは、このようなビューに結び付け豆がリクエストスコープのもののように動作しますスコープ。混乱を避けるため、必要に応じてアノテーションを置き換えてください。

+0

ありがとうございます。私は 'p:fileUpload'が私の場合はアップロードが完了したときに見えなくなるので、オプション2を使用します。それは閉じられるダイアログの中にあり、アップロードはjavascript呼び出しによって開始されます。 – opfau

+0

ようこそ。 – BalusC

+1

+1ステートレスJSFフォームの言及! :Dは今までそれを知らなかった。どのjsfリリースで利用可能になるのでしょうか? – Fritz

関連する問題