【问题标题】:JCR 2.0 how right use sessionJCR 2.0 如何正确使用会话
【发布时间】:2014-06-11 17:48:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: java session jcr


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 作为 Jackrabbit 的重度用户,我同意 Randall 的观点,即为每个 HTTP 请求创建一个 JCR 会话是可行的方法。这些会话的创建成本很低,不像某些数据库会话。
    猜你喜欢
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2014-04-22
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多