2014-10-31 2 views
1

Worklight Студия v6.2
MySQL Community Server 5.6.21Может ли SQL-Adapter обрабатывать транзакцию (begin/insert/roolback)?

Я сделал простой эксперимент для этого. Я создал 4 процедуры в адаптере sql.

Процедура «начать», которая вызывает «BEGIN;»; заявление.
процедура «совершить», которая вызывает только «COMMIT»; заявление.
Процедура «отката», которая вызывает только «ROLLBACK»; заявление.
Процедура «insert», которая вызывает оператор «INSERT», который вставляет строку в таблицу.

В дополнение, я создал гибридное приложение, которое имеет кнопки. Каждая кнопка выполняет описанную выше процедуру.

Я открыл его браузером для тестирования. Выполняю «begin -> insert -> commit» и «begin -> insert -> rollback». Оба работают нормально.

Далее я открываю приложение из двух браузеров (A/B). И я выполняю ниже.

1.From браузер A: начать
2.В браузера A: вставить
3.From браузер B: совершить

Это совершено.
База данных не может отличить, что каждый запрос поступает от этого пользователя.
Любые решения?

Заранее спасибо.

ответ

2

Обновления: Что вы могли бы попробовать это:

  1. сделать код более атомным, в том смысле, что вместо 4-х процедур, чтобы все этих различных вызовов в 1 процедуру, или
  2. Уникальный SQL-запрос, отправляющий с ним уникальный идентификатор ... таким образом не должно быть никакого смешивания между сеансами браузеров. Вам нужно будет убедиться, что вы работаете с этим уникальным идентификатором.

Edit: это не правильно soution как connectAs = "Enduser" не поддерживается в SQL adapeders

Я думаю то, что вам нужно сделать, это добавить connectAs="endUser" атрибут процедур адаптера в XML-файле адаптера: <procedure name="myProcedure" connectAs="endUser"/>.

С этой следующей записи блога, который вы должны прочитать, connectAs="endUser" означает:

В целях поддержки отслеживанием состояния процедур адаптера бэкенд HTTP может быть настроен для работы в режиме = connectAs «Enduser». Этот режим означает, что отдельный экземпляр HTTP сессии будет создан для каждого клиента сеанса

Блог пост: Configuring HTTP adapters for stateless/stateful backend connectivity and user identity propagation

+0

Спасибо, Идан. Я добавил атрибуты «SecrutyTest» и «connectAs =» endUser »для своих предварительных версий и протестировал его. Но результаты такие же. В нем говорится: «[ПРЕДУПРЕЖДЕНИЕ] FWLSE0195W: Игнорирование атрибута connectAs процедуры startprocedure в адаптере testSQL. ConnectAs не поддерживается этим типом адаптера». Могу ли я использовать атрибут connectAs = "endUser" в sql-адаптере? – satohiro

+0

А, действительно, вы правы - connectAs не поддерживается в SQL-адаптерах; то, что вы могли бы попробовать, возможно, отправит параметр userId с помощью вашей процедуры SQL, чтобы SQL знал об этом, так что вызовы будут специфическими для одного пользователя. –

+0

@satohiro, см. Мой обновленный ответ. –

Смежные вопросы