Доступ к компонентам с ограниченной областью действия в многопоточном веб-приложении

Сценарий: У нас есть управляемое Spring веб-приложение, которое работает внутри Websphere . (Spring 3.0.x, WAS 7) Веб-приложение использует диспетчер работ Websphere через Spring WorkManagerTaskExecutor (сконфигурированный с размером пула потоков 10) для выполнения ресурсоемких операций чтения базы данных. , поступает запрос, чтобы сгенерировать, скажем, 10 различных документов.Для генерации документов необходимы только чтения db для сбора / обработки данных. Таким образом, мы в основном создаем 10 потоков для обработки 10 документов и в конце собираем 10 документов возвращается от 10 рабочих процессов, объединяет их и записывает один большой ответ клиенту. Мы определили, что пока 10 потоков собирают / обрабатывают данные, выполняется множество похожих вызовов db. Итак, мы пришли к следующему: создать Аспект вокруг наиболее часто выполняемых методов БД чтобы кэшировать ответ. Аспект настроен как одноэлементный, и используемый аспект автоматически подключается к аспекту с областью действия, установленной на область запроса, так что каждый запрос имеет свой собственный кеш.

Проблема: Проблема с этим подходом заключается в том, что когда потоки выполняют свои вызовы базы данных, а аспект - это прерывания, мы получаем java.lang.IllegalStateException: Запрос, связанный с потоком, не найден исключение.Я понимаю, что это абсолютно верно, поскольку потоки выполняются вне контекста запроса.

Есть ли способ обойти эту проблему? Можно ли применить аспект с кешем с ограниченным объемом запроса к методам, вызываемым этими потоками?

8
задан Bozho 4 October 2011 в 13:13
поделиться