写操作
通过使用 com.ibm.websphere.servlet.session.IBMSession 接口中的 sync 方法,您可手动控制何时将修改后的会话数据写出到数据库或另一个 WebSphere® Application Server 实例。手动更新方式、服务 Servlet 的结束方式和基于时间的写频率方式可用于调整会话数据的写频率。
此接口扩展 javax.servlet.http.HttpSession 接口。通过从 Servlet 的 service 方法调用 sync 方法,您将会话中的任何更改发送到外部位置。当选择手动更新作为写频率方式时,仅当应用程序调用 sync 方法时,会话数据更改才写入外部位置。如果未调用 sync 方法,那么在会话对象离开服务器高速缓存时,会话数据更改丢失。当服务 Servlet 结束或基于时间为写频率方式时,无论何时调用 sync 方法,都写出会话数据更改。如果未调用 sync 方法,根据所选的写频率方式,在服务方法结束时或时间间隔基础上写出更改。
IBMSession iSession = (IBMSession) request.getSession();
iSession.setAttribute("name", "Bob");
//force write to external store
iSession.sync( )
如果数据库关闭或在更新会话值时连接有困难,那么 sync 方法在最终创建 BackedHashtable.getConnectionError 错误前总是进行三次尝试。对于每次失败的连接尝试,创建BackedHashtable.StaleConnectionException,并可在 sync 方法中找到此异常。如果数据库在这三次尝试的任何一次中打开,内存中的会话数据则将存留,并落实至数据库。
但是,如果在三次尝试后数据库仍然未打开,那么内存中的会话数据仅在下一次检查会话无效时才存留。会话无效由每五分钟触发的单独线程检查。内存中的数据是一致的,除非会话数据的请求发出给这些事件之间的服务器。例如,如果在五分钟之内发出会话数据请求,那么发送前一次存留的会话数据。
会话不是事务性资源。因为 sync 方法与不同于客户机的线程关联,那么创建的异常不会传播给主线程上运行的客户机。数据的事务完整性可通过企业 Bean 这样的资源进行维护。