2013-10-04 1 views
1

У меня есть один вопрос: -вставки с двумя или более таблиц из WSO2 ESB с DSS

В моей ESB 4.7.0, 3.0.1 СППР

Я хочу, чтобы вставить данные надежно в базу данных, для этого я получаю один список массивов от клиента. Этот массив мне нужно вставить в 3 разных таблицы. Каждая таблица дала мне возвращенный сгенерированный ключ. Который поможет вставить в 2-й стол, тот же процесс для третьей таблицы. для этого я использую 3 различные операции вставки в wso2esb с использованием wso2dss, вставка происходит красиво.

@my проблема в то время как я вставляю во вторую или третью таблицу, ошибка произошла из-за проблемы с сетью или любого проблема, связанная с данными. В этом случае моя транзакция может быть отменена. Я сделал в медиаторе транзакции, но это полезно для последовательности. это не отражается ни на какой другой последовательности, так как я могу это сделать. Для этого я могу использовать любой посредник класса или любую новую вещь.

ответ

0

Посредник транзакций предназначен для удовлетворения требований атомарности. Поскольку вы используете вставку только без участия удаления, вы можете передать первичный ключ вставленной записи в первой таблице посреднику класса и удалить, но я думаю, в этом случае атомарность не будет гарантирована. Поэтому понятие транзакции в этом случае не достигается.

0

Поскольку вы используете три разных режима работы, вы можете использовать функцию кадрирования DSS вместе с функцией запроса запроса запроса, которая позволяет выполнять транзакции скоординированным образом. Пожалуйста, обратитесь к this, чтобы узнать, как вы можете использовать функцию boxcarring. Это позволяет индивидуальным запросам, выполняемым в сеансе boxcarring, взаимодействовать друг с другом. Концепция «экспортирует» конкретный элемент результата, так что следующий вызывающий запрос получит этот результирующий элемент в качестве параметра запроса. Итак, если у вас есть два запроса: «query1» и «query2», которые выполняются последовательно в сеансе boxcarring, а если «query1» имеет конкретный элемент результата, и этот элемент экспортируется с именем «foo», query2 'также получает параметр запроса с именем' foo '. Поэтому, когда этот сеанс boxcarring выполняется, экспортированное значение query1 будет передано в query2 в качестве входного параметра.

+0

Но как указать этот идентификатор для следующего запроса, когда он этого не знает? – zygimantus

0

Для вашего требования идеальным решением является использование Boxcarring. Boxcarring - это метод группировки набора вызовов службы вместе и одновременного выполнения их. Там, где это применимо, сеанс коробкой передач работает транзакционным способом, например, при использовании с источником данных РСУБД. Функция «Data Service Hosting» облегчает загрузку с помощью группировки вызовов службы на стороне сервера. В результате клиенты специальных служб не требуются, и, как обычно, на сервер могут быть сделаны последовательные вызовы служб для участия в сеансе загрузки.

Для работы с коробкой передач необходимо использовать транспорт, поддерживающий управление сеансом, например HTTP. Клиент службы также должен поддерживать управление сеансом, возвращая файлы cookie сеанса при отправке сервером. Клиенты службы Axis2 имеют полную поддержку управления сеансом.

Пожалуйста, найдите WSO2 original documentation на коробке и this useful blog post, которые объясняют, как работать с boxcarring шаг за шагом.