2009-07-24 5 views
3

Jasper Reports(v3.5.2)を使用して、WebアプリケーションのブラウザにPDF/HTMLのレポートを生成して印刷しようとしています。このWebアプリケーションは、フロントエンドにはすでにJSF(Woodstock)を使用しています(JPAとMySQLデータベースへの永続性プロバイダとしてのHibernateを使用)。ジャスパーレポート - フロントエンドまたはビジネスに適合する場所

私の質問です - ジャスパーベースのレポートを生成するコードはどこにあるべきですか?私はこれについて完全に混乱しています。私はそれをJSFフロントエンドに入れるべきですか?それとも、セッションBeanとしてビジネスロジックの「レポート」モジュールであるべきか?

これは、適切な場所が別のモジュールとしてビジネス層であると私は思います。レポートの名前、パラメータマップ、レポート形式をパラメータとしてビジネスメソッドを呼び出し、生成されたpdf/htmlをブラウザに送信してブラウザに送ることができます。これで正しい軌道にいるのでしょうか?

これを行う方法のパターンを提案できますか?

JPQLを既に使用しているので、私はEJBQLを使いたいと思います。

ありがとうございました。

答えて

3

あなたの耳の一部として生成されたジャスパーを埋め込みたい場合は、提案したようにクラス内で抽象化する必要があります。クラスタ化を行っている場合や、別のJVMにレポート生成をオフロードする場合や、特別なトランザクションが必要な場合を除き、別のEJBを作成するかどうかはわかりません。

もう1つの一般的なオプションは、リモートから呼び出す完全に別のレポートサーバーを用意し、ユーザーとのやりとりを引き継ぐことです。

1

ここでは、 '生成するコード' = 'レポートを呼び出すapi'と仮定しています。リソース報告ティアのみでのプレゼンテーション層の接触しているライブラリがダウンして、ユーザーにレポートをストリーミングする -

あなたは、主にプレゼンテーション層を経由してこれを実行したいと思います。

この方法で、あなたが実際に要求者(クライアント)に送信する前にこのについて移動するいくつかの方法があります

0

データを保持し、階層全体に渡す維持する必要がなくなります。マネージドBeanからレポートを生成することもできますが、ブラウザでレポートをレンダリングする直前にfacesContext.responseComplete()を呼び出して、JSFライフサイクルを中断する必要があるかもしれないことに注意してください。

レポートを生成する必要があるときにはいつでも、JSF出力リンクから呼び出すことができるレポートサーブレットを使用することもできます。

関連する問題