2014-09-30 2 views
0

У меня есть поток, где мне нужно писать в 3 таблицы сразу из вызова веб-службы. Это будет одностороннее обслуживание. Таким образом, входящий веб-сервис, а исходящий - JDBC с 3 вставками.Сделки JDBC

Таблицы представляют собой родительскую таблицу и 2 дочерние таблицы, и их необходимо записать в этой последовательности. Нужно ли использовать синхронный поток, чтобы избежать нескольких потоков и какой транзакции я должен использовать? Я думаю, его простая транзакция, поскольку все таблицы находятся в одной базе данных. Будет ли определение ниже работать?

<flow name="xxx" doc:name="xxx" processingStrategy="synchronous"> 
    <http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="3366" doc:name="HTTP" /> 
    <transactional action="ALWAYS_BEGIN"> 
    <jdbc:outbound-endpoint queryKey="insert" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 1"> 
     <jdbc:transaction action="ALWAYS_JOIN" /> 
     <jdbc:query key="insert" value="insert into Parent values (#[payload], 'Test 1')" /></jdbc:outbound-endpoint> 
    <jdbc:outbound-endpoint queryKey="insert2" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2"> 
     <jdbc:transaction action="ALWAYS_JOIN" /> 
     <jdbc:query key="insert2" value="insert into ChildA values (#[payload + 1], 'Test 2')" /></jdbc:outbound-endpoint> 
    <jdbc:outbound-endpoint queryKey="insert3" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2"> 
     <jdbc:transaction action="ALWAYS_JOIN" /> 
     <jdbc:query key="insert3" value="insert into ChildB values (#[payload + 1], 'Test 2')" /></jdbc:outbound-endpoint> 
    </transactional> 
</flow> 

ответ

0
  1. Все оконечные устройства, участвующие в сделке по своей сути быть синхронными.
  2. Да, стандартные транзакции прекрасны, если все они используют то же самое connector.

Вы можете просто использовать:

<transactional> 
     <jdbc:outbound-endpoint queryKey="insert" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 1"> 
      <jdbc:query key="insert" value="insert into Parent values (#[payload], 'Test 1')" /> 
     </jdbc:outbound-endpoint> 
     <jdbc:outbound-endpoint queryKey="insert2" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2"> 
      <jdbc:query key="insert2" value="insert into ChildA values (#[payload + 1], 'Test 2')" /> 
     </jdbc:outbound-endpoint> 
     <jdbc:outbound-endpoint queryKey="insert3" queryTimeout="-1" connector-ref="dbConnector" doc:name="Insert 2"> 
      <jdbc:query key="insert3" value="insert into ChildB values (#[payload + 1], 'Test 2')" /> 
     </jdbc:outbound-endpoint> 
    </transactional> 

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

+0

спасибо Райан будет это также облегчит вставки в порядок здесь insert parent должен произойти сначала перед дочерними элементами. – hpandalai

+0

Да, поскольку они будут синхронными, они будут работать в определенном порядке. –