我正在尝试使用拦截器来记录日志性能。
@LogPerformance
@Interceptor
public class PerformanceInterceptor {
时间存储在请求范围的bean中。请求完成后,时间将写入日志文件。
当我将几个记录的方法更改为异步时,这些操作的日志记录停止输出。
@Asynchronous
@LogPerformance
public Future<String> getString() {
我相信新的EJB线程正在定义一个新的请求范围。我可以从拦截器记录输出并查看请求范围对象,但是有两个不同的地址附加到对象。 http线程的一个地址和EJB线程的不同地址。
有没有办法允许异步方法的拦截器写入http请求范围内的对象?还有另一种方法可以将数据恢复到父范围吗?
答案 0 :(得分:1)
容器会将javax.ejb.EJBContext传播到执行异步方法的线程。
您可以将此EJBContext注入拦截器并通过javax.ejb.EJBContext.getContextData()存储您想要的任何状态(例如您的请求范围内的bean)。