Sun GlassFish Communications Server 2.0 릴리스 노트

SIP 세션과 HTTP 세션이 동일한 세션 만료 시간 모델을 적용하지 않음(이슈 번호 1180)

설명

SIP 세션의 세션 만료 모델이 HTTP 만료 시간 논리와 다릅니다. HTTP에서는 해당 HTTP 세션에서 새 HTTP 요청을 수신할 때마다 세션이 자동으로 연장되어 응용 프로그램의 제어를 벗어납니다.

반면, SIP 세션에서는 응용 프로그램이 SIP 컨테이너의 승인에 따라 SipApplicationSession(SAS) 기간으로 통제됩니다. 응용 프로그램은 setExpires 메소드를 사용하여 SAS의 만료 시기를 나타낼 수 있습니다. setExpiressetExpires 메소드가 호출되는 시기를 기준으로 만료 시간을 정의합니다. 컨테이너는 setExpires에 표시된 기간을 수정, 거부 또는 승인할 수 있습니다. 세션이 무효화되지 않으면 setExpires로 정의한 시간에 sessionExpired 콜백이 수행됩니다. 이 콜백에서 응용 프로그램은 새 setExpires를 호출하여 SAS의 기간을 연장하고 컨테이너에 의한 수정, 거부 또는 승인을 따를 수 있습니다.

이러한 이유로, HTTP 세션에서 SipApplicationSession(SAS)과 동일한 만료 시간으로 시작하는 수렴형 응용 프로그램은 HTTP 세션에서 새 요청을 수신한 경우 HTTP 세션 전에 SAS 시간이 초과되는 것으로 나타납니다.

해결 방법

SIP 세션과 HTTP 세션의 서로 다른 만료 시간 처리 문제를 해결하는 가장 좋은 방법은 SAS 만료 시간을 충분히 하여 시작하는 것입니다. 여러 HTTP 요청을 포함하여 응용 프로그램 세션이 활성 상태로 있을 시간을 충분히 하십시오. 특히 마지막 프로토콜 하위 세션이 무효화될 때 SipApplicationSession이 무효화되는 invalidateWhenReady 어휘가 사용되는 경우 SAS 수명을 무한으로 설정할 수도 있습니다. SAS에 대한 초기 만료 시간은 배포 설명자에서 구성할 수 있습니다.

최대 총 기간을 미리 추정할 수 있으면, SAS가 만료될 때 SIP 세션과 HTTP 세션을 모두 무효화하는 것이 적절하므로, 추가 코드는 필요 없습니다. 최대 기간을 미리 추정할 수 없으면, 아래 코드 조각에 나타난 대로, SipApplicationSession이 만료될 때 이를 연장할 수 있습니다.

SipApplicationSessionListener 구현 시 다음과 같은 작업을 수행할 수 있습니다.

public void sessionExpired(SipApplicationSessionEvent sasEvent) {
                // check if the SAS needs to be extended first, if so:
		int granted = sasEvent.getApplicationSession().setExpires(2);
		if (granted <= 0) {
			System.out.println("extension rejected");
		} else if (granted < 2) {
			System.out.println("extension granted with lower value " + granted);
		} // else allowed 
	}