對於 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 }