1

本指南JCR Wiki建议为每个请求使用一个新会话。我的任务是创建一个jackrabbit 文件树。因此,按照本指南获取每个项目的属性/节点,我需要创建新会话并稍后关闭它吗?这样我每次都会创建很多会话,这看起来很奇怪。

但是,如果我一直为 JCR 使用一个会话,我会在 JCR 端遇到 MemoryHeapException 问题,并且有时无法正确保存节点。

在使用一个会话和每次创建一个会话之间是否有任何规范?还是我误读了指南?

4

1 回答 1

3

我比 Jackrabbit 更熟悉 ModeShape,但总的来说,我认为最好为每个请求创建一个新会话,使用该会话处理请求,然后关闭会话。

通常,会话非常轻量级且创建成本低廉。但是有一些原因为什么创建单独的会话更好(或者至少更容易):

  1. javax.jcr.Session 不是线程安全的,因此如果您要使用 Session 来处理多个请求,则必须确保 Session 一次只用于处理一个请求。换句话说,您需要某种 Sessions 对象池。
  2. 会话是有状态的,因此一个会话加载的任何信息都可能保留到会话刷新或关闭。
  3. 会话是针对特定用户的。如果每个传入请求可能与不同的用户相关联,则您可能会泄露权限和数据。

可能还有其他我没有想到的原因,但无论如何我希望这会有所帮助。

于 2011-12-07T21:13:29.310 回答