fix Transactional handing
This commit is contained in:
21
pom.xml
21
pom.xml
@@ -72,9 +72,26 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.inteligr8.alfresco</groupId>
|
<groupId>com.inteligr8.alfresco</groupId>
|
||||||
<artifactId>aspectj-platform-module</artifactId>
|
<artifactId>aspectj-platform-module</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1</version>
|
||||||
<type>amp</type>
|
<type>amp</type>
|
||||||
<scope>provided</scope>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- AMP resources are included in the WAR, not the extension directory; this makes aspectjweaver available to javaagent -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.aspectj</groupId>
|
||||||
|
<artifactId>aspectjweaver</artifactId>
|
||||||
|
<version>${aspectj.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Removes startup warning regarding annotations that aren't annotations -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.transaction</groupId>
|
||||||
|
<artifactId>jakarta.transaction-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-tx</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@@ -19,9 +19,18 @@ public class TransactionalWrapper {
|
|||||||
this.jtxl = txl;
|
this.jtxl = txl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransactionalWrapper(Method method) {
|
public static TransactionalWrapper wrap(Method method) {
|
||||||
this.stxl = method.getAnnotation(Transactional.class);
|
Transactional stxl = method.getAnnotation(Transactional.class);
|
||||||
this.jtxl = method.getAnnotation(javax.transaction.Transactional.class);
|
javax.transaction.Transactional jtxl = method.getAnnotation(javax.transaction.Transactional.class);
|
||||||
|
if (stxl == null && jtxl == null) {
|
||||||
|
return null;
|
||||||
|
} else if (stxl != null) {
|
||||||
|
return new TransactionalWrapper(stxl);
|
||||||
|
} else if (jtxl != null) {
|
||||||
|
return new TransactionalWrapper(jtxl);
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException("This should never happen");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isReadOnly() {
|
public boolean isReadOnly() {
|
||||||
|
@@ -46,20 +46,24 @@ public class RetryingTransactionAspect {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TransactionService txService;
|
private TransactionService txService;
|
||||||
|
|
||||||
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional || javax.transaction.Transactional) && execution(* *(..))")
|
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional) && execution(* *(..))")
|
||||||
public void isTransactionalAnnotated() {
|
public void isTransactionalAnnotated() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Pointcut("@annotation(javax.transaction.Transactional) && execution(* *(..))")
|
||||||
|
public void isJtaTransactionalAnnotated() {
|
||||||
|
}
|
||||||
|
|
||||||
@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))")
|
@Pointcut("@annotation(com.inteligr8.alfresco.annotations.TransactionalRetryable) && execution(* *(..))")
|
||||||
public void isTransactionalRetryableAnnotated() {
|
public void isTransactionalRetryableAnnotated() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Around("isTransactionalAnnotated() || isTransactionalRetryableAnnotated()")
|
@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);
|
||||||
|
|
||||||
Method method = this.getMethod(joinPoint);
|
Method method = this.getMethod(joinPoint);
|
||||||
TransactionalWrapper txl = new TransactionalWrapper(method);
|
TransactionalWrapper txl = TransactionalWrapper.wrap(method);
|
||||||
TransactionalRetryable txtry = method.getAnnotation(TransactionalRetryable.class);
|
TransactionalRetryable txtry = method.getAnnotation(TransactionalRetryable.class);
|
||||||
|
|
||||||
if (this.doCreateNewTxContext(txl) || this.isReadStateChange(txl)) {
|
if (this.doCreateNewTxContext(txl) || this.isReadStateChange(txl)) {
|
||||||
|
Reference in New Issue
Block a user