Как обрабатывать транзакции во время HTTP-запроса или фазы жизненного цикла пакета в Apache Sling - PullRequest
1 голос
/ 22 ноября 2011

Из спецификации JCR я знаю, что могу запросить объект UserTransaction (указанный в JTA) и создать последовательность начала / фиксации / отката во время текущего сеанса. Может вопрос, могу ли я сделать что-то подобное в Sling? Например, когда пользователь запрашивает URL-адрес, который разрешается в мой сервлет, или во время запуска моего пакета.

Я могу получить доступ к репозиторию JCR, но будет ли механизм транзакций работать так, как предполагалось, когда речь идет о ресурсах (которые могут быть не зарезервированы JCR ...)?

А также как Sling / JCR / Jackrabbit одновременно работает с сеансами, управляемыми транзакциями, а не с транзакциями, контролируемыми одновременно? Может ли такое поведение привести к несоответствиям в хранилище, если что-то пойдет не так?

1 Ответ

1 голос
/ 22 ноября 2011

Вам действительно нужны транзакции?Временное пространство сеанса JCR хорошо работает как механизм упрощенных транзакций, если вы закроете сеанс без вызова save (), все изменения будут отброшены.Обычный шаблон - делать вещи в сервлетах или скриптах, которые обрабатывают ваш запрос, и сохранять только в том случае, если указанные вещи были успешными.

С другой стороны, Sling предоставляет полный доступ к основной сессии JCR, поэтому вам следуетбыть в состоянии сделать что-нибудь подходящее.Если нет, лучше всего спросить в списках пользователей Sling, см. http://sling.apache.org/site/project-information.html#ProjectInformation-lists

...