2011-04-20 2 views
2

BPEL 작성의 새로운 기능입니다. 아래 간단한 과정을 실현했습니다 :두 번째 수신시 BPEL 프로세스가 중지되었습니다.

수신 1 | | invoke1 | | 수신 2 | | invoke2

문제는 프로세스가 올바르게 "receive2"까지 실행되지만 내가 soapUI를 통해 호출 할 때 "receive2"와 관련된 작업이 발생하지 않는다는 것입니다. BPEL에 관한 다른 게시물을 읽었지만이 질문과 일치하는 것은 없습니다. 실제 활동 (필자는 할당 된 것 생략) 아래.

<bpel:receive name="receiveInput" partnerLink="client" 
      portType="tns:HealthMobility" 
      operation="initiate" variable="input" 
      createInstance="yes"/> 

    <bpel:invoke name="getTreatmentOptions" 
    partnerLink="treatmentProviderPL" operation="getTreatmentOptions" 
    inputVariable="getTreatmentOptionsReq" outputVariable="getTreatmentOptionsResp"> 
    </bpel:invoke> 

    <bpel:receive name="bookMobility" partnerLink="client" operation="bookMobility" 
    variable="bookMobilityReq" portType="tns:HealthMobility"/> 

    <bpel:invoke name="getTripOptions" partnerLink="mobilityMultiProvidersPL" 
    operation="getTripOptions" inputVariable="getTripOptionsReq" 
    outputVariable="getTripOptionsResp"></bpel:invoke> 

나는 단순히 수신 삭제하고 정적으로 호출하는 getTriOptions 필요로하는 입력 변수를 초기화하여 디버깅을하기 위해 노력했다. 이 경우 모든 것이 정상적으로 작동하므로 SOAPUI를 통해 bookMobility를 호출하는 경우에도 프로세스가 receive에서 계속 대기해야 함을 의미합니다. 내 질문은 : 왜? 내가 뭔가 빠졌어?

감사합니다.

답변

3

두 번째 수신에 대한 상관 관계 세트를 정의해야합니다. 첫 x 째 receive 활동에 연결된 조작으로 송신 된 각 메시지는 새 프로세스 인스턴스를 작성합니다. 즉, 병렬로 여러 인스턴스를 실행 중일 수 있습니다. 이 인스턴스가 두 x 째 수신에 도달하면 두 x 째 메시지를 기다리고 있지만, 예에서 식별 할 수단이 없으며, 어떤 메시지가 어떤 프로세스 인스턴스를 대상으로하고 있는지 구별 할 수단이 없습니다. BPEL 엔진이 메시지를 대상 인스턴스로 라우트 할 수 없다고 기록한 것으로 가정합니다.

이 문제점을 해결하려면 메시지의 페이로드에서 ID를 찾아이 값으로 상관 세트를 초기화해야합니다. 그런 다음 두 번째 수신과 동일한 상관 세트를 사용할 때 동일한 ID를 포함하는 모든 메시지가이 특정 프로세스 인스턴스로 라우트됩니다. 상관 관계 세트에 대한 자세한 내용은 BPEL primer, 4.2.4 절을 읽는 것이 좋습니다.

+0

답장을 보내 주신 고마워요. 나는 그게 뭔가라고 생각했습니다. 어쨌든 BPEL 사양의 또 다른 문장이 약간 혼란 스러웠습니다. "비즈니스 프로세스 인스턴스는 동일한 partnerLink, portType, operation 및 correlationSet (s)에 대해 둘 이상의 활동을 동시에 활성화하지 않아야합니다". 이제 내 프로세스의 두 번째 수신은 첫 번째와 동일한 파트너 역할 및 포트 유형의 동일한 partnerLink를 사용하지만 당연히 다른 작업입니다. 솔직히 나에게 최선의 방법을 진행하는 것 같습니다. 어쨌든 나는 확증 세트로 시도 할 것이다. Thanks again again – user716658

+0

partnerLink, portType, 조작 및 상관 세트가 고유해야한다는 제한은 동일한 이유가 있습니다. 사실 그것은 상관 관계 집합 정의가 아니라 그 인스턴스에 관한 것입니다. 제한의 목표는 항상 특정 상관 토큰과 연관된 단일 인스턴스 만 있는지 확인하는 것입니다. 먼저 로그인 메시지 (사용자 이름, 암호)를 받고, 사용자 데이터베이스에서 조회를 수행하고 세션을 만드는 간단한 프로세스를 생각해 봅시다. 세션 ID가 클라이언트로 다시 전송 된 다음 수신 또는 선택이 예를 들어 기다리고 있습니다. 주문 (다음 댓글 계속). – vanto

+0

@vanto (계속 다음 댓글) ??? –