Создать длительную сессию jcr
Есть ли способ создать длительный сеанс jcr, который поддерживается в течение всего жизненного цикла приложения? Фоном является то, что я хочу использовать этот сеанс для JCR EventListener, который обновляет мой взгляд на любое входящее событие. Поэтому этот слушатель должен быть всегда связан с сеансом, я думаю.
1 ответ
Да, вы действительно можете создать обычный сеанс, использовать его для регистрации слушателей событий и поддерживать его в течение необходимого времени.
Фактически, прослушиватели событий будут уведомлены только о событиях, пока сеанс, используемый для регистрации прослушивателя, еще жив. Конечно, этот долгоживущий сеанс может помешать закрытию хранилища, поэтому всегда выходите из сеансов, когда ваше приложение или служба завершают работу.
Одна из наиболее распространенных рекомендаций заключается в том, чтобы слушатель выполнял как можно меньше работы. Слушатели вызываются асинхронно (это означает, что хранилище не ожидает завершения изменений, пока слушатели не завершат работу), что означает, что это, вероятно, выполняется в отдельном потоке, и слушатель может вызвать проблемы с ресурсами, если для его завершения требуется много времени. Поэтому, если работа не является тривиальной, как можно быстрее выйдите из потока, например, отправив работу в очередь и обработав ее отдельно.
Еще одна лучшая практика для слушателей - не читать и не писать контент, используя тот же сеанс, который использовался для их регистрации. Сеанс JCR не обязательно должен быть потокобезопасным, и большинство реализаций не реализуют параллелизм. Это означает, что они не могут безопасно использоваться несколькими потоками, даже если это влечет за собой только чтение контента. (Некоторые реализации гарантируют, что сеансы являются потокобезопасными, но, вероятно, лучше избегать полагаться на эту черту, если вы не хотите или не должны быть заблокированы в этой реализации.)
Таким образом, если слушателю необходимо выполнить какую-либо работу, отключитесь от вызывающего потока и используйте отдельный сеанс для чтения или обновления содержимого.