This is an automated email from the ASF dual-hosted git repository.

jimin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 8bd23f338e optimize: optimize compatible module pom.xml (#6585)
8bd23f338e is described below

commit 8bd23f338ef91729036e0b21856b1802a2f8a567
Author: jimin <[email protected]>
AuthorDate: Tue May 28 15:44:24 2024 +0800

    optimize: optimize compatible module pom.xml (#6585)
---
 changes/en-us/2.x.md                               |   1 +
 changes/zh-cn/2.x.md                               |   1 +
 compatible/pom.xml                                 |  11 +-
 .../seata/discovery/registry/RegistryProvider.java |   2 +-
 .../seata/discovery/registry/RegistryService.java  |   4 +-
 .../server/ServerTransactionInterceptor.java       |   5 +-
 .../http/JakartaSeataWebMvcConfigurer.java         |   4 +-
 .../JakartaTransactionPropagationInterceptor.java  |   5 +-
 .../integration/http/SeataWebMvcConfigurer.java    |   4 +-
 .../GlobalTransactionalInterceptorHandler.java     |  27 ++--
 .../GlobalTransactionalInterceptorParser.java      |   5 +-
 .../saga/statelang/domain/ExecutionStatus.java     |   3 +-
 .../statelang/domain/impl/StateInstanceImpl.java   |   7 +-
 .../io/seata/tm/api/DefaultFailureHandlerImpl.java | 166 +++++++++++----------
 14 files changed, 133 insertions(+), 112 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 5480ee56e5..c8634265e7 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -145,6 +145,7 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#6578](https://github.com/apache/incubator-seata/pull/6578)] registry.conf 
supplemented raft configuration
 - [[#6576](https://github.com/apache/incubator-seata/pull/6576)] remove oracle 
datatype parser
 - [[#6583](https://github.com/apache/incubator-seata/pull/6583)] optimize the 
default compilation to be independent of the Git Env
+- [[#6585](https://github.com/apache/incubator-seata/pull/6585)] optimize 
compatible module pom.xml
 
 ### security:
 - [[#6069](https://github.com/apache/incubator-seata/pull/6069)] Upgrade Guava 
dependencies to fix security vulnerabilities
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 5ed10981c3..e54796314a 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -144,6 +144,7 @@
 - [[#6578](https://github.com/apache/incubator-seata/pull/6578)] registry.conf 
补充raft配置
 - [[#6576](https://github.com/apache/incubator-seata/pull/6576)] 移除 oracle 
数据类型序列化扩展
 - [[#6583](https://github.com/apache/incubator-seata/pull/6583)] 优化默认编译不依赖 Git 
环境
+- [[#6585](https://github.com/apache/incubator-seata/pull/6585)] 优化 compatible 
模块的配置
 
 ### security:
 - [[#6069](https://github.com/apache/incubator-seata/pull/6069)] 
升级Guava依赖版本,修复安全漏洞
diff --git a/compatible/pom.xml b/compatible/pom.xml
index bcfbbbd769..c1f19f9e40 100644
--- a/compatible/pom.xml
+++ b/compatible/pom.xml
@@ -20,21 +20,24 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <groupId>org.apache.seata</groupId>
+        <artifactId>seata-parent</artifactId>
+        <version>${revision}</version>
+    </parent>
     <groupId>io.seata</groupId>
-    <version>2.1.0-SNAPSHOT</version>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>seata-all</artifactId>
     <packaging>jar</packaging>
     <name>seata-all ${project.version}</name>
     <description>compatible with io.seata API</description>
     <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
         <mockito.version>4.11.0</mockito.version>
         <druid.version>1.2.7</druid.version>
         <mysql.version>5.1.42</mysql.version>
         <mariadb.version>2.7.2</mariadb.version>
         <assertj-core.version>3.12.2</assertj-core.version>
+        <maven.git-commit-id.skip>true</maven.git-commit-id.skip>
     </properties>
     <dependencies>
         <dependency>
@@ -121,7 +124,7 @@
             <artifactId>junit-jupiter-api</artifactId>
             <version>5.8.2</version>
             <scope>test</scope>
-           </dependency>
+        </dependency>
         <dependency>
             <groupId>org.apache.seata</groupId>
             <artifactId>seata-tcc</artifactId>
diff --git 
a/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java 
b/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java
index 275d061155..63a390890f 100644
--- a/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java
+++ b/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java
@@ -21,7 +21,7 @@ package io.seata.discovery.registry;
  * Notes: used for io.seata SPI interface
  */
 @Deprecated
-public interface RegistryProvider extends 
org.apache.seata.discovery.registry.RegistryProvider{
+public interface RegistryProvider extends 
org.apache.seata.discovery.registry.RegistryProvider {
     /**
      * provide a registry implementation instance
      *
diff --git 
a/compatible/src/main/java/io/seata/discovery/registry/RegistryService.java 
b/compatible/src/main/java/io/seata/discovery/registry/RegistryService.java
index 1c61c12b6c..6162a6f134 100644
--- a/compatible/src/main/java/io/seata/discovery/registry/RegistryService.java
+++ b/compatible/src/main/java/io/seata/discovery/registry/RegistryService.java
@@ -22,4 +22,6 @@ package io.seata.discovery.registry;
  * @param <T> the type parameter
  */
 @Deprecated
-public interface RegistryService<T> extends 
org.apache.seata.discovery.registry.RegistryService<T>{}
+public interface RegistryService<T> extends 
org.apache.seata.discovery.registry.RegistryService<T> {
+
+}
diff --git 
a/compatible/src/main/java/io/seata/integration/grpc/interceptor/server/ServerTransactionInterceptor.java
 
b/compatible/src/main/java/io/seata/integration/grpc/interceptor/server/ServerTransactionInterceptor.java
index 659d127f1c..b9472d11f6 100644
--- 
a/compatible/src/main/java/io/seata/integration/grpc/interceptor/server/ServerTransactionInterceptor.java
+++ 
b/compatible/src/main/java/io/seata/integration/grpc/interceptor/server/ServerTransactionInterceptor.java
@@ -20,4 +20,7 @@ package io.seata.integration.grpc.interceptor.server;
  * The type Server transaction interceptor.
  */
 @Deprecated
-public class ServerTransactionInterceptor extends 
org.apache.seata.integration.grpc.interceptor.server.ServerTransactionInterceptor{}
+public class ServerTransactionInterceptor
+    extends 
org.apache.seata.integration.grpc.interceptor.server.ServerTransactionInterceptor
 {
+
+}
diff --git 
a/compatible/src/main/java/io/seata/integration/http/JakartaSeataWebMvcConfigurer.java
 
b/compatible/src/main/java/io/seata/integration/http/JakartaSeataWebMvcConfigurer.java
index c07f06028b..b4edabfa34 100644
--- 
a/compatible/src/main/java/io/seata/integration/http/JakartaSeataWebMvcConfigurer.java
+++ 
b/compatible/src/main/java/io/seata/integration/http/JakartaSeataWebMvcConfigurer.java
@@ -20,4 +20,6 @@ package io.seata.integration.http;
  * The type Jakarta seata web mvc configurer.
  */
 @Deprecated
-public class JakartaSeataWebMvcConfigurer extends 
org.apache.seata.integration.http.JakartaSeataWebMvcConfigurer{}
+public class JakartaSeataWebMvcConfigurer extends 
org.apache.seata.integration.http.JakartaSeataWebMvcConfigurer {
+
+}
diff --git 
a/compatible/src/main/java/io/seata/integration/http/JakartaTransactionPropagationInterceptor.java
 
b/compatible/src/main/java/io/seata/integration/http/JakartaTransactionPropagationInterceptor.java
index ebe4fa590b..cbadff0b8b 100644
--- 
a/compatible/src/main/java/io/seata/integration/http/JakartaTransactionPropagationInterceptor.java
+++ 
b/compatible/src/main/java/io/seata/integration/http/JakartaTransactionPropagationInterceptor.java
@@ -20,4 +20,7 @@ package io.seata.integration.http;
  * The type Jakarta transaction propagation interceptor.
  */
 @Deprecated
-public class JakartaTransactionPropagationInterceptor extends 
org.apache.seata.integration.http.JakartaTransactionPropagationInterceptor{}
+public class JakartaTransactionPropagationInterceptor
+    extends 
org.apache.seata.integration.http.JakartaTransactionPropagationInterceptor {
+
+}
diff --git 
a/compatible/src/main/java/io/seata/integration/http/SeataWebMvcConfigurer.java 
b/compatible/src/main/java/io/seata/integration/http/SeataWebMvcConfigurer.java
index f2aa00b03c..4ce0312b4c 100644
--- 
a/compatible/src/main/java/io/seata/integration/http/SeataWebMvcConfigurer.java
+++ 
b/compatible/src/main/java/io/seata/integration/http/SeataWebMvcConfigurer.java
@@ -20,4 +20,6 @@ package io.seata.integration.http;
  * The type Seata web mvc configurer.
  */
 @Deprecated
-public class SeataWebMvcConfigurer extends 
org.apache.seata.integration.http.SeataWebMvcConfigurer {}
+public class SeataWebMvcConfigurer extends 
org.apache.seata.integration.http.SeataWebMvcConfigurer {
+
+}
diff --git 
a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/handler/GlobalTransactionalInterceptorHandler.java
 
b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/handler/GlobalTransactionalInterceptorHandler.java
index bdb1082c7d..24a9f7b76d 100644
--- 
a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/handler/GlobalTransactionalInterceptorHandler.java
+++ 
b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/handler/GlobalTransactionalInterceptorHandler.java
@@ -31,14 +31,16 @@ import org.apache.seata.tm.api.transaction.Propagation;
  * The type Global transactional interceptor handler.
  */
 @Deprecated
-public class GlobalTransactionalInterceptorHandler extends 
org.apache.seata.integration.tx.api.interceptor.handler.GlobalTransactionalInterceptorHandler
 {
+public class GlobalTransactionalInterceptorHandler
+    extends 
org.apache.seata.integration.tx.api.interceptor.handler.GlobalTransactionalInterceptorHandler
 {
 
-    public 
GlobalTransactionalInterceptorHandler(org.apache.seata.tm.api.FailureHandler 
failureHandler, Set<String> methodsToProxy) {
+    public 
GlobalTransactionalInterceptorHandler(org.apache.seata.tm.api.FailureHandler 
failureHandler,
+                                                 Set<String> methodsToProxy) {
         super(failureHandler, methodsToProxy);
     }
 
-    public 
GlobalTransactionalInterceptorHandler(org.apache.seata.tm.api.FailureHandler 
failureHandler, Set<String> methodsToProxy,
-        AspectTransactional aspectTransactional) {
+    public 
GlobalTransactionalInterceptorHandler(org.apache.seata.tm.api.FailureHandler 
failureHandler,
+                                                 Set<String> methodsToProxy, 
AspectTransactional aspectTransactional) {
         super(failureHandler, methodsToProxy, aspectTransactional);
     }
 
@@ -57,8 +59,8 @@ public class GlobalTransactionalInterceptorHandler extends 
org.apache.seata.inte
 
     @Override
     public AspectTransactional getAspectTransactional(Method method, Class<?> 
targetClass) {
-        final GlobalTransactional globalTransactionalAnnotation =
-            getAnnotation(method, targetClass, GlobalTransactional.class);
+        final GlobalTransactional globalTransactionalAnnotation = 
getAnnotation(method, targetClass,
+            GlobalTransactional.class);
         return globalTransactionalAnnotation != null ? new AspectTransactional(
             globalTransactionalAnnotation.timeoutMills(), 
globalTransactionalAnnotation.name(),
             globalTransactionalAnnotation.rollbackFor(), 
globalTransactionalAnnotation.rollbackForClassName(),
@@ -68,7 +70,7 @@ public class GlobalTransactionalInterceptorHandler extends 
org.apache.seata.inte
             
lockStrategyMode2ApacheSeataLockStrategyMode(globalTransactionalAnnotation.lockStrategyMode()))
 : null;
     }
 
-    private Propagation 
propagation2ApacheSeataPropagation(io.seata.tm.api.transaction.Propagation 
propagation){
+    private Propagation 
propagation2ApacheSeataPropagation(io.seata.tm.api.transaction.Propagation 
propagation) {
         switch (propagation) {
             case NEVER:
                 return Propagation.NEVER;
@@ -85,11 +87,12 @@ public class GlobalTransactionalInterceptorHandler extends 
org.apache.seata.inte
         }
     }
 
-    private LockStrategyMode 
lockStrategyMode2ApacheSeataLockStrategyMode(io.seata.common.LockStrategyMode 
lockStrategyMode){
-           if (Objects.requireNonNull(lockStrategyMode) == 
io.seata.common.LockStrategyMode.OPTIMISTIC) {
-                   return LockStrategyMode.OPTIMISTIC;
-           }
-           return LockStrategyMode.PESSIMISTIC;
+    private LockStrategyMode lockStrategyMode2ApacheSeataLockStrategyMode(
+        io.seata.common.LockStrategyMode lockStrategyMode) {
+        if (Objects.requireNonNull(lockStrategyMode) == 
io.seata.common.LockStrategyMode.OPTIMISTIC) {
+            return LockStrategyMode.OPTIMISTIC;
+        }
+        return LockStrategyMode.PESSIMISTIC;
     }
 
 }
diff --git 
a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/GlobalTransactionalInterceptorParser.java
 
b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/GlobalTransactionalInterceptorParser.java
index 964ccc8e70..487ad86cbe 100644
--- 
a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/GlobalTransactionalInterceptorParser.java
+++ 
b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/GlobalTransactionalInterceptorParser.java
@@ -29,7 +29,8 @@ import org.apache.seata.tm.api.FailureHandlerHolder;
  * The type Global transactional interceptor parser.
  */
 @Deprecated
-public class GlobalTransactionalInterceptorParser extends 
org.apache.seata.integration.tx.api.interceptor.parser.GlobalTransactionalInterceptorParser
 {
+public class GlobalTransactionalInterceptorParser
+    extends 
org.apache.seata.integration.tx.api.interceptor.parser.GlobalTransactionalInterceptorParser
 {
 
     @Override
     protected boolean existsAnnotation(Class<?>... classes) {
@@ -65,7 +66,7 @@ public class GlobalTransactionalInterceptorParser extends 
org.apache.seata.integ
     }
 
     @Override
-    public ProxyInvocationHandler createProxyInvocationHandler(){
+    public ProxyInvocationHandler createProxyInvocationHandler() {
         return new 
GlobalTransactionalInterceptorHandler(FailureHandlerHolder.getFailureHandler(), 
methodsToProxy);
     }
 
diff --git 
a/compatible/src/main/java/io/seata/saga/statelang/domain/ExecutionStatus.java 
b/compatible/src/main/java/io/seata/saga/statelang/domain/ExecutionStatus.java
index 1229620c09..6350d1d459 100644
--- 
a/compatible/src/main/java/io/seata/saga/statelang/domain/ExecutionStatus.java
+++ 
b/compatible/src/main/java/io/seata/saga/statelang/domain/ExecutionStatus.java
@@ -18,7 +18,6 @@ package io.seata.saga.statelang.domain;
 
 /**
  * Execution Status
- *
  */
 @Deprecated
 public enum ExecutionStatus {
@@ -59,7 +58,7 @@ public enum ExecutionStatus {
     }
 
     public static ExecutionStatus 
wrap(org.apache.seata.saga.statelang.domain.ExecutionStatus target) {
-        if(target == null){
+        if (target == null) {
             return null;
         }
         switch (target) {
diff --git 
a/compatible/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java
 
b/compatible/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java
index 205614e521..cfc0f49701 100644
--- 
a/compatible/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java
+++ 
b/compatible/src/main/java/io/seata/saga/statelang/domain/impl/StateInstanceImpl.java
@@ -24,7 +24,6 @@ import io.seata.saga.statelang.domain.StateMachineInstance;
 
 /**
  * state execution instance
- *
  */
 @Deprecated
 public class StateInstanceImpl implements StateInstance {
@@ -214,9 +213,9 @@ public class StateInstanceImpl implements StateInstance {
 
     @Override
     public void setStatus(ExecutionStatus status) {
-        if(status == null){
+        if (status == null) {
             actual.setStatus(null);
-        }else {
+        } else {
             actual.setStatus(status.unwrap());
         }
     }
@@ -228,7 +227,7 @@ public class StateInstanceImpl implements StateInstance {
 
     @Override
     public void setCompensationState(StateInstance compensationState) {
-        actual.setCompensationState(((StateInstanceImpl) 
compensationState).unwrap());
+        
actual.setCompensationState(((StateInstanceImpl)compensationState).unwrap());
     }
 
     @Override
diff --git 
a/compatible/src/main/java/io/seata/tm/api/DefaultFailureHandlerImpl.java 
b/compatible/src/main/java/io/seata/tm/api/DefaultFailureHandlerImpl.java
index 63f727c7ac..f56ad5cad4 100644
--- a/compatible/src/main/java/io/seata/tm/api/DefaultFailureHandlerImpl.java
+++ b/compatible/src/main/java/io/seata/tm/api/DefaultFailureHandlerImpl.java
@@ -30,90 +30,92 @@ import org.slf4j.LoggerFactory;
 
 /**
  * The type Default failure handler.
- *
  */
 @Deprecated
 public class DefaultFailureHandlerImpl implements FailureHandler {
 
-       private static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultFailureHandlerImpl.class);
-
-       /**
-        * Retry 1 hours by default
-        */
-       private static final int RETRY_MAX_TIMES = 6 * 60;
-
-       private static final long SCHEDULE_INTERVAL_SECONDS = 10;
-
-       private static final long TICK_DURATION = 1;
-
-       private static final int TICKS_PER_WHEEL = 8;
-
-       private static final HashedWheelTimer TIMER = new HashedWheelTimer(
-               new NamedThreadFactory("failedTransactionRetry", 1),
-               TICK_DURATION, TimeUnit.SECONDS, TICKS_PER_WHEEL);
-
-       @Override
-       public void onBeginFailure(GlobalTransaction tx, Throwable cause) {
-               LOGGER.warn("Failed to begin transaction. ", cause);
-       }
-
-       @Override
-       public void onCommitFailure(GlobalTransaction tx, Throwable cause) {
-               LOGGER.warn("Failed to commit transaction[" + tx.getXid() + 
"]", cause);
-               TIMER.newTimeout(new 
DefaultFailureHandlerImpl.CheckTimerTask(tx, GlobalStatus.Committed), 
SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
-       }
-
-       @Override
-       public void onRollbackFailure(GlobalTransaction tx, Throwable 
originalException) {
-               LOGGER.warn("Failed to rollback transaction[" + tx.getXid() + 
"]", originalException);
-               TIMER.newTimeout(new 
DefaultFailureHandlerImpl.CheckTimerTask(tx, GlobalStatus.Rollbacked), 
SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
-       }
-
-       @Override
-       public void onRollbacking(GlobalTransaction tx, Throwable 
originalException) {
-               StackTraceLogger.warn(LOGGER, originalException, "Retrying to 
rollback transaction[{}]", new String[] {tx.getXid()});
-               TIMER.newTimeout(new 
DefaultFailureHandlerImpl.CheckTimerTask(tx, GlobalStatus.RollbackRetrying), 
SCHEDULE_INTERVAL_SECONDS,
-                       TimeUnit.SECONDS);
-       }
-
-       protected class CheckTimerTask implements TimerTask {
-
-               private final GlobalTransaction tx;
-
-               private final GlobalStatus required;
-
-               private int count = 0;
-
-               private boolean isStopped = false;
-
-               protected CheckTimerTask(final GlobalTransaction tx, 
GlobalStatus required) {
-                       this.tx = tx;
-                       this.required = required;
-               }
-
-               @Override
-               public void run(Timeout timeout) throws Exception {
-                       if (!isStopped) {
-                               if (++count > RETRY_MAX_TIMES) {
-                                       LOGGER.error("transaction [{}] retry 
fetch status times exceed the limit [{} times]", tx.getXid(), RETRY_MAX_TIMES);
-                                       return;
-                               }
-                               isStopped = shouldStop(tx, required);
-                               TIMER.newTimeout(this, 
SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
-                       }
-               }
-       }
-
-       private boolean shouldStop(final GlobalTransaction tx, GlobalStatus 
required) {
-               try {
-                       GlobalStatus status = tx.getStatus();
-                       LOGGER.info("transaction [{}] current status is [{}]", 
tx.getXid(), status);
-                       if (status == required || status == 
GlobalStatus.Finished) {
-                               return true;
-                       }
-               } catch (TransactionException e) {
-                       LOGGER.error("fetch GlobalTransaction status error", e);
-               }
-               return false;
-       }
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultFailureHandlerImpl.class);
+
+    /**
+     * Retry 1 hours by default
+     */
+    private static final int RETRY_MAX_TIMES = 6 * 60;
+
+    private static final long SCHEDULE_INTERVAL_SECONDS = 10;
+
+    private static final long TICK_DURATION = 1;
+
+    private static final int TICKS_PER_WHEEL = 8;
+
+    private static final HashedWheelTimer TIMER = new HashedWheelTimer(
+        new NamedThreadFactory("failedTransactionRetry", 1), TICK_DURATION, 
TimeUnit.SECONDS, TICKS_PER_WHEEL);
+
+    @Override
+    public void onBeginFailure(GlobalTransaction tx, Throwable cause) {
+        LOGGER.warn("Failed to begin transaction. ", cause);
+    }
+
+    @Override
+    public void onCommitFailure(GlobalTransaction tx, Throwable cause) {
+        LOGGER.warn("Failed to commit transaction[" + tx.getXid() + "]", 
cause);
+        TIMER.newTimeout(new DefaultFailureHandlerImpl.CheckTimerTask(tx, 
GlobalStatus.Committed),
+            SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
+    }
+
+    @Override
+    public void onRollbackFailure(GlobalTransaction tx, Throwable 
originalException) {
+        LOGGER.warn("Failed to rollback transaction[" + tx.getXid() + "]", 
originalException);
+        TIMER.newTimeout(new DefaultFailureHandlerImpl.CheckTimerTask(tx, 
GlobalStatus.Rollbacked),
+            SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
+    }
+
+    @Override
+    public void onRollbacking(GlobalTransaction tx, Throwable 
originalException) {
+        StackTraceLogger.warn(LOGGER, originalException, "Retrying to rollback 
transaction[{}]",
+            new String[] {tx.getXid()});
+        TIMER.newTimeout(new DefaultFailureHandlerImpl.CheckTimerTask(tx, 
GlobalStatus.RollbackRetrying),
+            SCHEDULE_INTERVAL_SECONDS, TimeUnit.SECONDS);
+    }
+
+    protected class CheckTimerTask implements TimerTask {
+
+        private final GlobalTransaction tx;
+
+        private final GlobalStatus required;
+
+        private int count = 0;
+
+        private boolean isStopped = false;
+
+        protected CheckTimerTask(final GlobalTransaction tx, GlobalStatus 
required) {
+            this.tx = tx;
+            this.required = required;
+        }
+
+        @Override
+        public void run(Timeout timeout) throws Exception {
+            if (!isStopped) {
+                if (++count > RETRY_MAX_TIMES) {
+                    LOGGER.error("transaction [{}] retry fetch status times 
exceed the limit [{} times]", tx.getXid(),
+                        RETRY_MAX_TIMES);
+                    return;
+                }
+                isStopped = shouldStop(tx, required);
+                TIMER.newTimeout(this, SCHEDULE_INTERVAL_SECONDS, 
TimeUnit.SECONDS);
+            }
+        }
+    }
+
+    private boolean shouldStop(final GlobalTransaction tx, GlobalStatus 
required) {
+        try {
+            GlobalStatus status = tx.getStatus();
+            LOGGER.info("transaction [{}] current status is [{}]", 
tx.getXid(), status);
+            if (status == required || status == GlobalStatus.Finished) {
+                return true;
+            }
+        } catch (TransactionException e) {
+            LOGGER.error("fetch GlobalTransaction status error", e);
+        }
+        return false;
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to