2014-10-07 2 views
0

웹 서비스를 호출해야하며 시퀀스를 키로 가지는 DB 부모 테이블에 응답을 삽입해야합니다. 또한 방금 삽입 한 시퀀스 번호를 선택하고 두 트랜잭션 테이블에 모두 자식 테이블에 데이터를 삽입해야합니다. 이것이 어떻게 달성 될 수 있습니까? 트랜잭션에서 모든 삽입을 수행 할 수 있지만 부모 테이블에 처음 삽입 한 후 시퀀스를 가져 오려면 select를 수행해야합니다. 어떤 도움이라도 대단히 감사하겠습니다.JDBC 시퀀스 선택

답변

0

모든 호출을 트랜잭션으로 래핑하면이 작업을 수행 할 수 있습니다. 사용할 수있는 몇 가지 예외 전략이 있지만 단순한 롤백 전략이 유용 할 것 같습니다. 트랜잭션 블록의 호출 중 하나라도 예외를 생성하면 예외 전략이 트리거됩니다. 웹 서비스 호출이 실패 할 경우 예외를 throw하기를 원하면 상태 코드를 확인하고 예상과 다른 경우 예외를 생성해야합니다.

<transactional action="ALWAYS_BEGIN" doc:name="Transactional"> 

     <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="getSequenceNumber" queryTimeout="-1" connector-ref="myConnector" doc:name="Database"> 
      <jdbc-ee:transaction action="BEGIN_OR_JOIN" /> 
     </jdbc-ee:outbound-endpoint> 
     <http:outbound-endpoint exchange-pattern="request-response" host="${webServiceHost}" 
      port="${webServicePort}" 
      path="${webServicePath}" 
      method="GET" doc:name="HTTP"> 
     </http:outbound-endpoint> 

     <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="createRecord" queryTimeout="-1" connector-ref="myConnector" doc:name="Database"> 
      <jdbc-ee:transaction action="BEGIN_OR_JOIN" /> 
     </jdbc-ee:outbound-endpoint> 

     <rollback-exception-strategy doc:name="Rollback Exception Strategy" /> 
    </transactional> 

현재 더 많은 트랜잭션에 대한 자세한 내용을보실 수 있습니다 : http://www.mulesoft.org/documentation/display/current/Transaction+Management