Понимание границ транзакций на стороне сервера JavaScript- Marklogic - PullRequest
0 голосов
/ 09 ноября 2018

Я хотел проверить границы транзакций в серверном JavaScript в MarkLogic.

Итак, я написал следующий код. Я хотел видеть документ "/docs/first.json" только внутри этой транзакции. По сути, я хотел, чтобы каждый оператор в JavasSript на стороне сервера видел обновления друг друга в транзакции, и он не должен быть виден за пределами транзакции. Но когда я запустил приведенный ниже код, я получил документ "/docs/first.json", который является результатом fn.doc("/docs/first.json"), который выполняется в той же транзакции. Но когда я открыл новый сеанс и попытался получить документ «/docs/first.json», я понял, что документ фактически попал в базу данных и, следовательно, его можно увидеть и вне транзакции.

Может кто-нибудь исправить, в чем я ошибаюсь, в этом коде, чтобы я мог просматривать документ только внутри транзакции, а не за ее пределами. Я смог добиться этого, используя Xquery, используя ";" в качестве разделителей операторов.

declareUpdate({explicitCommit: true});
xdmp.eval('declareUpdate(); xdmp.documentInsert("/docs/first.json",{"first": 1});',{commit:'explicit',transactionMode:'update'})
xdmp.eval('fn.doc("/docs/first.json")',{transactionMode:"query"})

1 Ответ

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

Я полагаю, что проблема в том, что явная переменная "DeclareUpdate ()" переопределяет параметры xdmp.eval, что приводит к автоматической фиксации. Кроме того, вы смешиваете неценные варианты. Не смешивайте параметры xdmp.eval () с прологом - что-то совершает транзакцию. то, как вы вызываете приведенный выше код, также влияет на это.

Пожалуйста, предоставьте полный пример, в котором нет «коммита», и вы не упоминаете, как вы вызывали приведенный выше код или что вы делали, чтобы «открыть новый сеанс».

...