复制线程的会话

时间:2014-08-05 22:15:16

标签: java multithreading jsp session

我需要有两个具有相同数据的会话。我怎么能做到这一点?

我的场景:用户在遍历网站时在会话中累积了一些数据。他们点击一个按钮,现在我开始一个线程来记录我得到的东西。不幸的是,我继承的代码传递会话ID并使用它来访问数据。更不幸的是,这种录制需要一些时间,因此用户经常会打到其他页面并弄乱我录制的数据。

  • 用户需要一个可以继续玩
  • 的会话
  • 我的帖子需要一个不会改变的会话

理想情况下,我能够将会话数据复制到两个会话中,每个会话一个会话。 我真的很喜欢以某种方式给我这两个会话的解决方案,因为重构代码会是一场噩梦。我意识到这几乎是不可能的。我能想到的最接近的是复制数据,使会话无效,为用户重新创建它,然后将无效的会话ID传递给线程,并希望它没有被清除 - 而不是我信任的计划。

如果没有别的办法,建议替代方案。优先考虑的是重构速度;否则,整体优雅。

有关实现的更多信息:线程会根据会话中收集的数据触发许多请求,包括会话ID,每个请求都生成一个PDF,该数据由线程合并到主文档中。 / p>

1 个答案:

答案 0 :(得分:1)

在你的鞋子里,我会在会话中存储一些数据对象。当您需要启动一个线程来处理这些数据时,您可以克隆数据对象,而不是会话本身。当然,你必须编写一些代码来对这个数据对象执行深层复制,但至少你的会话只是一个包装器(通常是会话)。

创建一个数据对象来存储你的线程需要的所有数据有点建立某种“契约”,所以如果任何其他开发人员需要在这个数据对象中添加或删除任何东西,他/她会注意到深层拷贝方法也必须更新(希望如此)。