0

我有一个日志记录 bean,我在其中记录数据库调用和 bean 方法调用通过拦截器花费的时间。

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

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

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

4

1 回答 1

0

有多个层:

  1. 一个 CDI 代理,它运行 CDI 拦截器,然后调用 EJB。
  2. 一个 EJB 代理,它安排异步工作并立即返回。
  3. EJB 拦截器,在异步线程上运行。

据推测,您正在使用 CDI 拦截器,它正在测量 EJB 容器安排异步工作所需的时间。如果您改用 EJB 拦截器(即,用 注释 EJB 方法),那么您可以测量执行@Interceptors工作所花费的时间。

于 2013-03-16T20:15:55.323 回答