동기/비동기 호출
컴포넌트가 비동기 구현이 있는 다른 컴포넌트를 동기식으로 호출할 때 발생하는 동기/비동기 호출 사용을 피하십시오.
런타임에 동기/비동기 호출이 발견되면 SCA(Service Component Architecture)는 자동으로 동기 호출을 비동기 호출로 변경하며 그러면 새 트랜잭션 경계가 작성되어 다음과 같은 하나 이상의 문제가 발생할 수 있습니다.
- 트랜잭션 전파 부족
- 많은 재시도로 인해 동일한 서비스를 여러 번 호출함
- 호출의 기본 대기 시간을 초과하면 제한시간 초과됨
- 스레드가 각 비동기 호출에 할당되고 응답을 대기할 때 차단된 스레드와 스레드 풀이 삭제됨
대부분의 동기/비동기 호출은 일반적으로 비동기 구현이 있는 다음 중 한 컴포넌트를 동기식으로 호출하는 컴포넌트가 있을 때 발생합니다.
- 장기 실행 BPEL 및 BPMN 비즈니스 프로세스
- 사용자 태스크
- JMS 가져오기
- MQ 가져오기
- ServiceAsynchImpl 인터페이스를 구현하는 Java POJO 컴포넌트
예를 들어, Web Service 내보내기는 항상 동기 호출을 수행합니다. 내보내기가 장기 실행 BPEL 프로세스를 호출하면 동기/비동기 호출이 발생합니다. 마찬가지로 마이크로플로우는 항상 요청-응답 조작에 동기 호출을 수행합니다. 마이크로플로우가 요청-응답 조작에 대한 MQ 가져오기를 호출하면 동기/비동기 호출이 발생합니다.
일반적으로 동기/비동기 호출을 야기할 수 있는 다음 시나리오는 피하십시오.
- 장기 실행 BPEL 또는 BPMN business 프로세스를 호출하는 Web Service 내보내기
- MQ 또는 JMS 가져오기와 같은 메시지 바인딩 가져오기를 호출하는 Web Service 내보내기
- 요청-응답 조작에 대한 장기 실행 BPEL 또는 BPMN 프로세스를 호출하는 BPEL 마이크로플로우
- 요청-응답 조작에 대한 메시지 바인딩 가져오기(예: MQ 또는 JMS 가져오기)를 호출하는 BPEL 마이크로플로우
동기/비동기 호출이 발견되면 SystemOut.log 파일에 다음 경보 메시지가 표시됩니다.
000000ac Core W CWSCA2011W: Service Component Architecture (SCA) is switching a synchronous call to an asynchronous call.
Request will be sent in a new local transaction. Default timeout is 115000 milliseconds.
특정 애플리케이션 시나리오에 따라 동기/비동기 호출을 피할 수 있는 여러 접근법이 있습니다. 예를 들어, 요청-응답 조작에 대한 MQ에 대해 장기 실행 BPEL 프로세스를 호출하는 마이크로플로우가 있는 경우 동기/비동기 호출을 피하기 위해 잠시 지속되는 프로세스를 통합할 수 있습니다.
호출 스타일에 대한 일반 정보는 호출 스타일 주제를 참조하십시오.