Мы используем Java веб-приложение поверх Tomcat 8. Поток управления для любого API в веб-приложении:
Сервлет -> Уровень службы -> Уровень DAO / DB
Теперь мы хотим, чтобы некоторая информация о выполнении запроса была заполнена на уровне Service / DAO, которая будет использоваться на уровне Servlet (это предусмотрено проектом и поэтому не может быть изменена).
One способ сделать это - создать ThreadLocal в сервлете и передать его всем слоям, но это требует изменения сигнатуры метода и, следовательно, является довольно навязчивым изменением для нашего приложения.
Другим способом было бы реализовать что-то вроде threadLocal путем хранение карты c, где ключ - это идентификатор потока, а значение - список. Любой слой может записать / добавить на карту этот идентификатор потока и, в конце запроса, прочитать его верхним слоем.
Есть ли другие способы сделать это?
Редактировать 1 - Больше информации о настройке
Верхний уровень имеет перехватчик регулирования, который должен знать 2 вещи на запрос, который заполняется нижестоящим уровнем:
- потребляемые операции (например, IOPS DynamoDB) et c), который известен уровню DAO.
- был ли обработан запрос.
Эта информация обновляется в модуле регулирования token bucket
.