openxava在Threadlocal变量中保存会话范围数据

时间:2012-12-20 02:41:47

标签: java openxava

我的openxava应用程序需要在很多地方使用一些会话作用域数据,即用户的当前时间/时区。 Openxava使用ThreadLocal变量来保留特定会话的当前登录用户信息(Check OX source org.openxava.util.Users)。它开箱即用。我也跟着一样,但我得到了确定性的结果。有段时间它会有效地给出错误的结果。我不明白它的行为。我在哪里弄错了。根据我对ThreadLocal变量的理解,这两种情况都不应该起作用。 OX如何保证线程和会话之间的一对一映射。请帮助我

1 个答案:

答案 0 :(得分:0)

  

OX如何保证线程和会话之间的一对一映射

此类映射不存在。当ThreadLocal变量附加到线程时,会话对象对整个用户会话是活动的。 从模型层(实体)使用会话状态不是一个好主意,因为该模型可以用于其他视图,应用程序,Web应用程序,批处理等,因此您不能依赖会话状态。

因此,您首先应该选择从控制器层(操作)获取会话数据并将其分配给enties。但是,如果您确实要将会话数据从控制器移动到模型(或应用程序的任何其他部分),则可以使用ThreadLocal,但是您在此变量中设置的值仅在该特定请求中有效,因此您必须在每个请求中从会话移动到ThreadLocal var