fix RetryingTransactionAspect

This commit is contained in:
Brian Long 2024-11-14 11:16:28 -05:00
parent fd8e1535d5
commit a07079f17d
6 changed files with 60 additions and 15 deletions

View File

@ -9,9 +9,6 @@ import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.transaction.TransactionService;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.DeclarePrecedence;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -41,7 +38,6 @@ import com.inteligr8.alfresco.annotations.util.TransactionalAnnotationAdapter;
* @see org.springframework.transaction.annotation.Transactional * @see org.springframework.transaction.annotation.Transactional
* @see com.inteligr8.alfresco.annotations.TransactionalRetryable * @see com.inteligr8.alfresco.annotations.TransactionalRetryable
*/ */
@DeclarePrecedence("com.inteligr8.alfresco.annotations.aspect.AuthorizedAspect, com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect")
public abstract class AbstractRetryingTransactionAspect { public abstract class AbstractRetryingTransactionAspect {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());
@ -54,17 +50,24 @@ public abstract class AbstractRetryingTransactionAspect {
public abstract String getJtaInterfaceName(); public abstract String getJtaInterfaceName();
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && execution(* *(..))") /**
public void isTransactionalAnnotated() { * A @Pointcunt annotation is not recognized in super classes.
} */
//@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && execution(* *(..))")
public abstract void isTransactionalAnnotated();
public abstract void isJtaTransactionalAnnotated(); public abstract void isJtaTransactionalAnnotated();
@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))") /**
public void isTransactionalRetryableAnnotated() { * A @Pointcunt annotation is not recognized in super classes.
} */
//@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))")
@Around("isTransactionalAnnotated() || isJtaTransactionalAnnotated() || isTransactionalRetryableAnnotated()") public abstract void isTransactionalRetryableAnnotated();
/**
* An @Around annotation is not recognized in super classes.
*/
//@Around("isTransactionalAnnotated() || isJtaTransactionalAnnotated() || isTransactionalRetryableAnnotated()")
public Object retryingTransactional(ProceedingJoinPoint joinPoint) throws Throwable { public Object retryingTransactional(ProceedingJoinPoint joinPoint) throws Throwable {
this.logger.trace("retryingTransactional({})", joinPoint); this.logger.trace("retryingTransactional({})", joinPoint);

View File

@ -13,7 +13,5 @@
<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeTypeAspect" /> <aspect name="com.inteligr8.alfresco.annotations.aspect.NodeTypeAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.NodeAspectAspect" /> <aspect name="com.inteligr8.alfresco.annotations.aspect.NodeAspectAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.ChildIsPrimaryAspect" /> <aspect name="com.inteligr8.alfresco.annotations.aspect.ChildIsPrimaryAspect" />
<aspect name="com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect" />
</aspects> </aspects>
</aspectj> </aspectj>

View File

@ -1,6 +1,9 @@
package com.inteligr8.alfresco.annotations.aspect; package com.inteligr8.alfresco.annotations.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
@ -9,6 +12,7 @@ import jakarta.transaction.Transactional;
* @see jakarta.transaction.Transactional * @see jakarta.transaction.Transactional
*/ */
@Aspect @Aspect
@DeclarePrecedence("com.inteligr8.alfresco.annotations.aspect.AuthorizedAspect, com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect")
public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect { public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect {
@Override @Override
@ -16,8 +20,21 @@ public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect
return Transactional.class.getName(); return Transactional.class.getName();
} }
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && execution(* *(..))")
public void isTransactionalAnnotated() {
}
@Pointcut("@annotation(jakarta.transaction.Transactional) && execution(* *(..))") @Pointcut("@annotation(jakarta.transaction.Transactional) && execution(* *(..))")
public void isJtaTransactionalAnnotated() { public void isJtaTransactionalAnnotated() {
} }
@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))")
public void isTransactionalRetryableAnnotated() {
}
@Around("isTransactionalAnnotated() || isJtaTransactionalAnnotated() || isTransactionalRetryableAnnotated()")
public Object retryingTransactional(ProceedingJoinPoint joinPoint) throws Throwable {
return super.retryingTransactional(joinPoint);
}
} }

View File

@ -0,0 +1,5 @@
<aspectj>
<aspects>
<aspect name="com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect" />
</aspects>
</aspectj>

View File

@ -1,12 +1,16 @@
package com.inteligr8.alfresco.annotations.aspect; package com.inteligr8.alfresco.annotations.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
/** /**
* @see javax.transaction.Transactional * @see javax.transaction.Transactional
*/ */
@Aspect @Aspect
@DeclarePrecedence("com.inteligr8.alfresco.annotations.aspect.AuthorizedAspect, com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect")
public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect { public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect {
@Override @Override
@ -14,8 +18,21 @@ public class RetryingTransactionAspect extends AbstractRetryingTransactionAspect
return javax.transaction.Transactional.class.getName(); return javax.transaction.Transactional.class.getName();
} }
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && execution(* *(..))")
public void isTransactionalAnnotated() {
}
@Pointcut("@annotation(javax.transaction.Transactional) && execution(* *(..))") @Pointcut("@annotation(javax.transaction.Transactional) && execution(* *(..))")
public void isJtaTransactionalAnnotated() { public void isJtaTransactionalAnnotated() {
} }
@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))")
public void isTransactionalRetryableAnnotated() {
}
@Around("isTransactionalAnnotated() || isJtaTransactionalAnnotated() || isTransactionalRetryableAnnotated()")
public Object retryingTransactional(ProceedingJoinPoint joinPoint) throws Throwable {
return super.retryingTransactional(joinPoint);
}
} }

View File

@ -0,0 +1,5 @@
<aspectj>
<aspects>
<aspect name="com.inteligr8.alfresco.annotations.aspect.RetryingTransactionAspect" />
</aspects>
</aspectj>