我可以将@Transactional标签应用于方面建议吗?我试图在使用方面的事务中将所有调用包装到服务层(com.mycompany.app.myapp.service。*)。我的方面正在拦截对服务层的调用,但我无法弄清楚如何启动一个事务。我以为我可以应用@Transactional标签,因为我已经有了标签,它会选择它并开始交易。我错过了什么?@交易方面的建议可能吗?
XML配置:
<bean id="systemArchitectureAspect" class="com.mycompany.app.myapp.aspect.SystemArchitecture"/>
<bean id="transactionAspect" class="com.mycompany.app.myapp.aspect.MyAspect"/>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="AtomikosTransactionManager" />
<property name="userTransaction" ref="AtomikosUserTransaction" />
</bean>
<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<property name="forceShutdown" value="false" />
</bean>
<bean id="AtomikosUserTransaction"
class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="10" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
方面W /切入点:
package com.mycompany.app.myapp.aspect;
@Aspect
public class SystemArchitecture {
@Pointcut("execution(* com.mycompany.app.myapp.service..*.*(..))")
public void inServiceLayer() {};
@Pointcut("execution(* com.mycompany.data..*.*(..))")
public void inDataAccessLayer() {};
}
我想申请我的切入点建议:
package com.mycompany.app.myapp.aspect;
@Aspect
public class TransactionAspect {
@Transactional
@Around("com.mycompany.app.myapp.aspect.SystemArchitecture.inServiceLayer()")
public Object interceptServiceLayer(ProceedingJoinPoint pjp) throws Throwable
{
return pjp.proceed();
}
}
对不起,对于最近的回复,你给了我提示,我一直在用它来完成项目。使用@Transactional注解是最后一次希望得到它的努力。我不应该将它复制到示例代码中。谢谢您的帮助! – robgmills 2011-05-04 22:07:55