Транзакции DMSDK - API Marklogic JAVA - PullRequest
0 голосов
/ 02 ноября 2018

Я хотел добавить 3 документа в базу данных marklogic, используя DMSDK. Во время приема я создаю ошибку в одном из документов, и поэтому вся транзакция откатывается.

Я хотел бы знать, рассматривается ли несколько операторов обновления, записанных в DMSDK, который выполняется в одной транзакции (дозаторе), как один оператор транзакции. По сути, я хотел проверить, смогут ли операторы, написанные внутри транзакции DMSDK (дозатор), увидеть другие операторы, написанные в той же транзакции. Например, если в транзакции t1 есть оператор s1, который принимает документ, могу ли я написать другой оператор s2, который сможет запросить документ, принятый s1 в рамках той же транзакции t1, с использованием DMSDK?

Я заметил, что мы можем сделать это, используя Xquery, но не используя javascript на стороне сервера, поскольку в javascript на стороне сервера он обрабатывает все операторы в пределах одной транзакции как один оператор. Кто-нибудь может предложить, если это тот же сценарий с DMSDK, рассматривая все операторы внутри транзакции как транзакцию с одним оператором?

1 Ответ

0 голосов
/ 02 ноября 2018

Каждый пакет DMSDK выполняется в одной транзакции. Различные пакеты DMSDK выполняются в разных транзакциях.

Относительно транзакций в серверном коде ...

Хотя XQuery имеет специальный синтаксис (разделитель ;) для выполнения последовательных транзакций, более типичным подходом является использование xdmp:invoke(), xdmp:invoke-function() или xdmp:eval() с другой изоляцией транзакции для выполнения дочерних транзакций. Этот подход обеспечивает больше контроля.

Те же функции - xdmp.invoke(), xdmp.invokeFunction() и xdmp.eval() - доступны в серверном JavaScript.

Надеясь, что помогает,

...