1

このガイドJCR Wikiでは、リクエストごとに新しいセッションを使用することを提案しています。私の仕事は、jackrabbit ファイルのツリーを作成することです。このガイドに従って各アイテムのプロパティ/ノードを取得するには、新しいセッションを作成して後で閉じる必要がありますか? このようにして、毎回多くのセッションを作成することになりますが、これは奇妙に見えます。

しかし、JCR で常に 1 つのセッションを使用すると、JCR 側で MemoryHeapException に問題が発生し、ノードが正しく保存されないことがあります。

1 つのセッションを使用することと、毎回セッションを作成することの間のアプローチに対する規範はありますか? それとも、ガイドを読み間違えていますか?

4

1 に答える 1

3

私は Jackrabbit よりも ModeShape に精通していますが、一般的には、リクエストごとに新しいセッションを作成し、そのセッションを使用してリクエストを処理し、セッションを閉じるのがベスト プラクティスだと思います。

一般に、セッションは非常に軽量で、安価に作成できます。ただし、個別のセッションを作成する方が優れている (または少なくとも簡単である) 理由がいくつかあります。

  1. javax.jcr.Session はスレッドセーフではないため、Session を使用して複数のリクエストを処理する場合は、Session が一度に 1 つのリクエストの処理にのみ使用されていることを確認する必要があります。つまり、Sessions オブジェクトのプールのようなものです。
  2. セッションはステートフルであるため、1 つのセッションによって読み込まれた情報は、セッションが更新されるか閉じられるまで保持される場合があります。
  3. セッションは特定のユーザー向けです。受信した各リクエストが異なるユーザーに関連付けられている可能性がある場合は、権限とデータが漏洩している可能性があります。

私が考えていない他の理由があるかもしれませんが、とにかく、これが役立つことを願っています.

于 2011-12-07T21:13:29.310 に答える