我正在写一些建议,我希望在获得建议之前提交事务。它似乎适用于Save和Delete,但是当我更新时,它会通过建议运行,然后抛出异常。
try {
retVal = pjp.proceed();
} catch (Exception e) {
PSPSFaultException fault = new PSPSFaultException(e);
pmLog.error(ERR_MSG, fault);
throw fault;
}
正如你在这里看到的,我试图在我们自己的运行时异常中包装异常。
我试过订购:
<tx:annotation-driven transaction-manager="txManager" order="1"/>
和
@Around( "execution(* blah.blah.PersistenceProvider.*(..))")
@Order(value=2)
public Object persistenceWrapper(ProceedingJoinPoint pjp) throws Throwable {
但这似乎没有对堆栈或功能产生任何影响。
@Transactional(propagation = Propagation.REQUIRED)
public class PersistenceProviderImpl extends HibernateDaoSupport implements PersistenceProvider {
@Override
public void update(Object o) {
this.getHibernateTemplate().update(o);
}
有没有办法在建议之前获取更新?这些交易都是在dao级别......
答案 0 :(得分:8)
好的,所以你做错了两件事:
@Order(1)
注释放在整个@Aspect
类前面(很奇怪,但它对我有用)这样的事情:
...
<tx:annotation-driven transaction-manager="txManager" order="200"/>
...
@Order(1)
@Aspect
public class MyAspect {
...
答案 1 :(得分:1)
就我而言,上述建议无效。我正在使用编译时编织Maven,所以这可能是原因。
我的目标是在事务完成后处理数据库异常并将它们包装到另一个异常中。
我必须包含在其中一个Aspect文件中(我想哪一个无关紧要):
@DeclarePrecedence(value = "*..*TransactionException*, org.springframework.transaction.aspectj.AbstractTransactionAspect, *..*Logging*, *")