Я пытаюсь выполнить время выполнения журнала с помощью перехватчика.Область запроса Java EE и асинхронная
@LogPerformance
@Interceptor
public class PerformanceInterceptor {
Время хранится в бланке с запросом. По завершении запроса время записывается в файл журнала.
Когда я изменил несколько из зарегистрированных методов, которые будут асинхронными, журнал для этих операций перестает выводиться.
@Asynchronous
@LogPerformance
public Future<String> getString() {
Я считаю, что новый поток EJB определяет новую область запроса. Я могу регистрировать вывод из перехватчика и видеть объект с областью запроса, но есть два разных адреса, прикрепленных к объектам. Один адрес для потока HTTP и другой адрес для потока EJB.
Есть ли способ разрешить перехватчикам от асинхронных методов писать объект в области запроса HTTP? Есть ли другой способ вернуть данные в родительскую область?
Я попытался вставить EJBContext в перехватчик (как @Resource, так и @Inject). Он не работает при запуске контейнера (отсутствует зависимость). Я считаю, что причиной является перехватчик - это CDI Bean и поэтому не имеет связанного с ним EJBContext. – jake
Я ожидал бы, что жизненный цикл перехватчика, объявленного по методу EJB, будет контролироваться контейнером EJB. –
Можете ли вы включить фрагмент кода, показывающий, как именно вы это сделали. Я не смог получить доступ к сохраненным значениям contextData из @Asynchronous метода с помощью Payara, Wildfly, TomEE и профиля Websphere Liberty. (Даже без использования перехватчика) – bastian