【发布时间】:2014-09-28 17:32:27
【问题描述】:
我需要有两个具有相同数据的会话。我怎样才能做到这一点?
我的场景:用户在遍历站点时在会话中积累了一些数据。他们点击一个按钮,现在我启动一个线程来记录我所拥有的。不幸的是,我继承的代码传递了会话 ID 并使用它来访问数据。更不幸的是,此记录需要一些时间,因此用户经常点击其他页面并弄乱我正在记录的数据。
- 用户需要一个可以继续玩的会话
- 我的线程需要一个不会改变的会话
理想情况下,我可以将会话数据复制到两个会话中,每个会话一个。 我真的很想要一个能够以某种方式为我提供这两个会话的解决方案,因为重构代码将是一场噩梦。我意识到这似乎几乎是不可能的。我能想到的最接近的方法是复制数据,使会话无效,为用户重新创建它,然后将无效的会话 ID 传递给线程并希望它没有被清除——这不是我信任的计划。
如果没有其他办法,请提出替代方案。优先考虑重构的速度;否则,整体优雅。
关于实现的更多信息:线程会触发许多请求,包括会话 ID,每个请求都会根据会话中收集的数据生成一个 PDF,该数据由线程合并到主文档中。
【问题讨论】:
-
如果会话中的对象是可变的并且可能被后续用户操作修改,则会话的浅拷贝可能不够。您不能只收集足以让后台任务完成其工作的最少信息集吗?
-
这个线程中的进程需要一个实际的会话而不是包含会话中某些元素的数据结构是没有意义的。
-
你们如何解决使用会话 ID 的请求?
标签: java multithreading jsp session