You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by ji...@apache.org on 2024/02/19 02:48:59 UTC

(incubator-seata) branch 2.x updated: optimize: compatible with lower versions of SPI (#6315)

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 5667d63c32 optimize: compatible with lower versions of SPI (#6315)
5667d63c32 is described below

commit 5667d63c32037dd49e6ae47d8da4f8f89645a80f
Author: xingfudeshi <xi...@gmail.com>
AuthorDate: Mon Feb 19 10:48:54 2024 +0800

    optimize: compatible with lower versions of SPI (#6315)
---
 changes/en-us/2.x.md                               |   1 +
 changes/zh-cn/2.x.md                               |   1 +
 .../seata/common/loader/EnhancedServiceLoader.java | 135 +++++++++++++--
 compatible/pom.xml                                 |  29 +++-
 .../java/io/seata/common/util/StringUtils.java     | 187 +++++++++++++++++++++
 .../io/seata/config/ConfigurationProvider.java     |  24 +++
 .../io/seata/config/ExtConfigurationProvider.java  |  26 +++
 .../src/main/java/io/seata/config/Processor.java   |  26 +++
 .../main/java/io/seata/core/auth/AuthSigner.java   |  24 +++
 .../java/io/seata/core/compressor/Compressor.java  |  25 +++
 .../io/seata/core/constants/DubboConstants.java    |  24 +++
 .../java/io/seata/core/context/ContextCore.java    |  27 +++
 .../java/io/seata/core/context/RootContext.java    |  21 ++-
 .../main/java/io/seata/core/model/BranchType.java  |  86 ++++++++++
 .../java/io/seata/core/model/ResourceManager.java  |  26 +++
 .../io/seata/core/model/TransactionManager.java    |  28 +++
 .../seata/core/rpc/RegisterCheckAuthHandler.java   |  26 +++
 .../main/java/io/seata/core/rpc/hook/RpcHook.java  |  24 +++
 .../java/io/seata/core/serializer/Serializer.java  |  24 +++
 .../seata/core/store/db/sql/lock/LockStoreSql.java |  26 +++
 .../seata/core/store/db/sql/log/LogStoreSqls.java  |  20 +++
 .../seata/discovery/loadbalance/LoadBalance.java   |  25 +++
 .../seata/discovery/registry/RegistryProvider.java |  24 +++
 .../tx/api/interceptor/parser/InterfaceParser.java |  21 +++
 .../interceptor/parser/RegisterResourceParser.java |  21 +++
 .../api/interceptor/parser/TargetClassParser.java  |  20 +++
 .../seata/integration/tx/api/json/JsonParser.java  |  22 +++
 .../tx/api/remoting/RemotingParser.java            |  25 +++
 .../java/io/seata/metrics/exporter/Exporter.java   |  25 +++
 .../java/io/seata/metrics/registry/Registry.java   |  25 +++
 .../main/java/io/seata/rm/AbstractRMHandler.java   |  24 +++
 .../seata/rm/datasource/exec/InsertExecutor.java   |  27 +++
 .../rm/datasource/undo/UndoExecutorHolder.java     |  25 +++
 .../seata/rm/datasource/undo/UndoLogManager.java   |  25 +++
 .../undo/parser/spi/JacksonSerializer.java         |  27 +++
 .../undo/parser/spi/KryoTypeSerializer.java        |  27 +++
 .../undo/parser/spi/ProtostuffDelegate.java        |  26 +++
 .../saga/engine/pcext/StateHandlerInterceptor.java |  24 +++
 .../saga/engine/pcext/StateRouterInterceptor.java  |  28 +++
 .../io/seata/saga/statelang/parser/JsonParser.java |  26 +++
 .../io/seata/saga/statelang/validator/Rule.java    |  20 +++
 .../io/seata/spring/annotation/ScannerChecker.java |  27 +++
 .../java/io/seata/sqlparser/EscapeHandler.java     |  25 +++
 .../io/seata/sqlparser/SQLRecognizerFactory.java   |  21 +++
 .../druid/SQLOperateRecognizerHolder.java          |  26 +++
 .../io/seata/sqlparser/struct/TableMetaCache.java  |  26 +++
 .../java/io/seata/sqlparser/util/DbTypeParser.java |  21 +++
 47 files changed, 1419 insertions(+), 24 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 08cf23609b..dca04c4a4a 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -82,6 +82,7 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#6301](https://github.com/apache/incubator-seata/pull/6301)] upgrade console frontend dependencies and supported nodejs versions
 - [[#6301](https://github.com/apache/incubator-seata/pull/6312)] add saga related io.seata compatible api
 - [[#6313](https://github.com/apache/incubator-seata/pull/6313)] console display the version number
+- [[#6315](https://github.com/apache/incubator-seata/pull/6315)] compatible with lower versions of SPI
 - [[#6327](https://github.com/apache/incubator-seata/pull/6327)] compatible with integration.http and integration.http.Jakarta
 - [[#6328](https://github.com/apache/incubator-seata/pull/6328)] compatible with integration.grpc
 - [[#6330](https://github.com/apache/incubator-seata/pull/6330)] remove mariadb API
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 8f850c36ac..90b586ecb7 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -80,6 +80,7 @@
 - [[#6301](https://github.com/apache/incubator-seata/pull/6301)] 升级console前端依赖及支持的nodejs版本
 - [[#6301](https://github.com/apache/incubator-seata/pull/6312)] 添加saga相关的io.seata兼容性API
 - [[#6313](https://github.com/apache/incubator-seata/pull/6313)] console展示版本号
+- [[#6315](https://github.com/apache/incubator-seata/pull/6315)] 兼容低版本的SPI
 - [[#6327](https://github.com/apache/incubator-seata/pull/6327)] 兼容 integration.http 和 integration.http.Jakarta API
 - [[#6328](https://github.com/apache/incubator-seata/pull/6328)] 兼容 integration.grpc API
 - [[#6330](https://github.com/apache/incubator-seata/pull/6330)] 去除 mariadb API
diff --git a/common/src/main/java/org/apache/seata/common/loader/EnhancedServiceLoader.java b/common/src/main/java/org/apache/seata/common/loader/EnhancedServiceLoader.java
index 589eeff673..9a18e45b44 100644
--- a/common/src/main/java/org/apache/seata/common/loader/EnhancedServiceLoader.java
+++ b/common/src/main/java/org/apache/seata/common/loader/EnhancedServiceLoader.java
@@ -16,6 +16,14 @@
  */
 package org.apache.seata.common.loader;
 
+import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.seata.common.Constants;
+import org.apache.seata.common.executor.Initialize;
+import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -30,19 +38,14 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.stream.Collectors;
 
-import org.apache.seata.common.Constants;
-import org.apache.seata.common.executor.Initialize;
-import org.apache.seata.common.util.CollectionUtils;
-import org.apache.seata.common.util.StringUtils;
-import org.apache.commons.lang.exception.ExceptionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * The type Enhanced service loader.
  *
  */
 public class EnhancedServiceLoader {
+    private static final Logger LOGGER = LoggerFactory.getLogger(EnhancedServiceLoader.class);
+    private static final String APACHE_SEATA_PACKAGE_NAME = "org.apache.seata";
+    private static final String IO_SEATA_PACKAGE_NAME = "io.seata";
 
     /**
      * Class->InnerEnhancedServiceLoader map
@@ -50,6 +53,16 @@ public class EnhancedServiceLoader {
     private static final ConcurrentMap<Class<?>, InnerEnhancedServiceLoader<?>> SERVICE_LOADERS =
             new ConcurrentHashMap<>();
 
+    private static <S> Class<S> getCompatibleService(Class<S> originService) {
+        String apacheSeataName = originService.getName();
+        String ioSeataName = apacheSeataName.replace(APACHE_SEATA_PACKAGE_NAME, IO_SEATA_PACKAGE_NAME);
+        try {
+            Class clasz = Class.forName(ioSeataName);
+            return clasz;
+        } catch (ClassNotFoundException e) {
+            return null;
+        }
+    }
     /**
      * Specify classLoader to load the service provider
      *
@@ -60,6 +73,15 @@ public class EnhancedServiceLoader {
      * @throws EnhancedServiceNotFoundException the enhanced service not found exception
      */
     public static <S> S load(Class<S> service, ClassLoader loader) throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(loader);
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(loader);
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(loader);
     }
 
@@ -72,6 +94,15 @@ public class EnhancedServiceLoader {
      * @throws EnhancedServiceNotFoundException the enhanced service not found exception
      */
     public static <S> S load(Class<S> service) throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(findClassLoader());
     }
 
@@ -85,6 +116,15 @@ public class EnhancedServiceLoader {
      * @throws EnhancedServiceNotFoundException the enhanced service not found exception
      */
     public static <S> S load(Class<S> service, String activateName) throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(activateName, findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, findClassLoader());
     }
 
@@ -100,6 +140,15 @@ public class EnhancedServiceLoader {
      */
     public static <S> S load(Class<S> service, String activateName, ClassLoader loader)
             throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, loader);
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(activateName, loader);
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, loader);
     }
 
@@ -115,6 +164,15 @@ public class EnhancedServiceLoader {
      */
     public static <S> S load(Class<S> service, String activateName, Object[] args)
             throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, args, findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(activateName, args, findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, args, findClassLoader());
     }
 
@@ -131,6 +189,15 @@ public class EnhancedServiceLoader {
      */
     public static <S> S load(Class<S> service, String activateName, Class<?>[] argsType, Object[] args)
             throws EnhancedServiceNotFoundException {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, argsType, args, findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).load(activateName, argsType, args, findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).load(activateName, argsType, args, findClassLoader());
     }
 
@@ -142,6 +209,15 @@ public class EnhancedServiceLoader {
      * @return list list
      */
     public static <S> List<S> loadAll(Class<S> service) {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).loadAll(findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).loadAll(findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).loadAll(findClassLoader());
     }
 
@@ -155,6 +231,15 @@ public class EnhancedServiceLoader {
      * @return list list
      */
     public static <S> List<S> loadAll(Class<S> service, Class<?>[] argsType, Object[] args) {
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                return InnerEnhancedServiceLoader.getServiceLoader(service).loadAll(argsType, args, findClassLoader());
+            } catch (EnhancedServiceNotFoundException ignore) {
+                LOGGER.warn("Can't load SPI for :{} from org.apache.seata package,will try to load SPI from io.seata package", service.getName());
+            }
+            return InnerEnhancedServiceLoader.getServiceLoader(compatibleService).loadAll(argsType, args, findClassLoader());
+        }
         return InnerEnhancedServiceLoader.getServiceLoader(service).loadAll(argsType, args, findClassLoader());
     }
 
@@ -172,7 +257,17 @@ public class EnhancedServiceLoader {
      * @param service the service
      */
     public static <S> void unload(Class<S> service) {
-        InnerEnhancedServiceLoader.removeServiceLoader(service);
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                InnerEnhancedServiceLoader.removeServiceLoader(service);
+            } catch (Exception ignore) {
+                LOGGER.warn("Can't unload SPI for :{} from org.apache.seata package,will try to unload SPI from io.seata package", service.getName());
+                InnerEnhancedServiceLoader.removeServiceLoader(compatibleService);
+            }
+        } else {
+            InnerEnhancedServiceLoader.removeServiceLoader(service);
+        }
     }
 
     /**
@@ -183,11 +278,26 @@ public class EnhancedServiceLoader {
      * @param activateName the activate name
      */
     public static <S> void unload(Class<S> service, String activateName) {
-
         if (activateName == null) {
             throw new IllegalArgumentException("activateName is null");
         }
-        InnerEnhancedServiceLoader<S> serviceLoader = InnerEnhancedServiceLoader.getServiceLoader(service);
+        Class<S> compatibleService = getCompatibleService(service);
+        if (compatibleService != null) {
+            try {
+                InnerEnhancedServiceLoader<S> serviceLoader = InnerEnhancedServiceLoader.getServiceLoader(service);
+                doUnload(serviceLoader, activateName);
+            } catch (Exception ignore) {
+                LOGGER.warn("Can't unload SPI for :{} from org.apache.seata package,will try to unload SPI from io.seata package", service.getName());
+                InnerEnhancedServiceLoader<S> serviceLoader = InnerEnhancedServiceLoader.getServiceLoader(compatibleService);
+                doUnload(serviceLoader, activateName);
+            }
+        } else {
+            InnerEnhancedServiceLoader<S> serviceLoader = InnerEnhancedServiceLoader.getServiceLoader(service);
+            doUnload(serviceLoader, activateName);
+        }
+    }
+
+    private static <S> void doUnload(InnerEnhancedServiceLoader<S> serviceLoader, String activateName) {
         ConcurrentMap<Class<?>, ExtensionDefinition<S>> classToDefinitionMap = serviceLoader.classToDefinitionMap;
         List<ExtensionDefinition<S>> extensionDefinitions = new ArrayList<>();
         for (Map.Entry<Class<?>, ExtensionDefinition<S>> entry : classToDefinitionMap.entrySet()) {
@@ -207,7 +317,6 @@ public class EnhancedServiceLoader {
 
             }
         }
-
     }
 
 
@@ -259,6 +368,8 @@ public class EnhancedServiceLoader {
             this.type = type;
         }
 
+
+
         /**
          * Get the ServiceLoader for the specified Class
          *
diff --git a/compatible/pom.xml b/compatible/pom.xml
index bf2d301b00..a8bb40b22d 100644
--- a/compatible/pom.xml
+++ b/compatible/pom.xml
@@ -34,19 +34,38 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.seata</groupId>
-            <artifactId>seata-core</artifactId>
+            <artifactId>seata-saga-engine</artifactId>
             <version>${project.version}</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.seata</groupId>
-            <artifactId>seata-saga-engine</artifactId>
-            <version>2.1.0-SNAPSHOT</version>
+            <artifactId>seata-saga-engine-store</artifactId>
+            <version>${project.version}</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.seata</groupId>
-            <artifactId>seata-saga-engine-store</artifactId>
-            <version>2.1.0-SNAPSHOT</version>
+            <artifactId>seata-integration-tx-api</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.seata</groupId>
+            <artifactId>seata-metrics-api</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.seata</groupId>
+            <artifactId>seata-sqlparser-druid</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.seata</groupId>
+            <artifactId>seata-spring</artifactId>
+            <version>${project.version}</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
diff --git a/compatible/src/main/java/io/seata/common/util/StringUtils.java b/compatible/src/main/java/io/seata/common/util/StringUtils.java
new file mode 100644
index 0000000000..bf942b36ee
--- /dev/null
+++ b/compatible/src/main/java/io/seata/common/util/StringUtils.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.common.util;
+
+
+import java.io.InputStream;
+import java.util.Iterator;
+
+/**
+ * The type String utils.
+ *
+ * Compatible for dubbo dubbo-filter-seata
+ */
+public class StringUtils {
+    /**
+     * Is empty boolean.
+     *
+     * @param str the str
+     * @return the boolean
+     */
+    public static boolean isNullOrEmpty(String str) {
+        return org.apache.seata.common.util.StringUtils.isNullOrEmpty(str);
+    }
+
+    /**
+     * Is blank string ?
+     *
+     * @param str the str
+     * @return boolean boolean
+     */
+    public static boolean isBlank(String str) {
+        return org.apache.seata.common.util.StringUtils.isBlank(str);
+    }
+
+    /**
+     * Is Not blank string ?
+     *
+     * @param str the str
+     * @return boolean boolean
+     */
+    public static boolean isNotBlank(String str) {
+        return org.apache.seata.common.util.StringUtils.isNotBlank(str);
+    }
+
+    /**
+     * Equals boolean.
+     *
+     * @param a the a
+     * @param b the b
+     * @return boolean
+     */
+    public static boolean equals(String a, String b) {
+        return org.apache.seata.common.util.StringUtils.equals(a,b);
+    }
+
+    /**
+     * Equals ignore case boolean.
+     *
+     * @param a the a
+     * @param b the b
+     * @return the boolean
+     */
+    public static boolean equalsIgnoreCase(String a, String b) {
+        return org.apache.seata.common.util.StringUtils.equalsIgnoreCase(a,b);
+    }
+
+    /**
+     * Input stream 2 string string.
+     *
+     * @param is the is
+     * @return the string
+     */
+    public static String inputStream2String(InputStream is) {
+        return org.apache.seata.common.util.StringUtils.inputStream2String(is);
+    }
+
+    /**
+     * Input stream to byte array
+     *
+     * @param is the is
+     * @return the byte array
+     */
+    public static byte[] inputStream2Bytes(InputStream is) {
+        return org.apache.seata.common.util.StringUtils.inputStream2Bytes(is);
+    }
+
+    /**
+     * Object.toString()
+     *
+     * @param obj the obj
+     * @return string string
+     */
+    @SuppressWarnings("deprecation")
+    public static String toString(final Object obj) {
+        return org.apache.seata.common.util.StringUtils.toString(obj);
+    }
+
+    /**
+     * Trim string to null if empty("").
+     *
+     * @param str the String to be trimmed, may be null
+     * @return the trimmed String
+     */
+    public static String trimToNull(final String str) {
+        return org.apache.seata.common.util.StringUtils.trimToNull(str);
+    }
+
+    /**
+     * Trim string, or null if string is null.
+     *
+     * @param str the String to be trimmed, may be null
+     * @return the trimmed string, {@code null} if null String input
+     */
+    public static String trim(final String str) {
+        return org.apache.seata.common.util.StringUtils.trim(str);
+    }
+
+    /**
+     * Checks if a CharSequence is empty ("") or null.
+     *
+     * @param cs the CharSequence to check, may be null
+     * @return {@code true} if the CharSequence is empty or null
+     */
+    public static boolean isEmpty(final CharSequence cs) {
+        return org.apache.seata.common.util.StringUtils.isEmpty(cs);
+    }
+
+    /**
+     * Checks if a CharSequence is not empty ("") and not null.
+     *
+     * @param cs the CharSequence to check, may be null
+     * @return {@code true} if the CharSequence is not empty and not null
+     */
+    public static boolean isNotEmpty(final CharSequence cs) {
+        return org.apache.seata.common.util.StringUtils.isNotEmpty(cs);
+    }
+
+    /**
+     * hump to Line or line to hump, only spring environment use
+     *
+     * @param str str
+     * @return string string
+     */
+    public static String hump2Line(String str) {
+        return org.apache.seata.common.util.StringUtils.hump2Line(str);
+    }
+
+    /**
+     * check string data size
+     *
+     * @param data the str
+     * @param dataName the data name
+     * @param errorSize throw exception if size > errorSize
+     * @return boolean
+     */
+    public static boolean checkDataSize(String data, String dataName, int errorSize, boolean throwIfErr) {
+        return org.apache.seata.common.util.StringUtils.checkDataSize(data,dataName,errorSize,throwIfErr);
+    }
+
+    public static boolean hasLowerCase(String str) {
+        return org.apache.seata.common.util.StringUtils.hasLowerCase(str);
+    }
+
+    public static boolean hasUpperCase(String str) {
+        return org.apache.seata.common.util.StringUtils.hasUpperCase(str);
+    }
+
+    public static String join(Iterator iterator, String separator) {
+        return org.apache.seata.common.util.StringUtils.join(iterator,separator);
+    }
+
+}
+
diff --git a/compatible/src/main/java/io/seata/config/ConfigurationProvider.java b/compatible/src/main/java/io/seata/config/ConfigurationProvider.java
new file mode 100644
index 0000000000..4767721b02
--- /dev/null
+++ b/compatible/src/main/java/io/seata/config/ConfigurationProvider.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.config;
+
+/**
+ * the interface configuration provider
+ * 
+ */
+public interface ConfigurationProvider extends org.apache.seata.config.ConfigurationProvider {
+}
diff --git a/compatible/src/main/java/io/seata/config/ExtConfigurationProvider.java b/compatible/src/main/java/io/seata/config/ExtConfigurationProvider.java
new file mode 100644
index 0000000000..800d444cd7
--- /dev/null
+++ b/compatible/src/main/java/io/seata/config/ExtConfigurationProvider.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.config;
+
+
+/**
+ * the interface ext configuration provider
+ *
+ * 
+ */
+public interface ExtConfigurationProvider extends org.apache.seata.config.ExtConfigurationProvider {
+}
diff --git a/compatible/src/main/java/io/seata/config/Processor.java b/compatible/src/main/java/io/seata/config/Processor.java
new file mode 100644
index 0000000000..1734d5dd11
--- /dev/null
+++ b/compatible/src/main/java/io/seata/config/Processor.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.config;
+
+/**
+ * The processing configuration.
+ * 
+ *
+ *
+ */
+public interface Processor extends org.apache.seata.config.processor.Processor {
+}
diff --git a/compatible/src/main/java/io/seata/core/auth/AuthSigner.java b/compatible/src/main/java/io/seata/core/auth/AuthSigner.java
new file mode 100644
index 0000000000..1c09234eb5
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/auth/AuthSigner.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.auth;
+
+/**
+ * The type AuthSigner
+ */
+public interface AuthSigner extends org.apache.seata.core.auth.AuthSigner {
+
+}
diff --git a/compatible/src/main/java/io/seata/core/compressor/Compressor.java b/compatible/src/main/java/io/seata/core/compressor/Compressor.java
new file mode 100644
index 0000000000..af4fa71d5d
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/compressor/Compressor.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.compressor;
+
+/**
+ * The type Compressor
+ * 
+ */
+public interface Compressor extends org.apache.seata.core.compressor.Compressor {
+
+}
diff --git a/compatible/src/main/java/io/seata/core/constants/DubboConstants.java b/compatible/src/main/java/io/seata/core/constants/DubboConstants.java
new file mode 100644
index 0000000000..f0d728fd72
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/constants/DubboConstants.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.seata.core.constants;
+
+/**
+ * Compatible for dubbo dubbo-filter-seata
+ */
+public class DubboConstants extends org.apache.seata.core.constants.DubboConstants {
+}
diff --git a/compatible/src/main/java/io/seata/core/context/ContextCore.java b/compatible/src/main/java/io/seata/core/context/ContextCore.java
new file mode 100644
index 0000000000..2e18464c75
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/context/ContextCore.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.context;
+
+
+/**
+ * 
+ *
+ * The interface Context core.
+ *
+ */
+public interface ContextCore extends org.apache.seata.core.context.ContextCore {
+}
diff --git a/compatible/src/main/java/io/seata/core/context/RootContext.java b/compatible/src/main/java/io/seata/core/context/RootContext.java
index c671e253c8..88d825214f 100644
--- a/compatible/src/main/java/io/seata/core/context/RootContext.java
+++ b/compatible/src/main/java/io/seata/core/context/RootContext.java
@@ -16,25 +16,32 @@
  */
 package io.seata.core.context;
 
-import java.util.Map;
+import io.seata.core.model.BranchType;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-
-import org.apache.seata.core.model.BranchType;
+import java.util.Map;
 
 /**
  * The type Root context.
  */
 public class RootContext {
 
+    private static org.apache.seata.core.model.BranchType convertApacheSeata(BranchType branchType) {
+        return org.apache.seata.core.model.BranchType.get(branchType.name());
+    }
+
+    private static BranchType convertIoSeata(org.apache.seata.core.model.BranchType branchType) {
+        return BranchType.get(branchType.name());
+    }
+
     /**
      * Sets default branch type.
      *
      * @param defaultBranchType the default branch type
      */
     public static void setDefaultBranchType(BranchType defaultBranchType) {
-        org.apache.seata.core.context.RootContext.setDefaultBranchType(defaultBranchType);
+        org.apache.seata.core.context.RootContext.setDefaultBranchType(convertApacheSeata(defaultBranchType));
     }
 
     /**
@@ -132,7 +139,7 @@ public class RootContext {
      */
     @Nullable
     public static BranchType getBranchType() {
-        return org.apache.seata.core.context.RootContext.getBranchType();
+        return convertIoSeata(org.apache.seata.core.context.RootContext.getBranchType());
     }
 
     /**
@@ -141,7 +148,7 @@ public class RootContext {
      * @param branchType the branch type
      */
     public static void bindBranchType(@Nonnull BranchType branchType) {
-        org.apache.seata.core.context.RootContext.bindBranchType(branchType);
+        org.apache.seata.core.context.RootContext.bindBranchType(convertApacheSeata(branchType));
     }
 
     /**
@@ -151,7 +158,7 @@ public class RootContext {
      */
     @Nullable
     public static BranchType unbindBranchType() {
-        return org.apache.seata.core.context.RootContext.unbindBranchType();
+        return convertIoSeata(org.apache.seata.core.context.RootContext.unbindBranchType());
     }
 
     /**
diff --git a/compatible/src/main/java/io/seata/core/model/BranchType.java b/compatible/src/main/java/io/seata/core/model/BranchType.java
new file mode 100644
index 0000000000..095ff8fb85
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/model/BranchType.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.model;
+
+/**
+ * The enum Branch type.
+ * Compatible for dubbo dubbo-filter-seata
+ *
+ */
+public enum BranchType {
+
+    /**
+     * The At.
+     */
+    // AT Branch
+    AT,
+
+    /**
+     * The TCC.
+     */
+    TCC,
+
+    /**
+     * The SAGA.
+     */
+    SAGA,
+
+    /**
+     * The XA.
+     */
+    XA;
+
+    /**
+     * Get branch type.
+     *
+     * @param ordinal the ordinal
+     * @return the branch type
+     */
+    public static BranchType get(byte ordinal) {
+        return get((int)ordinal);
+    }
+
+    /**
+     * Get branch type.
+     *
+     * @param ordinal the ordinal
+     * @return the branch type
+     */
+    public static BranchType get(int ordinal) {
+        for (BranchType branchType : values()) {
+            if (branchType.ordinal() == ordinal) {
+                return branchType;
+            }
+        }
+        throw new IllegalArgumentException("Unknown BranchType[" + ordinal + "]");
+    }
+
+    /**
+     * Get branch type.
+     *
+     * @param name the name
+     * @return the branch type
+     */
+    public static BranchType get(String name) {
+        for (BranchType branchType : values()) {
+            if (branchType.name().equalsIgnoreCase(name)) {
+                return branchType;
+            }
+        }
+        throw new IllegalArgumentException("Unknown BranchType[" + name + "]");
+    }
+}
diff --git a/compatible/src/main/java/io/seata/core/model/ResourceManager.java b/compatible/src/main/java/io/seata/core/model/ResourceManager.java
new file mode 100644
index 0000000000..01420df6a5
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/model/ResourceManager.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.model;
+
+
+/**
+ * Resource Manager: common behaviors.
+ *
+ */
+public interface ResourceManager extends org.apache.seata.core.model.ResourceManager {
+
+}
diff --git a/compatible/src/main/java/io/seata/core/model/TransactionManager.java b/compatible/src/main/java/io/seata/core/model/TransactionManager.java
new file mode 100644
index 0000000000..5f03357db5
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/model/TransactionManager.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.model;
+
+/**
+ * 
+ *
+ * Transaction Manager.
+ *
+ * Define a global transaction and control it.
+ *
+ */
+public interface TransactionManager extends org.apache.seata.core.model.TransactionManager {
+}
diff --git a/compatible/src/main/java/io/seata/core/rpc/RegisterCheckAuthHandler.java b/compatible/src/main/java/io/seata/core/rpc/RegisterCheckAuthHandler.java
new file mode 100644
index 0000000000..42b137a475
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/rpc/RegisterCheckAuthHandler.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.rpc;
+
+/**
+ * 
+ *
+ * The interface Register check auth handler.
+ *
+ */
+public interface RegisterCheckAuthHandler extends org.apache.seata.core.rpc.RegisterCheckAuthHandler {
+}
diff --git a/compatible/src/main/java/io/seata/core/rpc/hook/RpcHook.java b/compatible/src/main/java/io/seata/core/rpc/hook/RpcHook.java
new file mode 100644
index 0000000000..4db9635240
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/rpc/hook/RpcHook.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.rpc.hook;
+
+
+/**
+ * The type RpcHook
+ */
+public interface RpcHook extends org.apache.seata.core.rpc.hook.RpcHook {
+}
diff --git a/compatible/src/main/java/io/seata/core/serializer/Serializer.java b/compatible/src/main/java/io/seata/core/serializer/Serializer.java
new file mode 100644
index 0000000000..598595e052
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/serializer/Serializer.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.serializer;
+
+/**
+ * The interface Codec.
+ *
+ */
+public interface Serializer extends org.apache.seata.core.serializer.Serializer {
+}
diff --git a/compatible/src/main/java/io/seata/core/store/db/sql/lock/LockStoreSql.java b/compatible/src/main/java/io/seata/core/store/db/sql/lock/LockStoreSql.java
new file mode 100644
index 0000000000..d323ee443a
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/store/db/sql/lock/LockStoreSql.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.store.db.sql.lock;
+
+/**
+ * the database lock store sql interface
+ *
+ * @since 1.2.0
+ */
+public interface LockStoreSql extends org.apache.seata.core.store.db.sql.lock.LockStoreSql {
+
+}
diff --git a/compatible/src/main/java/io/seata/core/store/db/sql/log/LogStoreSqls.java b/compatible/src/main/java/io/seata/core/store/db/sql/log/LogStoreSqls.java
new file mode 100644
index 0000000000..b0450cbd54
--- /dev/null
+++ b/compatible/src/main/java/io/seata/core/store/db/sql/log/LogStoreSqls.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.core.store.db.sql.log;
+
+public interface LogStoreSqls extends org.apache.seata.core.store.db.sql.log.LogStoreSqls {
+}
diff --git a/compatible/src/main/java/io/seata/discovery/loadbalance/LoadBalance.java b/compatible/src/main/java/io/seata/discovery/loadbalance/LoadBalance.java
new file mode 100644
index 0000000000..0b3bc9f486
--- /dev/null
+++ b/compatible/src/main/java/io/seata/discovery/loadbalance/LoadBalance.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.discovery.loadbalance;
+
+
+/**
+ * The interface Load balance.
+ *
+ */
+public interface LoadBalance extends org.apache.seata.discovery.loadbalance.LoadBalance {
+}
diff --git a/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java b/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java
new file mode 100644
index 0000000000..2bd39cee63
--- /dev/null
+++ b/compatible/src/main/java/io/seata/discovery/registry/RegistryProvider.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.discovery.registry;
+
+
+/**
+ * the interface registry provider
+ */
+public interface RegistryProvider extends org.apache.seata.discovery.registry.RegistryProvider {
+}
diff --git a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/InterfaceParser.java b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/InterfaceParser.java
new file mode 100644
index 0000000000..2381924a07
--- /dev/null
+++ b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/InterfaceParser.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.integration.tx.api.interceptor.parser;
+
+
+public interface InterfaceParser extends org.apache.seata.integration.tx.api.interceptor.parser.InterfaceParser {
+}
diff --git a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/RegisterResourceParser.java b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/RegisterResourceParser.java
new file mode 100644
index 0000000000..c1c8b67907
--- /dev/null
+++ b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/RegisterResourceParser.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.integration.tx.api.interceptor.parser;
+
+public interface RegisterResourceParser extends org.apache.seata.integration.tx.api.interceptor.parser.RegisterResourceParser {
+
+}
diff --git a/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/TargetClassParser.java b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/TargetClassParser.java
new file mode 100644
index 0000000000..b8e377566e
--- /dev/null
+++ b/compatible/src/main/java/io/seata/integration/tx/api/interceptor/parser/TargetClassParser.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.integration.tx.api.interceptor.parser;
+
+public interface TargetClassParser extends org.apache.seata.integration.tx.api.interceptor.parser.TargetClassParser {
+}
diff --git a/compatible/src/main/java/io/seata/integration/tx/api/json/JsonParser.java b/compatible/src/main/java/io/seata/integration/tx/api/json/JsonParser.java
new file mode 100644
index 0000000000..e7ac74158d
--- /dev/null
+++ b/compatible/src/main/java/io/seata/integration/tx/api/json/JsonParser.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.integration.tx.api.json;
+
+
+
+public interface JsonParser extends org.apache.seata.integration.tx.api.json.JsonParser {
+}
diff --git a/compatible/src/main/java/io/seata/integration/tx/api/remoting/RemotingParser.java b/compatible/src/main/java/io/seata/integration/tx/api/remoting/RemotingParser.java
new file mode 100644
index 0000000000..9978a706ab
--- /dev/null
+++ b/compatible/src/main/java/io/seata/integration/tx/api/remoting/RemotingParser.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.integration.tx.api.remoting;
+
+
+/**
+ * extract remoting bean info
+ *
+ */
+public interface RemotingParser extends org.apache.seata.integration.tx.api.remoting.RemotingParser {
+}
diff --git a/compatible/src/main/java/io/seata/metrics/exporter/Exporter.java b/compatible/src/main/java/io/seata/metrics/exporter/Exporter.java
new file mode 100644
index 0000000000..612b848442
--- /dev/null
+++ b/compatible/src/main/java/io/seata/metrics/exporter/Exporter.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.metrics.exporter;
+
+
+/**
+ * Exporter interface for metrics
+ *
+ */
+public interface Exporter extends org.apache.seata.metrics.exporter.Exporter {
+}
diff --git a/compatible/src/main/java/io/seata/metrics/registry/Registry.java b/compatible/src/main/java/io/seata/metrics/registry/Registry.java
new file mode 100644
index 0000000000..7bb8b78f79
--- /dev/null
+++ b/compatible/src/main/java/io/seata/metrics/registry/Registry.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.metrics.registry;
+
+
+/**
+ * Registry interface for metrics
+ *
+ */
+public interface Registry extends org.apache.seata.metrics.registry.Registry {
+}
diff --git a/compatible/src/main/java/io/seata/rm/AbstractRMHandler.java b/compatible/src/main/java/io/seata/rm/AbstractRMHandler.java
new file mode 100644
index 0000000000..9945ef6d93
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/AbstractRMHandler.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm;
+
+/**
+ * The Abstract RM event handler
+ *
+ */
+public abstract class AbstractRMHandler extends org.apache.seata.rm.AbstractRMHandler {
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java b/compatible/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java
new file mode 100644
index 0000000000..cd92c299fc
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/exec/InsertExecutor.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.exec;
+
+
+/**
+ * The interface Insert executor.
+ *
+ * @param <T> the type parameter
+ */
+public interface InsertExecutor<T> extends org.apache.seata.rm.datasource.exec.InsertExecutor<T> {
+
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/undo/UndoExecutorHolder.java b/compatible/src/main/java/io/seata/rm/datasource/undo/UndoExecutorHolder.java
new file mode 100644
index 0000000000..e8abfc206c
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/undo/UndoExecutorHolder.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.undo;
+
+
+/**
+ * The Type UndoExecutorHolder
+ *
+ */
+public interface UndoExecutorHolder extends org.apache.seata.rm.datasource.undo.UndoExecutorHolder {
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/undo/UndoLogManager.java b/compatible/src/main/java/io/seata/rm/datasource/undo/UndoLogManager.java
new file mode 100644
index 0000000000..502b15f737
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/undo/UndoLogManager.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.undo;
+
+
+/**
+ * The type Undo log manager.
+ *
+ */
+public interface UndoLogManager extends org.apache.seata.rm.datasource.undo.UndoLogManager {
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java
new file mode 100644
index 0000000000..1922e6e0b2
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/JacksonSerializer.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.undo.parser.spi;
+
+
+/**
+ * The interface Jackson serializer.
+ *
+ * @param <T> the type parameter
+ */
+public interface JacksonSerializer<T> extends org.apache.seata.rm.datasource.undo.parser.spi.JacksonSerializer<T> {
+
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java
new file mode 100644
index 0000000000..6f80a30edc
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/KryoTypeSerializer.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.undo.parser.spi;
+
+
+/**
+ * The interface Kryo type serializer.
+ *
+ * @param <T> the type parameter
+ */
+public interface KryoTypeSerializer<T> extends org.apache.seata.rm.datasource.undo.parser.spi.KryoTypeSerializer<T> {
+
+}
diff --git a/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java
new file mode 100644
index 0000000000..8ef05155cc
--- /dev/null
+++ b/compatible/src/main/java/io/seata/rm/datasource/undo/parser/spi/ProtostuffDelegate.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.rm.datasource.undo.parser.spi;
+
+
+/**
+ * The interface Protostuff delegate.
+ *
+ * @param <T> the type parameter
+ */
+public interface ProtostuffDelegate<T> extends org.apache.seata.rm.datasource.undo.parser.spi.ProtostuffDelegate<T> {
+}
diff --git a/compatible/src/main/java/io/seata/saga/engine/pcext/StateHandlerInterceptor.java b/compatible/src/main/java/io/seata/saga/engine/pcext/StateHandlerInterceptor.java
new file mode 100644
index 0000000000..01349086d3
--- /dev/null
+++ b/compatible/src/main/java/io/seata/saga/engine/pcext/StateHandlerInterceptor.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.saga.engine.pcext;
+
+/**
+ * StateHandler Interceptor
+ *
+ */
+public interface StateHandlerInterceptor extends org.apache.seata.saga.engine.pcext.StateHandlerInterceptor {
+}
diff --git a/compatible/src/main/java/io/seata/saga/engine/pcext/StateRouterInterceptor.java b/compatible/src/main/java/io/seata/saga/engine/pcext/StateRouterInterceptor.java
new file mode 100644
index 0000000000..4cd37eef0e
--- /dev/null
+++ b/compatible/src/main/java/io/seata/saga/engine/pcext/StateRouterInterceptor.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.saga.engine.pcext;
+
+
+import org.apache.seata.saga.engine.pcext.StateRouter;
+
+/**
+ * StateRouter Interceptor
+ *
+ * @see StateRouter
+ */
+public interface StateRouterInterceptor extends org.apache.seata.saga.engine.pcext.StateRouterInterceptor {
+}
diff --git a/compatible/src/main/java/io/seata/saga/statelang/parser/JsonParser.java b/compatible/src/main/java/io/seata/saga/statelang/parser/JsonParser.java
new file mode 100644
index 0000000000..e139e01eca
--- /dev/null
+++ b/compatible/src/main/java/io/seata/saga/statelang/parser/JsonParser.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.saga.statelang.parser;
+
+/**
+ *
+ * Json Parser
+ *
+ */
+public interface JsonParser extends org.apache.seata.saga.statelang.parser.JsonParser {
+
+}
diff --git a/compatible/src/main/java/io/seata/saga/statelang/validator/Rule.java b/compatible/src/main/java/io/seata/saga/statelang/validator/Rule.java
new file mode 100644
index 0000000000..55b620fb90
--- /dev/null
+++ b/compatible/src/main/java/io/seata/saga/statelang/validator/Rule.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.saga.statelang.validator;
+
+public interface Rule extends org.apache.seata.saga.statelang.validator.Rule {
+}
diff --git a/compatible/src/main/java/io/seata/spring/annotation/ScannerChecker.java b/compatible/src/main/java/io/seata/spring/annotation/ScannerChecker.java
new file mode 100644
index 0000000000..4bfee1f0fa
--- /dev/null
+++ b/compatible/src/main/java/io/seata/spring/annotation/ScannerChecker.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.spring.annotation;
+
+import org.apache.seata.spring.annotation.GlobalTransactionScanner;
+
+/**
+ * The Scanner checker for {@link GlobalTransactionScanner}
+ *
+ * @see GlobalTransactionScanner#wrapIfNecessary(Object, String, Object)
+ */
+public interface ScannerChecker extends org.apache.seata.spring.annotation.ScannerChecker {
+}
diff --git a/compatible/src/main/java/io/seata/sqlparser/EscapeHandler.java b/compatible/src/main/java/io/seata/sqlparser/EscapeHandler.java
new file mode 100644
index 0000000000..2976b0daf2
--- /dev/null
+++ b/compatible/src/main/java/io/seata/sqlparser/EscapeHandler.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.sqlparser;
+
+
+/**
+ * The interface Keyword checker.
+ *
+ */
+public interface EscapeHandler extends org.apache.seata.sqlparser.EscapeHandler {
+}
diff --git a/compatible/src/main/java/io/seata/sqlparser/SQLRecognizerFactory.java b/compatible/src/main/java/io/seata/sqlparser/SQLRecognizerFactory.java
new file mode 100644
index 0000000000..63d6a43b74
--- /dev/null
+++ b/compatible/src/main/java/io/seata/sqlparser/SQLRecognizerFactory.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.sqlparser;
+
+
+public interface SQLRecognizerFactory extends org.apache.seata.sqlparser.SQLRecognizerFactory {
+}
diff --git a/compatible/src/main/java/io/seata/sqlparser/druid/SQLOperateRecognizerHolder.java b/compatible/src/main/java/io/seata/sqlparser/druid/SQLOperateRecognizerHolder.java
new file mode 100644
index 0000000000..bfe8a96c77
--- /dev/null
+++ b/compatible/src/main/java/io/seata/sqlparser/druid/SQLOperateRecognizerHolder.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.sqlparser.druid;
+
+
+/**
+ * The interface SQLOperateRecognizerHolder
+ *
+ */
+public interface SQLOperateRecognizerHolder extends org.apache.seata.sqlparser.druid.SQLOperateRecognizerHolder {
+
+}
diff --git a/compatible/src/main/java/io/seata/sqlparser/struct/TableMetaCache.java b/compatible/src/main/java/io/seata/sqlparser/struct/TableMetaCache.java
new file mode 100644
index 0000000000..bcc2c0e50e
--- /dev/null
+++ b/compatible/src/main/java/io/seata/sqlparser/struct/TableMetaCache.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.sqlparser.struct;
+
+
+/**
+ * The type Table meta cache.
+ *
+ */
+public interface TableMetaCache extends org.apache.seata.sqlparser.struct.TableMetaCache {
+
+}
diff --git a/compatible/src/main/java/io/seata/sqlparser/util/DbTypeParser.java b/compatible/src/main/java/io/seata/sqlparser/util/DbTypeParser.java
new file mode 100644
index 0000000000..73b85f9e40
--- /dev/null
+++ b/compatible/src/main/java/io/seata/sqlparser/util/DbTypeParser.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.seata.sqlparser.util;
+
+
+public interface DbTypeParser extends org.apache.seata.sqlparser.util.DbTypeParser {
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org