티스토리 뷰

프로프레임에서 서비스 - 서비스간 연동방식은 크게 Local/Remote, Sync/Async, 1-tx/n-tx  로 나뉜다.

Local call은 tdl 공유 메모리의 shared library를 호출하는 Dlcall 방식, Remote call은 TMAX 미들웨어에 등록된 tcs 서비스를 호출하는 tpcall 방식이다.

Local call 의 경우 Sync, 1-tx 방식만 가능하고

Remote call의 경우 XA방식이 아닌 Non-XA 방식으로 TP서버가 구성되어 있다면 n-tx 방식만 가능하다.

위의 설정들은 call property만 수정하는것으로 간단하게 설정 가능하지만 

Async Reply 방식으로 서비스연동을 할 경우 추후에 reply 를 받아오기 위해서 추가적인 개발 과정이 필요하다.

다음은 Async reply 서비스연동후 reply 를 받아오는 예제이다.

해당 예제는 proframe c 5 / TMAX 5 (Non-XA) 환경에서 작성하였다.



주의사항
Async reply 연동이기 때문에 반드시 Remote, n-tx 방식을 사용해야 한다.
주의할 점은 n-tx 처리를 위해 주연동 서비스(호출하는 서비스)와 피연동 서비스(호출당하는 서비스)는 tcs 서버명이 달라야한다.
주연동(sfw200015)의 tcs 서버가 TPFM01 이라면 피연동(sfw200002)서비스는 TPFM01이 아닌 다른 서버에 등록되어야 한다. (예제에서는 TPDONGMIN에 등록)




연동한 서비스모듈 클릭 후 특성창의 Call Property를 다음과 같이 변경한다




Async 호출 후 getReply는 pfmServiceMoudleCallGetReply() api를 dlcall 하여 가져온다.
pfmTpGetReply2() api를 직접 사용하는 방식은 combuff의 데이터가 넘어오기 때문에 결과값을 직접 다루기가 힘들다.

PFM_TRYNJ(pfmDlCall( "pfmServiceModuleExt", "pfmServiceModuleCallGetReply",  &input, &output  ));

&input은 dlcall 의 입력구조체 주소값 이다.
pfmServiceModuleCallGetReply( long *cd, void *output ) 함수를 호출하기 위해
cd 필드를 가진 구조체를 만든다.




&ouput은 reply 값을 담기 위한 연동서비스의 출력구조체 주소값 이다.

위 api의 argument로 사용될 input, output 구조체 변수를 정의한다. 







아래와 같이 구조체 변수가 선언된 것을 확인할 수 있다.

연동된 서비스의 입력값을 셋팅해주고

서비스 호출 뒤 출력값 셋팅부에서는 출력값 셋팅대신 서비스연동에서 사용된 TPCALL 의 cd (call descripter)값을 구하여 저장한다.




서비스연동 호출후 cd 값만 따로 저장하고 다른작업을 수행 후 get reply 를 한다.
연속해서 서비스연동 호출을 할경우 cd 값이 계속 변하기 때문에 추후에 각 서비스별 reply를 구별하기 위해서는 각각의 cd 값을 따로 저장해줘야 한다.
예제에서는 다음과 같이 함수 호출하여 reply 값을 구조체에 저장한다.
PFM_TRYNJ(pfmDlCall( "pfmServiceModuleExt", "pfmServiceModuleCallGetReply",  &reply_input, &svc_out  ));



svc_out 구조체에 저장된 값을 주연동 서비스의 출력구조체로 strcpy 한다. (혹은 다른 필요 로직을 추가 수행)



단위테스트 결과 정상적으로 async 호출된 서비스값을 받아온 것을 확인할 수 있다.





위의 예제 소스는 다음 링크에서 확인 가능하다.

Async reply 서비스 연동

댓글