В настоящее время я работаю над продуктом, который мы настроили для использования guice-servlet. .
Для каждого запроса, который мы получаем, мы создаем кучу рабочих потоков, каждый из которых отключается и выполняет «задачу». Затем результаты этих задач объединяются для получения ответа.
Это довольно распространено/прямолинейно, но я никогда раньше не пытался жениться на Гайсе. К сожалению, мы оказались в ситуации, когда вам нужно заранее нарисовать весь график.
т. е. мы не можем выполнять какую-либо отложенную привязку в дочернем потоке, так как он попытается использовать материал в области запроса/сеанса, которого там нет.
Пара взаимосвязанных вопросов:
1) Было бы очень приятно иметь доступ к объектам в области запроса из наших потоков задач. Сначала меня соблазнил (и я поиграл) ServletScopes.transferRequest(), но был сдут следующим:
Поскольку объекты в области запроса обычно не являются потокобезопасными, вызываемый объект, возвращаемый этим методом, не должен запускаться в другом потоке, пока текущая область запроса не будет завершена. Возвращенный вызываемый объект будет заблокирован до тех пор, пока текущий поток не освободит область запроса.
Похоже, что это больше для постобработки в отдельном потоке (т.е. выполнить некоторую работу после того, как вы ответили), и опасения по поводу безопасности потоков действительны.
Может ли Guicy™ решить эту проблему, создав дочерний инжектор с отдельным модулем для всего, что связано только с задачами, и заполнив его вещами из области запроса, которые являются обязательными/неизменяемыми?
Читая это назад, это кажется немного неуклюжим/деспотичным, поэтому я, вероятно, ошибаюсь.
2) Как вы понимаете, было бы неплохо создать собственную область задач для наших рабочих потоков.
У меня что-то работало, когда я неправильно возился с ServletScopes.transferRequest()) НО CustomScopes не рекомендует создавать настраиваемые области:
Обычно пользователям не рекомендуется создавать собственные настраиваемые области видимости — встроенных областей должно быть достаточно для большинства приложений.
Есть ли лучший подход для определения области действия в наших потоках задач?
Заранее спасибо!!