웹 클라이언트 연결이 끊긴 경우 서비스의 처리
- 작성자 :
- 김*수
- 작성일 :
- 2013-09-07 08:27:04
- 조회수 :
- 819
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
수고하십니다.
웹 클라이언트 연결이 끊긴 경우 서비스의 처리에 대해 문의드립니다.
웹 페이지에서 웹서버의 서비스 Controller를 호출하고,
해당 서비스 처리가 완료되기 전에 웹 브라우저가 종료된 경우(세션이 끊긴 경우),
아직 처리 중인 서비스 컨트롤러 처리를 중지하고 트랜잭션을 롤백 처리하는 기능이 필요합니다.
이를 위해서는
기본적으로 웹클라이언트 요청(HttpServletReauest), 응답(HttpServletResponse)에서 현재 클라이언트가 연결되어 있는지를 검사할 수 있어야 하는데 이런 기능이 지원하는지요?
클라이언트 연결이 끊긴 경우 컨트롤러 처리를 중지하고 트랜잭션을 롤백하는 기능이 지원하는지요?
처리하는 방법이 있으면 알려주시기 바랍니다.
감사합니다
웹 클라이언트 연결이 끊긴 경우 서비스의 처리에 대해 문의드립니다.
웹 페이지에서 웹서버의 서비스 Controller를 호출하고,
해당 서비스 처리가 완료되기 전에 웹 브라우저가 종료된 경우(세션이 끊긴 경우),
아직 처리 중인 서비스 컨트롤러 처리를 중지하고 트랜잭션을 롤백 처리하는 기능이 필요합니다.
이를 위해서는
기본적으로 웹클라이언트 요청(HttpServletReauest), 응답(HttpServletResponse)에서 현재 클라이언트가 연결되어 있는지를 검사할 수 있어야 하는데 이런 기능이 지원하는지요?
클라이언트 연결이 끊긴 경우 컨트롤러 처리를 중지하고 트랜잭션을 롤백하는 기능이 지원하는지요?
처리하는 방법이 있으면 알려주시기 바랍니다.
감사합니다
A
안녕하세요. 김기수님.
몇 가지 제약사항 때문에 구현이 어려울 것 같습니다.
우선, 개별 HTTP request 처리에 대한 전체 관리가 WAS나 Servlet Container에서 하기 때문에 연결을 끊어진 것을 확인하기가 어려울 것 같습니다. (연결이 끊기 Exception을 Servlet Container가 catch 하거나 무시)
두번째는 일반적으로 transaction 처리는 Service 부분에서 처리하기 때문에 Controller 부분에서 rollback 처리가 어려습니다.
물론 이 부분은 transaction 시작은 Controller에 둘 수도 있지만, 전체적으로 영향을 주기 때문에 관리 등에 문제가 있을 것 같습니다.
아이디어 수준으로 가능한 방법으로는,
HttpServletResponse를 Service 부분에 파라미터로 넘기시고, 최종 종료 전에 PrintWriter나 OutputStream에 데이터를 쓰보는 방법으로 체크해보시는 방법이 있으실 것 같습니다.
실제 데이터를 보내기 전에는 reset을 통해 buffer를 크리어 하셔야 할 것 같구요.
그럼, 즐거운 하루되십시오.
감사합니다.
몇 가지 제약사항 때문에 구현이 어려울 것 같습니다.
우선, 개별 HTTP request 처리에 대한 전체 관리가 WAS나 Servlet Container에서 하기 때문에 연결을 끊어진 것을 확인하기가 어려울 것 같습니다. (연결이 끊기 Exception을 Servlet Container가 catch 하거나 무시)
두번째는 일반적으로 transaction 처리는 Service 부분에서 처리하기 때문에 Controller 부분에서 rollback 처리가 어려습니다.
물론 이 부분은 transaction 시작은 Controller에 둘 수도 있지만, 전체적으로 영향을 주기 때문에 관리 등에 문제가 있을 것 같습니다.
아이디어 수준으로 가능한 방법으로는,
HttpServletResponse를 Service 부분에 파라미터로 넘기시고, 최종 종료 전에 PrintWriter나 OutputStream에 데이터를 쓰보는 방법으로 체크해보시는 방법이 있으실 것 같습니다.
실제 데이터를 보내기 전에는 reset을 통해 buffer를 크리어 하셔야 할 것 같구요.
그럼, 즐거운 하루되십시오.
감사합니다.