私はPlay Frameworkで電子メールメッセージを送信していますが、PDFファイルをレンダリングして電子メールの添付ファイルとして使用したいとします。 Play Frameworkの標準のGroovy HTMLテンプレートシステムを使用しているため、Play Framework PDFモジュールを使用することにしました。ジョブを使用して非同期にPlay Framework PDFモジュールでPDFをレンダリングする方法はありますか?
私は次のコードで私のコントローラメソッドにByteArrayOutputStreamにPDFファイルをレンダリングすることができます
PDF.MultiPDFDocuments docs = new PDF.MultiPDFDocuments("myfile.pdf);
ByteArrayOutputStream os = new ByteArrayOutputStream();
MyEntity myArgument;
PDF.writePDF(os, docs, myArgument);
は、しかし、私はPDFレンダリングが私の要求処理スレッドをブロックしているという考えを好きではありません。私は仕事でPDFを非同期的にレンダリングしたいと思います。問題は、コードをJob内に移動すると、NullPointerExceptionsを取得し始めるということです。これは、Play PDFモジュールのPDFレンダリングメソッドが、Controllerメソッドで使用可能でしたが、Jobで使用できないSessionオブジェクト、Requestオブジェクト、Paramsオブジェクト、Flashオブジェクトを広範囲に使用しているためです。たとえば、メソッドplay.modules.pdf.PDF.renderTemplateAsPDFは、次の行があります
templateBinding.put("session", Scope.Session.current());
templateBinding.put("request", Http.Request.current());
templateBinding.put("flash", Scope.Flash.current());
templateBinding.put("params", Scope.Params.current());
は私のPDFの仕事のために安全に利用できるようにするセッション、リクエスト、PARAMSとFlashの情報を追加する方法はありますか?あるいは、どうやってPDFモジュールのレンダリングメソッドがそれらを呼び出すのを防ぐことができますか?テンプレートにRequestとParamsの情報が本当に必要なわけではありません。
興味深い質問。私は今週末に調査します。 –
アイデア@Zenklys? – skrii