2

私は通常、いくつかのフィールドを持つ jsf ページを使用します。ユーザーは最終的にマネージド Bean の関数を呼び出します

 <h:commandButton value="Go" action="#{myManagedBean.myFunction}"/>

myFunction では、空飛ぶ円盤ライブラリで pdf が生成され、pdf ファイルが添付されたメールが送信されます。

私の問題: PDF の生成に時間がかかるため、ユーザーが h:command ボタンをクリックすると、データが送信され、ページが長時間処理されます.....

ユーザーに jsf ビューをすばやくレンダリングし、別のスレッドで PDF の処理を​​開始する方法 (後でメールを送信する方法)。

任意の助けをいただければ幸いです! クリストフ。

4

1 に答える 1

2

この質問は、実際には JSF にも春にも依存していません。質問に春のタグを付けたので、こちらをご覧ください。TaskExecutor非同期処理用の抽象 API です。春の依存関係が必要ない場合はjava.util.concurrent.Executor、たとえばを使用しますThreadPoolExecutor

このタスク用のシングルThreadPoolExecutor(たとえば、スプリング シングルトン) を使用すると、適切なプール サイズを設定することで、並列に実行できる PDF 生成スレッドの数を制御できます。

executor.execute(new Runnable() {
  public void run() {
    Reader r = generatePDF(someData);
    sendEmail(r, userData);
    r.close(); // in finally preferably
  }
}

PDF生成が完了した後にJSF GUIを更新したい場合は、プッシュ実装を試すことができますが、可能であればこれを避けます.

于 2012-05-03T19:02:30.910 に答える