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