【发布时间】:2011-11-07 08:04:40
【问题描述】:
我有一个 Spring @Controller。在控制器内部有一个方法,在特定请求进入while循环后,它会检查新数据并仅在找到数据时才中断:
while(System.currentTimeMillis() < end && controllersDataStore.getAutoupdate() == eventAutoUpdate ) {
gridData = (GenericGrid) dsEventLogService.retrieveNewEventGridRows(gridHelper);
if(gridData.getAaData().size()==0){
try {
Thread.sleep(POLLING_INTERVAL);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
break;
}
}
在某些情况下,即使在特定用户操作后未找到数据,我也需要跳出循环。所以我需要从一个新的 HttpRequest 中,来打破之前的 while 循环。
我还需要这个是每个用户的,所以一个用户不能与另一个用户的操作进行交互。
控制器是单例的,因此它在所有会话中都有共同的属性。这意味着我们不能将状态存储在全局属性中,然后在循环内部检查更改以使其中断,因为这不是每个会话的属性。
除了让控制器拥有会话范围之外,还有什么方法可以做到这一点? (我什至不确定它是否会起作用)。
提前谢谢你,如果有任何提示,我将不胜感激。
【问题讨论】:
-
会话范围的控制器是解决这个问题的最简单方法,你为什么不愿意尝试?
-
我很不情愿,因为控制器不应该是会话范围的。我想知道是否有“更好”的解决方案。
-
谁说的?作用域控制器是一件非常有效的事情。
-
因为servlet(控制器)由容器管理,容器只实例化一个servlet实例来处理所有用户的请求。将其设置为会话范围违反了整个概念,不是吗?
-
另外,我找不到关于会话范围控制器的任何信息,这让我相信一定有其他方法可以做到这一点。但话又说回来,也许没有。
标签: java spring controller while-loop session-scope