有没有一种很好的方法可以从子线程访问Guice Request范围内的项目,并将这些内容放在本地范围内?

时间:2016-05-20 07:28:54

标签: java guice guice-servlet

我目前正在处理我们设置使用guice-servlet的产品。

对于我们收到的每个请求,我们产生了一堆工作线程,每个线程都会关闭并执行一个"任务"。然后合并这些任务的结果以产生响应。

这是非常普遍/直截了当的,但我以前没想过和Guice结婚。 很遗憾我们已经陷入了必须提前绘制整个图表的情况。

即。我们无法在子线程中执行任何延迟绑定,因为它会尝试使用不存在的请求/会话范围内的东西。

几个相互关联的问题:

1)能够从我们的任务线程中访问请求范围的对象,真的很好。我最初受到ServletScopes.transferRequest()的诱惑(和其一起玩耍),但被以下因素贬低:

  

因为请求范围的对象通常不是线程安全的,所以   此方法返回的callable不能在不同的线程上运行   直到当前请求范围终止。返回的可调用对象   将阻塞,直到当前线程释放请求范围。

似乎这更像是在一个单独的线程中进行后处理(即在你做出响应之后做一些工作)并且对线程安全的担忧是有效的。

Guicy™处理这个问题的方法是创建一个带有单独模块的子注入器,用于仅限任务的东西,并使用需求/不可变的请求范围内的东西来种子吗?

读回来,看起来有点笨拙/笨拙,所以我可能错了。

2)您可以想象,为我们的工作线程创建自定义任务范围会很不错。

当我错误地ServletScopes.transferRequest()混淆时,我有一些工作 CustomScopes页建议不要创建自定义范围:

  

通常建议用户不要编写自己的自定义作用域 - 内置作用域应该足以满足大多数应用程序的需要。

在我们的任务主题中是否有更好的方法来确定范围?

提前致谢!!

0 个答案:

没有答案