2012-01-05 66 views
0

我们有一个简单的基于Java的应用程序。在那里,我们在接收来自客户端的createSession()请求时创建会话。然后我们在会话中执行“操作”,最后在接收release()时,我们销毁会话对象。现在我想为应用程序实现会话超时功能。如果会话空闲一段可配置的时间,请将其销毁。我可以创建一个专用线程,在特定时间间隔后唤醒并遍历所有会话对象。基于每个对象上的“lastAccessedTimeStamp”,只要适用,它就会调用release()。还有什么可以做的?这里可以使用的其他API是什么?如何在Java中实现会话超时?

+0

你可以给我们更多精确的应用程序上下文吗?它在应用程序服务器(JavaEE)还是独立的(JavaSE)中损坏? – Riduidel 2012-01-05 09:55:47

+0

这是一个web服务器(apache-tomcat + apache-cxf)。但是,我们正在创建的会话是自定义会话(POJO)。因此,这些POJO的生命周期无法通过web.xml中的会话超时参数进行控制。 – 2012-01-05 10:44:21

回答

1

这是什么类型的应用程序?对于Web应用程序,会话处理(包括超时)由servlet容器自动完成;超时值在web.xml配置文件中设置。

如果你想重新发明所有这些车轮,那么是的,一个单独的线程定期(也许每分钟一次)检查所有会话并释放超时的声音听起来像是一个明智的实现。

+0

此处适用相同的注释:这是一个Web服务器(apache-tomcat + apache-cxf)。但是,我们正在创建的会话是自定义会话(POJO)。因此,这些POJO的生命周期无法通过web.xml中的会话超时参数进行控制。任何可以使用API​​的建议? – 2012-01-05 11:04:16

+1

@Arnab Biswas:当然。 servlet API。你会得到一个成熟的,支持良好的会话实现。如果由于某种原因,你坚持重新发明轮子,你自己 - 但这就是你想要的。 – 2012-01-05 11:12:38

+0

谢谢。是的,我们不能使用Servlet API中定义的会话处理机制。我的问题是如果我的session是basicay POJO,那么可以使用ehat机制来实现超时?任何来自java.util.concurrent包的东西? – 2012-01-05 12:42:08