2013-04-21 39 views
0

我想超时添加到GWT会议,通过使用下面的代码来检查会话存活:getLastAccessedTime()在GWT会议返回0

public boolean isSessionAlive() { 
    return System.currentTimeMillis() - getThreadLocalRequest().getSession() 
.getLastAccessedTime() < timeout; 
} 

我根据很多例子的代码我在网络上看到GWT会话,如this

上述代码在本地Web服务器上运行时效果很好,但是在将项目部署到App Engine之后,它不会。在App Engine上总是返回0:

getThreadLocalRequest().getSession().getLastAccessedTime() 

据我所知,上次访问的时间在每次RPC调用时更新。 我做了几个调用,但是这个值仍然为零,返回不正确的结果。

有谁知道如何解决这个问题?

回答

0

我已经找到了解决办法。添加在战争/ WEB-INF/web.xml中下面的代码将导致会话在30分钟后过期:

<!-- timeout in minutes --> 
<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 

参考:Session Timeouts with GWT RPC calls

3

事情会改变部署在GAE后

就在今天出席了由@roman伊拉尼应用程序引擎的会话。

记住,App Engine是一个分布式体系结构,以便从Java EE一个区别是,你永远不会请求处理为先前的请求期间保证相同的应用服务器实例。在memcache中正确序列化对象时,由于内存不共享,每次都必须调用setAttribute()。

Clear cut picture here to handle the session

+0

我明白了你的意思,但有什么解决方法? LastAccessedTime应该由AppEngine而不是程序员自动更新,不是吗? – alexgo91 2013-04-23 09:32:45

+0

@ alexgo91因为我刚刚开始我的应用程序引擎的应用程序后,我参加了会议,我自己一个noob here.The文档可以在该https://developers.google.com/appengine/docs/java/runtime#The_Request_Timer – 2013-04-23 09:37:16