0

アプリケーションのライフサイクル全体を通して存続する耐久性のあるjcrセッションを作成する方法はありますか?背景には、このセッションをJCR EventListenerに使用して、着信イベントのビューを更新したいというものがあります。したがって、このリスナーは常にセッションに接続する必要があると思います。

4

1 に答える 1

1

はい、実際に定期的なセッションを作成し、それを使用してイベントリスナーを登録し、必要な限り存続させることができます。

実際、イベントリスナーには、リスナーの登録に使用されたセッションがまだ有効である間のみ、イベントが通知されます。もちろん、その長期間のセッションはリポジトリのシャットダウンを妨げる可能性があるため、アプリケーションまたはサービスがシャットダウンするときは常にセッションからログアウトしてください。

一般的なベストプラクティスの1つは、リスナーにできる限り少ない作業を行わせることです。リスナーは非同期で呼び出されます(つまり、リスナーが完了するまでリポジトリは変更の完了を待機しません)。つまり、これは別のスレッドで行われる可能性が高く、完了するまでに長い時間がかかると、リスナーがリソースの問題を引き起こす可能性があります。したがって、作業が簡単でない場合は、(たとえば)作業をキューに送信し、キューを個別に処理することによって、できるだけ早くスレッドを終了します。

もう1つのベストプラクティスは、リスナーが登録に使用されたのと同じセッションを使用してコンテンツを読み書きしないことです。JCRセッションはスレッドセーフである必要はなく、ほとんどの実装は同時実行性を実装していません。つまり、コンテンツの読み取りのみが必要な場合でも、複数のスレッドで安全に使用することはできません。(一部の実装では、セッションがスレッドセーフであることが保証されていますが、その実装にロックする必要がある場合を除いて、その特性に依存することは避けたほうがよいでしょう。)

要約すると、リスナーが何らかの作業を行う必要がある場合は、呼び出し元のスレッドを終了し、別のセッションを使用してコンテンツを読み取ったり更新したりします。

于 2012-11-13T00:19:44.350 に答える