JSF ファイルから PDF を作成するために Flying Saucer を使い始めました。ここで問題があります。HTTP 応答をブロックせずに PDF を作成するアプリケーションで使用したいのです。
以下のコードを見てください。
ServletOutputStream outputStream = response.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(new URL("http://localhost:8080/pdf2.faces").toString());
renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
私の理解によると、ITextRenderer は 3 行目 (関数 loadDocument) で JSF 全体をロードします。つまり、ITextRenderer では、JSF 全体がサーバーによって作成される必要があります。
次に、ITextRenderer は 4 行目で PDF レイアウトを作成し、5 行目で outputStream に配置します。
JSF の作成に時間がかかる場合はどうすればよいでしょうか。上記のコードは、サーバーが JSF 全体を作成するまで 3 行目にスタックされます。したがって、1 行目から 6 行目のコードをサーブレットに挿入すると、HTTP 応答がブロックされ、タイムアウトの問題が発生する可能性があります。元の JSF 全体が作成されるまで待たずに、Flying Saucer が出力ストリームの HTTP 応答の作成を開始することを望みます。それを行う最良の方法は何ですか?Flying Saucer にはこれをサポートする API がありますか? どんな助けでも大歓迎です。