EJB拦截器和事务生命周期或如何拦截提交/失败事件?

问题描述 投票:2回答:2

我有一个EJB拦截器,我遵循Adam Bien建议的BCE模式,也就是说,边界上的所有EJB调用都启动并完成一个事务,这意味着没有嵌套的EJB调用(虽然可能有嵌套的CDI注入Bean调用,但是那些应该在ejb Boundary开始的同一个交易中)。

所以在那些ejb Boundaries中我有一个拦截器,我想拦截或者知道在EJB的方法调用之后是否已经提交了transacction? (也就是说,如果涉及到EntitManager将COMMIT sql调用发送到DB并且返回成功)

  1. 我会从拦截器中获取该信息吗?
  2. 如果没有,我如何收到成功提交或失败的交易的通知?

注意:当然,如果我是EJB的客户端并且我正在调用该方法,那么在方法调用之后我知道事务发生了什么,但是我感兴趣的是在客户端收到EJB的响应之前拦截它。

@AroundInvoke
public Object logMethodEntry(InvocationContext ctx) throws Exception {
    Object proceed = null;
    try {
        proceed = ctx.proceed();
        // is the transacction finished/commited already?
        // is it still open ?
        return proceed;
    } catch (Exception e) {
        throw e;
    }
}

[更新]:我接受了一个很好的答案,但问题是Java EE中没有办法接收已经被通过的事务事件。所以无论好的答案如何,遗憾的是,无法在Java EE中通知服务器内部已完成的事务,当然,如果您是客户端调用者,那么您确定知道事务已提交或回滚...

java java-ee ejb cdi
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.