JSR 289规范相对于JSR116的改变:
(1)Servlet Life Cycle Listener——用于去除在servlet初始化过程中的任何race可能,同时定义了servlet初始化与应用部署的关系。(2.1.1 Servlet Life Cycle Listener)
(2)明确了在不同情况下初始请求的概念。(附录B)
(3)参数化的接口——通过提供简单的存取器和改变对象属性的方法,支持可带参数的SIP头。(4.1.1 The Parameterable Interface)
(4)增加Contact头参数,设置user部分。(4.1.3 The Contact Header Field)
(5)SipServletMessage committed状态的改变。(5.2 Implicit Transaction State)
(6)由于servlet规范2.4版本的改进,SipServletResponse.setCharacterEncoding()不会抛出UnsupportedEncodingException。
(7)允许容器移除自己的Route头,并使得应用可以使用pop出来的Route头。(5.6.3 Popped Route Header)
(8)SipServletMessage的生命周期和访问性的改变。(5.8 Accessibility of SIPServletMessage)
(9)当客户端没有指定preferred locale时,SipServletMessage.getAcceptLanguage()和 SipServletMessage.getAcceptLanguages()的行为已经改变。这些方法的调用者可以区分preferred locale是否指定。当preferred locale未指定时, SipServletMessage.getAcceptLanguage()返回 null,SipServletMessage.getAcceptLanguages()返回空的iterator。(5.9 Indicating Preferred Language)
(10)SipServletApplication的新方法getSipSession(Id),用于按Id访问SipSession。(6.1.1 Protocol Sessions)
getSipSession(java.lang.String id) 根据给定的id返回一个特定的SIP Session
getSession(java.lang.String id, Protocol protocol) 根据给定的id返回指定协议类型的子会话
(11)增加了使SipApplicationSession无效的新机制,称为Invalidate When Ready机制。(6.1.2.2.2 Invalidate When Ready Mechanism)
(12)增加了使SipSession无效的新机制,称为Invalidate When Ready机制。(6.2.4.1.2 Invalidate When Ready Mechanism)
(13)分布式容器,支持可序列化对象和SipServletMessage的实例作为属性。同时明晰了序列化结束的区间。(6.4.3 Distributed Environment)
(14)对于SIP Servlet容器来讲,.sar文件和.war文件格式等效。(7.7 Servlet Application Archive File)
(15)SipApplicationSession属性的新的监听者。(8.1 SIP Servlet Event Types and Listener Interfaces)
(16)SipApplicationSession激活状态的新的监听者。(8.1 SIP Servlet Event Types and Listener Interfaces)
(17)SipServlet生命周期的新的监听者,用于接受初始化回调函数servletInitialized()。(8.1 SIP Servlet Event Types and Listener Interfaces)
(18)SipSession属性监听者可以是部署描述符中定义的任何类。(8.1 SIP Servlet Event Types and Listener Interfaces)
(19)扩展Proxy对象,支持RFC3327有关Path头的定义。(10.5 Path Header and Path Parameters)
(20)不支持无状态事务的proxy。(10.1 Parameters)
(21)支持显式Proxy branch创建和维护。(10.2.1 Proxy Branches)
(22)对于串行和并行proxy都适用的proxyTimeout参数,不支持sequential-search-timeout参数(不是特征),对于不同branches重写proxyTimeout值可选。(10.1 Parameters)
(23)串行搜索超时行为的改变。(10.2.4.3 Sequential Search Timeout)
(24)声明:当在send()返回后消息发送失败时,发送503错误响应给servlet。(11.1.4 Sending a Request as a UAC)
(25)事务超时处理的规范。(11.1.6 Transaction Timeout)
(26)去掉无状态的record route。Record route应用只能是有状态的。
(27)提供createPrack()方法,支持PRACK请求的创建。(11.1.8 Sending PRACK和5.7.1 Reliable Provisional Responses)
(28)支持merged请求。(fixlink 11.3)
(29)引入B2BUA的帮助类。B2buaHelper类简要概述B2BUA应用的编写,包括Session连接、Session的请求访问和Session clone等。(12 Back To Back User Agents)
(30)SIP/HTTP和SIP/Java EE convergence。规范中引入的特征将SIP Servlet和其他Java EE组件联系起来。(13 Converged Container and Applications)
(31)明确定义了一个聚合应用的范围和特征。(13.1 Converged Application)
(32)支持多宿主机。(14.2 Multihomed Host Support)
(33)应用选择和组合模型的详细规范。(15 Application Selection And Composition Model)
(34)在应用组合情况下的encodeURI机制。(15.11.1 Session Targeting and Application Selection)
(35)基于Session Key的session targeting机制。(15.11.2 Session Key Based Targeting Mechanism)
(36)在应用中引入一个指定的”main” servlet。(16.2 Servlet Selection)
(37)映射元素中有多个servlet情况下,只能触发一个servlet。(16.2 Servlet Selection)
(38)除映射规则之外的servlet触发机制的改进。(16.2 Servlet Selection)
(39)应用初始的请求的认证机制。(17.10 Authentication of Servlet Initiated Requests)
(40)Java 5.(18.1 Java 5)
(41)SIP Servlet容器的annotation。(18.2 Annotations and Resource Injection)
(42)从一个SipApplicationSession中获取应用名称的新的方法。(7.6 Application Names)