2012-02-19 10 views
1

私はちょうど単純な休止状態のstrutsチュートリアルに続き、正常に休止状態を通してdb呼び出しを行いました。しかし、どこにでもハイバーネーション接続を閉じるコードはありません。hibernate session close

sessionFactory.getCurrentSession(); 

は、リクエストごとにセッションを取得するために使用されます。ユーザーがログアウトしたときにこのセッションを終了する必要がありますか?または各要求の後に、この何かがフレームワークによって世話をされたか?

第2の関連する質問は、どのような種類のユースケースで私は休止状態のセッションインターセプタを使用するのですか?

と3番目の質問(申し訳ありませんが、私の頭に浮かんでいました)は、どのような最高のオプションをhibernate/struts2でキャッシングするのですか?

+2

あまりにも多くの質問をキャッシュ部分をスキップし、コア領域に集中するので、その優れた休止している場合です。 –

答えて

5

最初の質問については、reference documentationは言う:

getCurrentSession()の最初の呼び出しは、現在のスレッドのために作られたときにAのorg.hibernate.Sessionが始まる

。その後、現在のスレッドにHibernateによって束縛されます( )。トランザクションが終了すると、コミットまたはロールバックによる のいずれかが実行され、Hibernateは自動的にスレッドからorgorg.hibernate.Sessionのバインドを解除して閉じます。あなたの2番目の質問については

the documentationは言う:

インターセプタのインターフェースは、アプリケーションが検査および/またはその前に、永続オブジェクトの プロパティを操作することができ、 アプリケーションへのセッションからのコールバックを提供更新、削除されました またはロードされています。このための1つの可能な使用は、監査情報を追跡することです。 たとえば、次のインターセプタは、Auditableの作成時に createTimestampを自動的に設定し、Auditableが更新されたときに lastUpdateTimestampプロパティを更新します。

第3の質問に関して、Struts2はプレゼンテーションフレームワークです。永続性とは関係がないため、永続性エンティティのキ​​ャッシュになります。 The documentationは第2レベルのキャッシュについて詳細を述べています。

ご覧のとおり、ドキュメントには興味深い情報がたくさんあります。私はそれを読むことをお勧めします。

2

あなたが休止状態を使用しているかのように、あなたの質問に答えるために多くの情報を必要とし、私たちは、次のあなたのアールチュートリアルこれは本当に無知です:ご質問について)

  1. Hibernateセッションは、作業単位を表し、それは常に良い習慣私はハイバーネイトセッションとユーザーログイン/ログアウトプロセスとの関係は見ません.Webセッションとハイバネートセッションのコンセプトを混在させないでください。
  2. hibernateレベルでキャッシュする場合は、ehcacheを第2レベルのキャッシュとして使用し、休止状態では最初のレベルのキャッシュをStruts2側で提供できます。私はEHCacheを推奨します。

私の提案は、あなたがStrust2について学習し、単一のもので

関連する問題