【发布时间】:2015-11-15 14:28:36
【问题描述】:
如何捕获拦截器 CDI 的返回?
我创建了这个:
@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
private static final long serialVersionUID = 1L;
private @Inject EntityManager manager;
@AroundInvoke
public Object invoke(InvocationContext context) throws Exception {
System.out.println("Interceptor on!");
EntityTransaction trx = manager.getTransaction();
Object obj = null;
boolean criador = false;
try {
if (!trx.isActive()) {
System.out.println("Iniciando transação ...");
trx.begin();
criador = true;
}
obj = context.proceed();
if (trx != null && trx.isActive() && criador) {
System.out.println("Comitando ...");
trx.commit();
}
System.out.println("Finalizando interceptor ...");
} catch (Exception e) {
System.out.println("ERRO ENCONTRADO !");
System.out.println(e.getMessage());
if (trx != null && trx.isActive() && criador) {
System.out.println("Rollback ...");
trx.rollback();
}
System.out.println("Finalizando interceptor ...");
return obj;
}
return obj;
}
}
我想知道事务是提交还是回滚。
这是主要的方法:
@Override
@Transactional
public boolean salvar(Funcionario funcionario) {
return funcionarioDAOImpl.salvar(funcionario);
}
我该怎么做?我不使用弹簧。
【问题讨论】: