2012-01-03 20 views
2

JSFとJPAに関するいくつかの調査を行いました。いくつかのチュートリアルを読み、いくつかの例を続けます。この前に、アプリケーションを処理するためのマネージドBean、モデル、サービスを作成しました。JSFとJPAの統合

JPAをこのパターンに含めるベストプラクティスは何ですか?同じサービスクラスにJPQLクエリとデータベース呼び出しを含める必要がありますか?いくつかの例では、Invokeアプリケーション・フェーズで呼び出されたメソッドと同じマネージドBeanにJPAが実装されているか、他のマネージドBeanでJPAが実装されていました。これらの2つを扱う一般的な慣行は何ですか?

+0

実際にあなたの質問には答えません。ちょうど私たちの経験。パブリック・サイトを作成していて、優れたパフォーマンスを望む場合は、JSFを使用しないでください。私たちはJSFで多くのメモリとCPUのボトルネックを取りました。 – abdolence

+0

ありがとう!それは、JEEで使用するためのもっと個人的なプロジェクトです。 – TGM

答えて

2

JPAアクセスを1種類または2種類のDAOまたはサービス層に統合する必要があります。それ以外の理由でユニットテストのためにそのDAO層をスタブアウトできない場合は、すべてのJSFマネージドBeanは、そのクラスを介してJPAアクセスをルーティングします。そうすれば、JSFマネージドBeanからJPAにアクセスするたびに、EntityManagerQueryなどを個別にマックするのではなく、1つのDAOメソッド呼び出しをモックできます。

ここで、DAO /サービス層が別のJSF管理Bean、EJB、またはそれ以外のものであるべきですか?それは、JPAアクセスを分離することを認めることよりも重要ではありません。

個人的には、私はDAFを、注入のために@ManagedPropertyを使用してJSFマネージドBeanのもう1つの風味として作り始めました。その後、Java EE 6でCDIを発見し、代わりに@Named/@InjectというPOJOを作成しました。

ただし、読み込みだけでなく書き込みを行っている場合は、トランザクションを宣言できる別のサービスレイヤーを検討する必要があります。おそらく@Stateless JSFを使用している場合はEJBが最も適しています。

希望すると便利です。

+1

- 私はCDIに入る前にこれを書いていました。あなたのマイレージは変わるかもしれませんが、それはすでに古くなっているかもしれませんが、それは役に立つかもしれません。 http://wrschneider.blogspot.com/2011/09/jsf-jpa-without-ejb-or-spring.html – wrschneider

+0

あなたは、すべてのエンティティのCRUD(および他の方法)を別のクラスの権利?この場合、なぜこのDAOレイヤが必要なのか分かりません。 – TGM

2

私は自己学習者ですので、適切でないかもしれない言葉を許してください。

このanswerを見ると、RESTfulなWebサービスを作成するためのNetBeansのウィザードへのリンクがあります。これは確かにあなたの質問の範囲を超えていますが、生成されたDAOクラスは本当に役に立ち、JSFプロジェクトに使用できます。必要に応じて、JAX-RS RESTfulアノテーションを削除できますが、残りの部分は保持してください。

次に、Beanに自動生成されたFacadeクラス(EJBアノテーションを使用)を注入します。これらのFacadeクラスとEntityクラスでは、基本JPAクエリーはすでに記述されています。

さらに複雑なクエリを作成する必要がある場合は、JPQLの代わりにタイプセーフなCriteria APIを使用することもできます。最初の努力は大きいですが、Criteria APIを使用すると複雑なクエリをOO形式で書くことができます。具体的な状況では、WHEREステートメント(数値はAdvanced Searchのように動的に生成されます) 。

関連する問題