Sun GlassFish Communications Server 2.0 版本說明

解決方案

對於 SIP 和 HTTP 階段作業兩者不同的過期時間處理,最好的應付方式是啟動階段作業時使用夠長的 SAS 過期時間,此一過期時間即為應用程式階段作業預期存在 (包括數個 HTTP 請求) 的總時間長度。SAS 使用期限甚至可以設為無限,特別是使用 invalidateWhenReady 語義時,在這個情況下,SipApplicationSession 會在最後的協定子階段作業失效時失效。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 
	}