我目前正在处理我们设置使用guice-servlet的产品。
对于我们收到的每个请求,我们产生了一堆工作线程,每个线程都会关闭并执行一个"任务"。然后合并这些任务的结果以产生响应。
这是非常普遍/直截了当的,但我以前没想过和Guice结婚。 很遗憾我们已经陷入了必须提前绘制整个图表的情况。
即。我们无法在子线程中执行任何延迟绑定,因为它会尝试使用不存在的请求/会话范围内的东西。
几个相互关联的问题:
1)能够从我们的任务线程中访问请求范围的对象,真的很好。我最初受到ServletScopes.transferRequest()的诱惑(和其一起玩耍),但被以下因素贬低:
因为请求范围的对象通常不是线程安全的,所以 此方法返回的callable不能在不同的线程上运行 直到当前请求范围终止。返回的可调用对象 将阻塞,直到当前线程释放请求范围。
似乎这更像是在一个单独的线程中进行后处理(即在你做出响应之后做一些工作)并且对线程安全的担忧是有效的。
Guicy™处理这个问题的方法是创建一个带有单独模块的子注入器,用于仅限任务的东西,并使用需求/不可变的请求范围内的东西来种子吗?
读回来,看起来有点笨拙/笨拙,所以我可能错了。
2)您可以想象,为我们的工作线程创建自定义任务范围会很不错。
当我错误地与ServletScopes.transferRequest()混淆时,我有一些工作但 CustomScopes页建议不要创建自定义范围:
通常建议用户不要编写自己的自定义作用域 - 内置作用域应该足以满足大多数应用程序的需要。
在我们的任务主题中是否有更好的方法来确定范围?
提前致谢!!