创建耐用的JCR会话



是否有一种方法可以创建一个耐用的JCR会话,该会话在整个应用程序生命周期期间保持活力?背景是我想将此会话用于JCR EventListener,该会话会更新我对任何传入事件的看法。因此,我认为这个听众必须始终与会话联系。

是的,您确实可以创建一个常规会话,使用它来注册活动听众,并尽可能长时间保持其生存。

实际上,事件听众只会在用于注册听众的会话时才通知事件。当然,长期的会话可能会阻止存储库关闭,因此当您的应用程序或服务关闭时,请务必从会话中注销。

一种常见的最佳做法是让听众尽可能少的工作。听众被异步地称为(这意味着存储库不等待完成更改,直到听众完成),这意味着这可能是在单独的线程上完成的,如果需要很长时间才能完成,则听众可能会导致资源问题。因此,如果工作并不小,请通过(例如)(例如)将作品分别提交工作并分别处理队列。

另一个最佳实践是使用用于注册它们的相同会话的听众读取或写入内容。JCR会话不需要线程安全,并且大多数实现都不实现并发。这意味着即使仅需要阅读内容,也不能安全地使用多个线程使用它们。(某些实现确实保证了会话是安全的,但是最好避免依靠该性状,除非您需要或需要锁定该实现。)

总而言之,如果听众需要做任何工作,请访问呼叫线程并使用单独的会话读取或更新内容。

最新更新