Java EE请求范围和异步

时间:2016-02-16 20:12:01

标签: java java-ee asynchronous

我正在尝试使用拦截器来记录日志性能。

@LogPerformance
@Interceptor
public class PerformanceInterceptor {

时间存储在请求范围的bean中。请求完成后,时间将写入日志文件。

当我将几个记录的方法更改为异步时,这些操作的日志记录停止输出。

 @Asynchronous
 @LogPerformance
 public Future<String> getString()  {

我相信新的EJB线程正在定义一个新的请求范围。我可以从拦截器记录输出并查看请求范围对象,但是有两个不同的地址附加到对象。 http线程的一个地址和EJB线程的不同地址。

有没有办法允许异步方法的拦截器写入http请求范围内的对象?还有另一种方法可以将数据恢复到父范围吗?

1 个答案:

答案 0 :(得分:1)

容器会将javax.ejb.EJBContext传播到执行异步方法的线程。

您可以将此EJBContext注入拦截器并通过javax.ejb.EJBContext.getContextData()存储您想要的任何状态(例如您的请求范围内的bean)。