10

Hibernate を使用していくつかのエンティティを管理し、これらのオブジェクトを操作して追加のビジネス ロジックを提供するための REST インターフェイスを提供する単純な Java テスト プロジェクトを開始しました。REST インターフェイスは、RESTEasy と Jetty を使用して作成されます。

これまでのところすべて正常に動作していますが、実際にはボイラープレート コードを書きすぎているように感じます。私はこれらの Java フレームワークの経験があまりないので、誰かが状況を改善する方法についてヒントをくれないかと思っています。

  1. リクエストごとの Hibernate セッションの作成

まあ、私が理解している限り、リクエストごとに Hibernate セッションを作成する必要があり、最後にそれを閉じる必要があります。したがって、現在、私のサービスメソッドはすべて次のようになっています。

Session session = HibernateUtil.getInstance().getSessionFactory().openSession();
...
...
...
session.close();

どういうわけかこれを自動的に行うために、これらの2行を削除する方法はありますか? 現在、私のサービスは RestEASY シングルトンとして登録されています。RESTeasy リソースに変更し、コンストラクターでセッションを作成すると、問題は解決しますか? セッション作成の問題は解決すると思います。しかし、どこでそれを閉じるのですか?

C++ では、最後にセッションを閉じるスコープ オブジェクトを作成することで、これを簡単に行うことができます。しかし、Javaでは?

  1. このような REST 要求が行われるたびに、有効なセッションを確認する必要があります (ユーザーは以前にログインする必要があります)。ServletFilter はこれを行う正しい方法ですか?

一般: 他に使用を検討すべきパターンやフレームワークはありますか? つまり、できるだけシンプルに保ちたいということです。特に、経験があまりないので、Spring や重いフレームワークを使いたくないということです。私は Python と Django の単純さに慣れているようですが、この小さなプロジェクトでは Java を使用する必要があります。

今までありがとう!

4

3 に答える 3

3

セッションを管理するためのHibernateの現在推奨されるアプローチについては、このwikiページで詳しく説明されています。特に、最後の段落を読む必要があると思います。これはすべて非常に難しいことですが、これを簡単に行うことはできませんか?

最後に、永続層に「私は何かをやろうとしている」(通常はセッションにもそれを行わせる)と「私はそれをやった」と伝える必要があります。注釈またはJTAトランザクションを使用してそれを行うことができますが、それでもその情報を伝達する必要があります。

于 2012-04-24T13:15:50.173 に答える
1

SessionFactoryをデータアクセスオブジェクトに挿入し、sessionFactory.getCurrentSession()を使用してHibernateSessionオブジェクトにアクセスします。これを実装するために利用可能な任意のFactoryクラスを利用できます。

そうすると、コードは次のようになります。

sessionFactory.getCurrentSession().save(newInstance); 
于 2012-04-24T09:56:58.580 に答える
0

これを行う Filter を作成してみてください。例が必要な場合は、Spring の OpenSessionInViewFilter から始めるとよいでしょう。

于 2012-04-24T08:56:27.037 に答える