Java JCR2.0如何正确使用会话

Java JCR2.0如何正确使用会话,java,session,jcr,Java,Session,Jcr,本指南建议为每个请求使用新会话。我的任务是创建一个jackrabbit文件树。因此,按照本指南获取每个项目的属性/节点,我需要创建新会话并在以后关闭它?这样我每次都会创建很多会话,这看起来很奇怪 但若我在JCR中始终使用一个会话,那个么JCR端的MemoryHeapException有时会出现问题,并且保存的节点不正确 在每次使用一个会话和创建一个会话之间,是否有任何准则?还是我误读了指南?我比Jackrabbit更熟悉ModeShape,但总的来说,我认为最好为每个请求创建一个新会话,使用该会

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

但若我在JCR中始终使用一个会话,那个么JCR端的MemoryHeapException有时会出现问题,并且保存的节点不正确


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

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

一般来说,会话是非常轻量级的,而且创建起来也很便宜。但是,创建单独的会话更好(或者至少更容易)有一些原因:

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

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

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

    一般来说,会话是非常轻量级的,而且创建起来也很便宜。但是,创建单独的会话更好(或者至少更容易)有一些原因:

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

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

    作为一个笨重的Jackrabbit用户,我同意Randall的观点,即为每个HTTP请求创建JCR会话是一条可行之路。这些会话的设计成本很低,不像一些数据库会话。作为一个笨重的Jackrabbit用户,我同意Randall的观点,即为每个HTTP请求创建一个JCR会话是一个不错的选择。这些会话的设计成本很低,不像一些数据库会话。