带有异步调用的RequestScoped Logging bean

时间:2013-03-13 20:21:19

标签: glassfish-3 ejb-3.1

我有一个日志记录bean,我可以通过拦截器记录数据库调用和bean方法调用的持续时间。

我有一个调用两个@Asynchronous方法的bean。这两个@Asynchronous方法调用数据库并被截获。

当日志记录bean登录时,似乎数据库已经占用了0毫秒,这是不对的。当我使用这个日志bean和所有没有@Asynchronous调用的拦截器时,一切正常。

我正在使用glassfish 3.1.2.2。 doc http://glassfish.java.net/nonav/docs/v3/api/javax/enterprise/context/RequestScoped.html说“请求上下文被销毁:异步观察者通知完成后,”这是否意味着当方法完成时,我的@Asynchronous方法中的日志bean实例被销毁了?我可以用什么来实现我的目标?

1 个答案:

答案 0 :(得分:0)

有多个层次:

  1. CDI代理,它运行CDI拦截器,然后调用EJB。
  2. EJB代理,用于调度异步工作并立即返回。
  3. EJB拦截器,在异步线程上运行。
  4. 据推测,您正在使用CDI拦截器,它正在测量EJB容器计划异步工作所需的时间。如果切换到使用EJB拦截器(即使用@Interceptors注释EJB方法),那么您可以测量执行工作所花费的时间。