This is an automated email from the ASF dual-hosted git repository.
jianbin 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 709bd30dba feature: saga-remove spring (#6370)
709bd30dba is described below
commit 709bd30dba729406f42d5ae281cfc14cf463ef1c
Author: wt_better <[email protected]>
AuthorDate: Thu Feb 29 16:44:59 2024 +0800
feature: saga-remove spring (#6370)
---
all/pom.xml | 10 +-
bom/pom.xml | 5 -
changes/en-us/2.x.md | 1 +
changes/zh-cn/2.x.md | 1 +
.../org/apache/seata/common/util/StringUtils.java | 19 ++
compatible/pom.xml | 12 +-
.../io/seata/saga/engine/StateMachineConfig.java | 8 -
.../engine/impl/DefaultStateMachineConfig.java | 7 +-
.../tx/api/interceptor/InvocationHandlerType.java | 10 +-
saga/pom.xml | 2 +-
saga/seata-saga-engine-store/pom.xml | 11 +-
.../seata/saga/engine/store/StateLangStore.java | 2 +-
.../seata/saga/engine/store/StateLogStore.java | 2 +-
...seata.saga.engine.pcext.StateHandlerInterceptor | 1 -
saga/seata-saga-engine/pom.xml | 16 +-
.../seata/saga/engine/StateMachineConfig.java | 11 +-
.../AbstractStateMachineConfig.java} | 345 ++++++++++-----------
.../seata/saga/engine/expression/ELExpression.java | 8 +-
.../expression/ExpressionFactoryManager.java | 2 +-
.../exception/ExceptionMatchExpression.java | 2 +-
.../exception/ExceptionMatchExpressionFactory.java | 1 +
.../expression/seq/SequenceExpressionFactory.java | 3 +-
.../engine/impl/ProcessCtrlStateMachineEngine.java | 3 +-
.../saga/engine/invoker/ServiceInvokerManager.java | 4 +-
.../seata/saga/engine/pcext/StateInstruction.java | 2 +-
.../engine/pcext/handlers/ChoiceStateHandler.java | 2 +-
.../pcext/handlers/ServiceTaskStateHandler.java | 7 +-
.../pcext/handlers/SubStateMachineHandler.java | 2 +-
.../InSagaBranchHandlerInterceptor.java | 0
.../ServiceTaskHandlerInterceptor.java | 12 +-
.../saga/engine/pcext/routers/TaskStateRouter.java | 2 +-
.../saga/engine/pcext/utils/ParameterUtils.java | 2 +-
.../saga/engine/repo/StateMachineRepository.java | 18 +-
.../repo/impl/StateMachineRepositoryImpl.java | 35 +--
...UUIDSeqGenerator.java => UUIDSeqGenerator.java} | 14 +-
.../seata/saga/engine/serializer/Serializer.java | 0
.../serializer/impl/ExceptionSerializer.java | 0
.../engine/serializer/impl/ParamsSerializer.java | 0
...seata.saga.engine.pcext.StateHandlerInterceptor | 3 +-
.../seata/saga/rm/StateMachineEngineHolder.java | 3 +-
saga/{seata-saga-tm => seata-saga-spring}/pom.xml | 33 +-
.../saga/engine/config/DbStateMachineConfig.java | 50 +--
.../engine/expression/spel/SpringELExpression.java | 4 +-
.../expression/spel/SpringELExpressionFactory.java | 13 +-
.../engine/impl/DefaultStateMachineConfig.java | 96 ++++++
.../invoker/impl/SpringBeanServiceInvoker.java | 0
.../store/db/DbAndReportTcStateLogStore.java | 4 +-
.../tm/DefaultSagaTransactionalTemplate.java | 31 +-
.../saga/engine}/tm/SagaTransactionalTemplate.java | 4 +-
.../seata/saga/engine}/utils/ResourceUtil.java | 13 +-
.../statelang/parser/utils/ResourceUtilTests.java | 7 +-
.../resources/statelang/simple_statemachine.json | 138 +++++++++
saga/seata-saga-statelang/pom.xml | 8 -
.../impl/CompensateSubStateMachineStateParser.java | 2 +-
.../parser/impl/SubStateMachineParser.java | 2 +-
.../parser/utils/DesignerJsonTransformer.java | 2 +-
.../saga/statelang/parser/StateParserTests.java | 44 +--
.../autoconfigure/SeataSagaAutoConfiguration.java | 2 +-
test/pom.xml | 2 +-
.../seata/saga/engine/db/StateMachineDBTests.java | 2 +
.../StateMachineAsyncDBMockServerTests.java | 2 +
.../mockserver/StateMachineDBMockServerTests.java | 2 +
.../saga/engine/mock/MockGlobalTransaction.java | 4 +-
.../engine/mock/MockSagaTransactionTemplate.java | 2 +-
.../statemachine_engine_db_mockserver_test.xml | 21 +-
.../saga/spring/statemachine_engine_db_test.xml | 22 +-
.../saga/spring/statemachine_engine_test.xml | 6 +-
67 files changed, 648 insertions(+), 456 deletions(-)
diff --git a/all/pom.xml b/all/pom.xml
index 04aa719087..0c10a34830 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -316,19 +316,13 @@
</dependency>
<dependency>
<groupId>org.apache.seata</groupId>
- <artifactId>seata-saga-tm</artifactId>
+ <artifactId>seata-saga-engine-store</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.seata</groupId>
- <artifactId>seata-saga-engine-store</artifactId>
+ <artifactId>seata-saga-spring</artifactId>
<version>${project.version}</version>
- <exclusions>
- <exclusion>
- <groupId>${project.groupId}</groupId>
- <artifactId>seata-serializer-all</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<!-- spring -->
diff --git a/bom/pom.xml b/bom/pom.xml
index 73cff054d9..224c84d1f6 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -333,11 +333,6 @@
<artifactId>seata-saga-rm</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.seata</groupId>
- <artifactId>seata-saga-tm</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.seata</groupId>
<artifactId>seata-saga-engine-store</artifactId>
diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 4d291c9a98..908fd92e84 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -3,6 +3,7 @@ Add changes here for all PR submitted to the 2.x branch.
<!-- Please add the `changes` to the following
location(feature/bugfix/optimize/test) based on the type of PR -->
### feature:
+- [[#6370](https://github.com/seata/seata/pull/6370)] seata saga decouple
spring, optimize architecture.
- [[#6205](https://github.com/apache/incubator-seata/pull/6205)] mock server
- [[#6169](https://github.com/apache/incubator-seata/pull/6169)] full support
for states in the refactored state machine designer
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index afa94b86b4..c9e3ca17aa 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -3,6 +3,7 @@
<!-- 请根据PR的类型添加 `变更记录` 到以下对应位置(feature/bugfix/optimize/test) 下 -->
### feature:
+- [[#6370](https://github.com/seata/seata/pull/6370)] seata saga spring接耦、架构优化。
- [[#6205](https://github.com/apache/incubator-seata/pull/6205)] 提供mock server
- [[#6169](https://github.com/apache/incubator-seata/pull/6169)] 支持新版本状态机设计器
diff --git a/common/src/main/java/org/apache/seata/common/util/StringUtils.java
b/common/src/main/java/org/apache/seata/common/util/StringUtils.java
index 5bfe519eb3..05859cf474 100644
--- a/common/src/main/java/org/apache/seata/common/util/StringUtils.java
+++ b/common/src/main/java/org/apache/seata/common/util/StringUtils.java
@@ -427,4 +427,23 @@ public class StringUtils {
return builder.toString();
}
+ public static boolean hasLength(CharSequence str) {
+ return str != null && str.length() > 0;
+ }
+
+
+ public static boolean hasText(CharSequence str) {
+ if (str == null || str.length() == 0) {
+ return false;
+ }
+
+ int strLen = str.length();
+ for (int i = 0; i < strLen; i++) {
+ if (!Character.isWhitespace(str.charAt(i))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
}
diff --git a/compatible/pom.xml b/compatible/pom.xml
index 23690f9ef2..42f961df6e 100644
--- a/compatible/pom.xml
+++ b/compatible/pom.xml
@@ -34,12 +34,7 @@
<dependencies>
<dependency>
<groupId>org.apache.seata</groupId>
- <artifactId>seata-saga-engine</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.seata</groupId>
- <artifactId>seata-saga-engine-store</artifactId>
+ <artifactId>seata-saga-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -82,11 +77,6 @@
<artifactId>seata-rm-datasource</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.seata</groupId>
- <artifactId>seata-integration-tx-api</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
diff --git
a/compatible/src/main/java/io/seata/saga/engine/StateMachineConfig.java
b/compatible/src/main/java/io/seata/saga/engine/StateMachineConfig.java
index 60411b99c8..377b59dca6 100644
--- a/compatible/src/main/java/io/seata/saga/engine/StateMachineConfig.java
+++ b/compatible/src/main/java/io/seata/saga/engine/StateMachineConfig.java
@@ -26,7 +26,6 @@ import org.apache.seata.saga.engine.store.StateLangStore;
import org.apache.seata.saga.engine.store.StateLogStore;
import org.apache.seata.saga.engine.strategy.StatusDecisionStrategy;
import org.apache.seata.saga.proctrl.eventing.impl.ProcessCtrlEventPublisher;
-import org.springframework.context.ApplicationContext;
import javax.script.ScriptEngineManager;
import java.util.concurrent.ThreadPoolExecutor;
@@ -121,13 +120,6 @@ public interface StateMachineConfig {
*/
ProcessCtrlEventPublisher getAsyncProcessCtrlEventPublisher();
- /**
- * Gets get application context.
- *
- * @return the get application context
- */
- ApplicationContext getApplicationContext();
-
/**
* Gets get thread pool executor.
*
diff --git
a/compatible/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java
b/compatible/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java
index 1f7c0b86cb..ab4ce4f348 100644
---
a/compatible/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java
+++
b/compatible/src/main/java/io/seata/saga/engine/impl/DefaultStateMachineConfig.java
@@ -35,10 +35,10 @@ import org.apache.seata.saga.statelang.domain.StateMachine;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
-import org.springframework.core.io.Resource;
import javax.script.ScriptEngineManager;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
@@ -146,8 +146,8 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
}
@Override
- public void registryByResources(Resource[] resources, String
tenantId) throws IOException {
- repository.registryByResources(resources, tenantId);
+ public void registryByResources(InputStream[]
resourceAsStreamArray, String tenantId) throws IOException{
+ repository.registryByResources(resourceAsStreamArray,
tenantId);
}
};
}
@@ -189,7 +189,6 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
actual.setAsyncProcessCtrlEventPublisher(asyncProcessCtrlEventPublisher);
}
- @Override
public ApplicationContext getApplicationContext() {
return actual.getApplicationContext();
}
diff --git
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
b/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
index 7d909105a0..3825f45e4c 100644
---
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
+++
b/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
@@ -21,6 +21,14 @@ package org.apache.seata.integration.tx.api.interceptor;
*/
public enum InvocationHandlerType {
- GlobalTransactional, TwoPhaseAnnotation
+ /**
+ * GlobalTransactional InvocationHandler
+ */
+ GlobalTransactional,
+
+ /**
+ * TwoPhase InvocationHandler
+ */
+ TwoPhaseAnnotation
}
diff --git a/saga/pom.xml b/saga/pom.xml
index a9fc17a2cc..68185fed44 100644
--- a/saga/pom.xml
+++ b/saga/pom.xml
@@ -36,8 +36,8 @@
<module>seata-saga-statelang</module>
<module>seata-saga-engine</module>
<module>seata-saga-rm</module>
- <module>seata-saga-tm</module>
<module>seata-saga-engine-store</module>
+ <module>seata-saga-spring</module>
</modules>
<dependencies>
diff --git a/saga/seata-saga-engine-store/pom.xml
b/saga/seata-saga-engine-store/pom.xml
index cfca3cdf72..59e19e0175 100644
--- a/saga/seata-saga-engine-store/pom.xml
+++ b/saga/seata-saga-engine-store/pom.xml
@@ -33,22 +33,17 @@
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-saga-engine</artifactId>
+ <artifactId>seata-saga-statelang</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-saga-rm</artifactId>
+ <artifactId>seata-saga-processctrl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-saga-tm</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>seata-serializer-all</artifactId>
+ <artifactId>seata-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
b/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
similarity index 99%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
rename to
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
index 0f29e7bff7..9e9f4d84f0 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
+++
b/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLangStore.java
@@ -48,4 +48,4 @@ public interface StateLangStore {
* @return whether the store state machine action is successful
*/
boolean storeStateMachine(StateMachine stateMachine);
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
b/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
similarity index 99%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
rename to
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
index f86cdd3b42..29c6cac678 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
+++
b/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/StateLogStore.java
@@ -114,4 +114,4 @@ public interface StateLogStore {
* clear the LocalThread
*/
void clearUp();
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-engine-store/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
b/saga/seata-saga-engine-store/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
deleted file mode 100644
index 4b80a1f6fe..0000000000
---
a/saga/seata-saga-engine-store/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.seata.saga.engine.pcext.interceptors.InSagaBranchHandlerInterceptor
\ No newline at end of file
diff --git a/saga/seata-saga-engine/pom.xml b/saga/seata-saga-engine/pom.xml
index eb07c03469..2b1dacf86f 100644
--- a/saga/seata-saga-engine/pom.xml
+++ b/saga/seata-saga-engine/pom.xml
@@ -38,20 +38,18 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-saga-processctrl</artifactId>
+ <artifactId>seata-saga-engine-store</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>seata-saga-processctrl</artifactId>
+ <version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-expression</artifactId>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>seata-tm</artifactId>
+ <version>${project.version}</version>
</dependency>
</dependencies>
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/StateMachineConfig.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/StateMachineConfig.java
index 5a628b0648..14f9a272a2 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/StateMachineConfig.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/StateMachineConfig.java
@@ -16,8 +16,6 @@
*/
package org.apache.seata.saga.engine;
-import java.util.concurrent.ThreadPoolExecutor;
-
import org.apache.seata.saga.engine.expression.ExpressionFactoryManager;
import org.apache.seata.saga.engine.expression.ExpressionResolver;
import org.apache.seata.saga.engine.invoker.ServiceInvokerManager;
@@ -28,9 +26,9 @@ import org.apache.seata.saga.engine.store.StateLangStore;
import org.apache.seata.saga.engine.store.StateLogStore;
import org.apache.seata.saga.engine.strategy.StatusDecisionStrategy;
import org.apache.seata.saga.proctrl.eventing.impl.ProcessCtrlEventPublisher;
-import org.springframework.context.ApplicationContext;
import javax.script.ScriptEngineManager;
+import java.util.concurrent.ThreadPoolExecutor;
/**
* StateMachineConfig
@@ -122,13 +120,6 @@ public interface StateMachineConfig {
*/
ProcessCtrlEventPublisher getAsyncProcessCtrlEventPublisher();
- /**
- * Gets get application context.
- *
- * @return the get application context
- */
- ApplicationContext getApplicationContext();
-
/**
* Gets get thread pool executor.
*
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/config/AbstractStateMachineConfig.java
similarity index 74%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/config/AbstractStateMachineConfig.java
index 79a3ffb924..7c9122c182 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/config/AbstractStateMachineConfig.java
@@ -14,14 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.saga.engine.impl;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ThreadPoolExecutor;
-import javax.script.ScriptEngineManager;
+package org.apache.seata.saga.engine.config;
import org.apache.seata.common.loader.EnhancedServiceLoader;
import org.apache.seata.saga.engine.StateMachineConfig;
@@ -30,9 +23,7 @@ import
org.apache.seata.saga.engine.expression.ExpressionResolver;
import
org.apache.seata.saga.engine.expression.exception.ExceptionMatchExpressionFactory;
import org.apache.seata.saga.engine.expression.impl.DefaultExpressionResolver;
import org.apache.seata.saga.engine.expression.seq.SequenceExpressionFactory;
-import org.apache.seata.saga.engine.expression.spel.SpringELExpressionFactory;
import org.apache.seata.saga.engine.invoker.ServiceInvokerManager;
-import org.apache.seata.saga.engine.invoker.impl.SpringBeanServiceInvoker;
import org.apache.seata.saga.engine.pcext.InterceptableStateHandler;
import org.apache.seata.saga.engine.pcext.InterceptableStateRouter;
import org.apache.seata.saga.engine.pcext.StateHandler;
@@ -46,7 +37,7 @@ import
org.apache.seata.saga.engine.repo.StateMachineRepository;
import org.apache.seata.saga.engine.repo.impl.StateLogRepositoryImpl;
import org.apache.seata.saga.engine.repo.impl.StateMachineRepositoryImpl;
import org.apache.seata.saga.engine.sequence.SeqGenerator;
-import org.apache.seata.saga.engine.sequence.SpringJvmUUIDSeqGenerator;
+import org.apache.seata.saga.engine.sequence.UUIDSeqGenerator;
import org.apache.seata.saga.engine.store.StateLangStore;
import org.apache.seata.saga.engine.store.StateLogStore;
import org.apache.seata.saga.engine.strategy.StatusDecisionStrategy;
@@ -63,107 +54,117 @@ import
org.apache.seata.saga.proctrl.handler.RouterHandler;
import org.apache.seata.saga.proctrl.impl.ProcessControllerImpl;
import org.apache.seata.saga.proctrl.process.impl.CustomizeBusinessProcessor;
import org.apache.seata.saga.statelang.domain.DomainConstants;
-import org.apache.seata.saga.statelang.parser.utils.ResourceUtil;
-import org.apache.commons.lang.ArrayUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.core.io.Resource;
+import javax.script.ScriptEngineManager;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import static
org.apache.seata.common.DefaultValues.DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE;
+import static
org.apache.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE;
import static
org.apache.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE;
import static
org.apache.seata.common.DefaultValues.DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE;
import static org.apache.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER;
/**
- * Default state machine configuration
- *
+ * Abstract StateMachineConfig
*/
-public class DefaultStateMachineConfig implements StateMachineConfig,
ApplicationContextAware, InitializingBean {
+public abstract class AbstractStateMachineConfig implements StateMachineConfig
{
- private static final Logger LOGGER =
LoggerFactory.getLogger(DefaultStateMachineConfig.class);
-
- private static final int DEFAULT_TRANS_OPER_TIMEOUT = 60000 * 30;
+ private static final int DEFAULT_TRANS_OPERATION_TIMEOUT = 60000 * 30;
private static final int DEFAULT_SERVICE_INVOKE_TIMEOUT = 60000 * 5;
- private int transOperationTimeout = DEFAULT_TRANS_OPER_TIMEOUT;
- private int serviceInvokeTimeout = DEFAULT_SERVICE_INVOKE_TIMEOUT;
+ private ExpressionFactoryManager expressionFactoryManager;
+ private ExpressionResolver expressionResolver;
private StateLogRepository stateLogRepository;
+ /**
+ * NullAble
+ */
private StateLogStore stateLogStore;
- private StateLangStore stateLangStore;
- private ExpressionFactoryManager expressionFactoryManager;
- private ExpressionResolver expressionResolver;
private StateMachineRepository stateMachineRepository;
+ /**
+ * NullAble
+ */
+ private StateLangStore stateLangStore;
+
private StatusDecisionStrategy statusDecisionStrategy;
- private SeqGenerator seqGenerator;
+
+ private SeqGenerator seqGenerator = new UUIDSeqGenerator();
private ProcessCtrlEventPublisher syncProcessCtrlEventPublisher;
private ProcessCtrlEventPublisher asyncProcessCtrlEventPublisher;
- private ApplicationContext applicationContext;
- private ThreadPoolExecutor threadPoolExecutor;
+
+ private int transOperationTimeout = DEFAULT_TRANS_OPERATION_TIMEOUT;
+ private int serviceInvokeTimeout = DEFAULT_SERVICE_INVOKE_TIMEOUT;
+
private boolean enableAsync = false;
+ private ThreadPoolExecutor threadPoolExecutor;
+
private ServiceInvokerManager serviceInvokerManager;
+ private ScriptEngineManager scriptEngineManager;
- private boolean autoRegisterResources = true;
- private String[] resources = new
String[]{"classpath*:seata/saga/statelang/**/*.json"};
private String charset = "UTF-8";
private String defaultTenantId = "000001";
- private ScriptEngineManager scriptEngineManager;
+
private String sagaJsonParser = DEFAULT_SAGA_JSON_PARSER;
+
+ private boolean autoRegisterResources = true;
+
+ private InputStream[] stateMachineDefInputStreamArray;
+
private boolean sagaRetryPersistModeUpdate =
DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE;
private boolean sagaCompensatePersistModeUpdate =
DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE;
- protected void init() throws Exception {
+ private boolean rmReportSuccessEnable =
DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE;
+ private boolean sagaBranchRegisterEnable =
DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE;
+
+ public void init() throws Exception {
+ // init seqGenerator
+ if (seqGenerator == null) {
+ seqGenerator = new UUIDSeqGenerator();
+ }
+ // init ExpressionFactoryManager
if (expressionFactoryManager == null) {
expressionFactoryManager = new ExpressionFactoryManager();
- SpringELExpressionFactory springELExpressionFactory = new
SpringELExpressionFactory();
-
springELExpressionFactory.setApplicationContext(getApplicationContext());
-
expressionFactoryManager.putExpressionFactory(ExpressionFactoryManager.DEFAULT_EXPRESSION_TYPE,
- springELExpressionFactory);
-
SequenceExpressionFactory sequenceExpressionFactory = new
SequenceExpressionFactory();
- sequenceExpressionFactory.setSeqGenerator(getSeqGenerator());
-
expressionFactoryManager.putExpressionFactory(DomainConstants.EXPRESSION_TYPE_SEQUENCE,
- sequenceExpressionFactory);
+ sequenceExpressionFactory.setSeqGenerator(seqGenerator);
+
expressionFactoryManager.putExpressionFactory(DomainConstants.EXPRESSION_TYPE_SEQUENCE,
sequenceExpressionFactory);
ExceptionMatchExpressionFactory exceptionMatchExpressionFactory =
new ExceptionMatchExpressionFactory();
-
expressionFactoryManager.putExpressionFactory(DomainConstants.EXPRESSION_TYPE_EXCEPTION,
- exceptionMatchExpressionFactory);
+
expressionFactoryManager.putExpressionFactory(DomainConstants.EXPRESSION_TYPE_EXCEPTION,
exceptionMatchExpressionFactory);
}
+ // init expressionResolver
if (expressionResolver == null) {
DefaultExpressionResolver defaultExpressionResolver = new
DefaultExpressionResolver();
defaultExpressionResolver.setExpressionFactoryManager(expressionFactoryManager);
expressionResolver = defaultExpressionResolver;
}
- if (stateMachineRepository == null) {
- StateMachineRepositoryImpl stateMachineRepository = new
StateMachineRepositoryImpl();
- stateMachineRepository.setCharset(charset);
- stateMachineRepository.setSeqGenerator(seqGenerator);
- stateMachineRepository.setStateLangStore(stateLangStore);
- stateMachineRepository.setDefaultTenantId(defaultTenantId);
- stateMachineRepository.setJsonParserName(sagaJsonParser);
- this.stateMachineRepository = stateMachineRepository;
+ if (stateLogRepository == null) {
+ StateLogRepositoryImpl defaultStateLogRepository = new
StateLogRepositoryImpl();
+ defaultStateLogRepository.setStateLogStore(stateLogStore);
+ this.stateLogRepository = defaultStateLogRepository;
}
- //stateMachineRepository may be overridden, so move
`stateMachineRepository.registryByResources()` here.
- if (autoRegisterResources && ArrayUtils.isNotEmpty(resources)) {
- try {
- Resource[] resources =
ResourceUtil.getResources(this.resources);
- stateMachineRepository.registryByResources(resources,
defaultTenantId);
- } catch (IOException e) {
- LOGGER.error("Load State Language Resources failed.", e);
- }
+
+ if (stateMachineRepository == null) {
+ StateMachineRepositoryImpl defaultStateMachineRepository = new
StateMachineRepositoryImpl();
+ defaultStateMachineRepository.setCharset(charset);
+ defaultStateMachineRepository.setSeqGenerator(seqGenerator);
+ defaultStateMachineRepository.setDefaultTenantId(defaultTenantId);
+ defaultStateMachineRepository.setJsonParserName(sagaJsonParser);
+ defaultStateMachineRepository.setStateLangStore(stateLangStore);
+ this.stateMachineRepository = defaultStateMachineRepository;
}
- if (stateLogRepository == null) {
- StateLogRepositoryImpl stateLogRepositoryImpl = new
StateLogRepositoryImpl();
- stateLogRepositoryImpl.setStateLogStore(stateLogStore);
- this.stateLogRepository = stateLogRepositoryImpl;
+ // auto register resources
+ if (autoRegisterResources && stateMachineDefInputStreamArray != null) {
+
stateMachineRepository.registryByResources(stateMachineDefInputStreamArray,
defaultTenantId);
}
if (statusDecisionStrategy == null) {
@@ -205,13 +206,6 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
if (this.serviceInvokerManager == null) {
this.serviceInvokerManager = new ServiceInvokerManager();
-
- SpringBeanServiceInvoker springBeanServiceInvoker = new
SpringBeanServiceInvoker();
-
springBeanServiceInvoker.setApplicationContext(getApplicationContext());
- springBeanServiceInvoker.setThreadPoolExecutor(threadPoolExecutor);
- springBeanServiceInvoker.setSagaJsonParser(getSagaJsonParser());
-
this.serviceInvokerManager.putServiceInvoker(DomainConstants.SERVICE_TYPE_SPRING_BEAN,
- springBeanServiceInvoker);
}
if (this.scriptEngineManager == null) {
@@ -219,8 +213,7 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
}
}
- protected ProcessControllerImpl
createProcessorController(ProcessCtrlEventPublisher eventPublisher) throws
Exception {
-
+ public ProcessControllerImpl
createProcessorController(ProcessCtrlEventPublisher eventPublisher) throws
Exception {
StateMachineProcessRouter stateMachineProcessRouter = new
StateMachineProcessRouter();
stateMachineProcessRouter.initDefaultStateRouters();
loadStateRouterInterceptors(stateMachineProcessRouter.getStateRouters());
@@ -252,7 +245,7 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
return processorController;
}
- protected void loadStateHandlerInterceptors(Map<String, StateHandler>
stateHandlerMap) {
+ public void loadStateHandlerInterceptors(Map<String, StateHandler>
stateHandlerMap) {
for (StateHandler stateHandler : stateHandlerMap.values()) {
if (stateHandler instanceof InterceptableStateHandler) {
InterceptableStateHandler interceptableStateHandler =
(InterceptableStateHandler) stateHandler;
@@ -261,16 +254,12 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
if
(interceptor.match(interceptableStateHandler.getClass())) {
interceptableStateHandler.addInterceptor(interceptor);
}
-
- if (interceptor instanceof ApplicationContextAware) {
- ((ApplicationContextAware)
interceptor).setApplicationContext(getApplicationContext());
- }
}
}
}
}
- protected void loadStateRouterInterceptors(Map<String, StateRouter>
stateRouterMap) {
+ public void loadStateRouterInterceptors(Map<String, StateRouter>
stateRouterMap) {
for (StateRouter stateRouter : stateRouterMap.values()) {
if (stateRouter instanceof InterceptableStateRouter) {
InterceptableStateRouter interceptableStateRouter =
(InterceptableStateRouter) stateRouter;
@@ -279,27 +268,19 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
if
(interceptor.match(interceptableStateRouter.getClass())) {
interceptableStateRouter.addInterceptor(interceptor);
}
-
- if (interceptor instanceof ApplicationContextAware) {
- ((ApplicationContextAware)
interceptor).setApplicationContext(getApplicationContext());
- }
}
}
}
}
@Override
- public void afterPropertiesSet() throws Exception {
- init();
+ public StateLogRepository getStateLogRepository() {
+ return stateLogRepository;
}
@Override
public StateLogStore getStateLogStore() {
- return this.stateLogStore;
- }
-
- public void setStateLogStore(StateLogStore stateLogStore) {
- this.stateLogStore = stateLogStore;
+ return stateLogStore;
}
@Override
@@ -307,18 +288,9 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
return stateLangStore;
}
- public void setStateLangStore(StateLangStore stateLangStore) {
- this.stateLangStore = stateLangStore;
- }
-
@Override
public ExpressionFactoryManager getExpressionFactoryManager() {
- return this.expressionFactoryManager;
- }
-
- public void setExpressionFactoryManager(ExpressionFactoryManager
expressionFactoryManager) {
- this.expressionFactoryManager = expressionFactoryManager;
-
this.expressionResolver.setExpressionFactoryManager(expressionFactoryManager);
+ return expressionFactoryManager;
}
@Override
@@ -326,17 +298,14 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
return expressionResolver;
}
- public void setExpressionResolver(ExpressionResolver expressionResolver) {
- this.expressionResolver = expressionResolver;
- }
-
@Override
public String getCharset() {
- return this.charset;
+ return charset;
}
- public void setCharset(String charset) {
- this.charset = charset;
+ @Override
+ public String getDefaultTenantId() {
+ return defaultTenantId;
}
@Override
@@ -344,36 +313,16 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
return stateMachineRepository;
}
- public void setStateMachineRepository(StateMachineRepository
stateMachineRepository) {
- this.stateMachineRepository = stateMachineRepository;
- }
-
@Override
public StatusDecisionStrategy getStatusDecisionStrategy() {
return statusDecisionStrategy;
}
- public void setStatusDecisionStrategy(StatusDecisionStrategy
statusDecisionStrategy) {
- this.statusDecisionStrategy = statusDecisionStrategy;
- }
-
- @SuppressWarnings("lgtm[java/unsafe-double-checked-locking]")
@Override
public SeqGenerator getSeqGenerator() {
- if (seqGenerator == null) {
- synchronized (this) {
- if (seqGenerator == null) {
- seqGenerator = new SpringJvmUUIDSeqGenerator();
- }
- }
- }
return seqGenerator;
}
- public void setSeqGenerator(SeqGenerator seqGenerator) {
- this.seqGenerator = seqGenerator;
- }
-
@Override
public ProcessCtrlEventPublisher getProcessCtrlEventPublisher() {
return syncProcessCtrlEventPublisher;
@@ -384,112 +333,134 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
return asyncProcessCtrlEventPublisher;
}
- public void setAsyncProcessCtrlEventPublisher(ProcessCtrlEventPublisher
asyncProcessCtrlEventPublisher) {
- this.asyncProcessCtrlEventPublisher = asyncProcessCtrlEventPublisher;
+ @Override
+ public ThreadPoolExecutor getThreadPoolExecutor() {
+ return threadPoolExecutor;
}
@Override
- public ApplicationContext getApplicationContext() {
- return applicationContext;
+ public boolean isEnableAsync() {
+ return enableAsync;
}
@Override
- public void setApplicationContext(ApplicationContext applicationContext) {
- this.applicationContext = applicationContext;
+ public ServiceInvokerManager getServiceInvokerManager() {
+ return serviceInvokerManager;
}
@Override
- public ThreadPoolExecutor getThreadPoolExecutor() {
- return threadPoolExecutor;
+ public int getTransOperationTimeout() {
+ return transOperationTimeout;
}
- public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) {
- this.threadPoolExecutor = threadPoolExecutor;
+ @Override
+ public int getServiceInvokeTimeout() {
+ return serviceInvokeTimeout;
}
@Override
- public boolean isEnableAsync() {
- return enableAsync;
+ public ScriptEngineManager getScriptEngineManager() {
+ return scriptEngineManager;
}
- public void setEnableAsync(boolean enableAsync) {
- this.enableAsync = enableAsync;
+ public void setExpressionFactoryManager(ExpressionFactoryManager
expressionFactoryManager) {
+ this.expressionFactoryManager = expressionFactoryManager;
}
- @Override
- public StateLogRepository getStateLogRepository() {
- return stateLogRepository;
+ public void setExpressionResolver(ExpressionResolver expressionResolver) {
+ this.expressionResolver = expressionResolver;
}
public void setStateLogRepository(StateLogRepository stateLogRepository) {
this.stateLogRepository = stateLogRepository;
}
- public void setSyncProcessCtrlEventPublisher(ProcessCtrlEventPublisher
syncProcessCtrlEventPublisher) {
- this.syncProcessCtrlEventPublisher = syncProcessCtrlEventPublisher;
- }
-
- public void setAutoRegisterResources(boolean autoRegisterResources) {
- this.autoRegisterResources = autoRegisterResources;
+ public void setStateLogStore(StateLogStore stateLogStore) {
+ this.stateLogStore = stateLogStore;
}
- public void setResources(String[] resources) {
- this.resources = resources;
+ public void setStateMachineRepository(StateMachineRepository
stateMachineRepository) {
+ this.stateMachineRepository = stateMachineRepository;
}
- @Override
- public ServiceInvokerManager getServiceInvokerManager() {
- return serviceInvokerManager;
+ public void setStateLangStore(StateLangStore stateLangStore) {
+ this.stateLangStore = stateLangStore;
}
- public void setServiceInvokerManager(ServiceInvokerManager
serviceInvokerManager) {
- this.serviceInvokerManager = serviceInvokerManager;
+ public void setStatusDecisionStrategy(StatusDecisionStrategy
statusDecisionStrategy) {
+ this.statusDecisionStrategy = statusDecisionStrategy;
}
- @Override
- public String getDefaultTenantId() {
- return defaultTenantId;
+ public void setSeqGenerator(SeqGenerator seqGenerator) {
+ this.seqGenerator = seqGenerator;
}
- public void setDefaultTenantId(String defaultTenantId) {
- this.defaultTenantId = defaultTenantId;
+ public void setSyncProcessCtrlEventPublisher(
+ ProcessCtrlEventPublisher syncProcessCtrlEventPublisher) {
+ this.syncProcessCtrlEventPublisher = syncProcessCtrlEventPublisher;
}
- @Override
- public int getTransOperationTimeout() {
- return transOperationTimeout;
+ public void setAsyncProcessCtrlEventPublisher(
+ ProcessCtrlEventPublisher asyncProcessCtrlEventPublisher) {
+ this.asyncProcessCtrlEventPublisher = asyncProcessCtrlEventPublisher;
}
public void setTransOperationTimeout(int transOperationTimeout) {
this.transOperationTimeout = transOperationTimeout;
}
- @Override
- public int getServiceInvokeTimeout() {
- return serviceInvokeTimeout;
- }
-
public void setServiceInvokeTimeout(int serviceInvokeTimeout) {
this.serviceInvokeTimeout = serviceInvokeTimeout;
}
- @Override
- public ScriptEngineManager getScriptEngineManager() {
- return scriptEngineManager;
+ public void setEnableAsync(boolean enableAsync) {
+ this.enableAsync = enableAsync;
+ }
+
+ public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) {
+ this.threadPoolExecutor = threadPoolExecutor;
+ }
+
+ public void setServiceInvokerManager(ServiceInvokerManager
serviceInvokerManager) {
+ this.serviceInvokerManager = serviceInvokerManager;
}
public void setScriptEngineManager(ScriptEngineManager
scriptEngineManager) {
this.scriptEngineManager = scriptEngineManager;
}
- public String getSagaJsonParser() {
- return sagaJsonParser;
+ public void setCharset(String charset) {
+ this.charset = charset;
+ }
+
+ public void setDefaultTenantId(String defaultTenantId) {
+ this.defaultTenantId = defaultTenantId;
}
public void setSagaJsonParser(String sagaJsonParser) {
this.sagaJsonParser = sagaJsonParser;
}
+ public void setAutoRegisterResources(boolean autoRegisterResources) {
+ this.autoRegisterResources = autoRegisterResources;
+ }
+
+ public void setStateMachineDefInputStreamArray(InputStream[]
stateMachineDefInputStreamArray) {
+ this.stateMachineDefInputStreamArray = stateMachineDefInputStreamArray;
+ }
+
+ public String getSagaJsonParser() {
+ return sagaJsonParser;
+ }
+
+ public boolean isAutoRegisterResources() {
+ return autoRegisterResources;
+ }
+
+ public InputStream[] getStateMachineDefInputStreamArray() {
+ return stateMachineDefInputStreamArray;
+ }
+
public boolean isSagaRetryPersistModeUpdate() {
return sagaRetryPersistModeUpdate;
}
@@ -505,4 +476,20 @@ public class DefaultStateMachineConfig implements
StateMachineConfig, Applicatio
public void setSagaCompensatePersistModeUpdate(boolean
sagaCompensatePersistModeUpdate) {
this.sagaCompensatePersistModeUpdate = sagaCompensatePersistModeUpdate;
}
-}
+
+ public boolean isRmReportSuccessEnable() {
+ return rmReportSuccessEnable;
+ }
+
+ public void setRmReportSuccessEnable(boolean rmReportSuccessEnable) {
+ this.rmReportSuccessEnable = rmReportSuccessEnable;
+ }
+
+ public boolean isSagaBranchRegisterEnable() {
+ return sagaBranchRegisterEnable;
+ }
+
+ public void setSagaBranchRegisterEnable(boolean sagaBranchRegisterEnable) {
+ this.sagaBranchRegisterEnable = sagaBranchRegisterEnable;
+ }
+}
\ No newline at end of file
diff --git
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ELExpression.java
similarity index 82%
copy from
integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
copy to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ELExpression.java
index 7d909105a0..aa1ee7ec1c 100644
---
a/integration-tx-api/src/main/java/org/apache/seata/integration/tx/api/interceptor/InvocationHandlerType.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ELExpression.java
@@ -14,13 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.integration.tx.api.interceptor;
+package org.apache.seata.saga.engine.expression;
/**
- * The InvocationHandlerType enum
+ * ELExpression
*/
-public enum InvocationHandlerType {
-
- GlobalTransactional, TwoPhaseAnnotation
+public interface ELExpression extends Expression {
}
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ExpressionFactoryManager.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ExpressionFactoryManager.java
index f913f5d416..0cfa37cc65 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ExpressionFactoryManager.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/ExpressionFactoryManager.java
@@ -29,7 +29,7 @@ public class ExpressionFactoryManager {
public static final String DEFAULT_EXPRESSION_TYPE = "Default";
- private Map<String, ExpressionFactory> expressionFactoryMap = new
ConcurrentHashMap<>();
+ private final Map<String, ExpressionFactory> expressionFactoryMap = new
ConcurrentHashMap<>();
public ExpressionFactory getExpressionFactory(String expressionType) {
if (StringUtils.isBlank(expressionType)) {
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpression.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpression.java
index e8e1b3569e..3b54af53f2 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpression.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpression.java
@@ -17,11 +17,11 @@
package org.apache.seata.saga.engine.expression.exception;
import org.apache.seata.common.exception.FrameworkErrorCode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
import org.apache.seata.saga.engine.expression.Expression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
/**
* Exception match evaluator expression
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpressionFactory.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpressionFactory.java
index 22d2f0ad64..467f060248 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpressionFactory.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/exception/ExceptionMatchExpressionFactory.java
@@ -24,6 +24,7 @@ import
org.apache.seata.saga.engine.expression.ExpressionFactory;
*
*/
public class ExceptionMatchExpressionFactory implements ExpressionFactory {
+
@Override
public Expression createExpression(String expressionString) {
ExceptionMatchExpression expression = new ExceptionMatchExpression();
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/seq/SequenceExpressionFactory.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/seq/SequenceExpressionFactory.java
index 81e861e41d..e7b8742185 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/seq/SequenceExpressionFactory.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/seq/SequenceExpressionFactory.java
@@ -16,14 +16,13 @@
*/
package org.apache.seata.saga.engine.expression.seq;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.expression.Expression;
import org.apache.seata.saga.engine.expression.ExpressionFactory;
import org.apache.seata.saga.engine.sequence.SeqGenerator;
-import org.springframework.util.StringUtils;
/**
* Sequence expression factory
- *
*/
public class SequenceExpressionFactory implements ExpressionFactory {
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java
index 3b3c2f5a14..e559d6c770 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/impl/ProcessCtrlStateMachineEngine.java
@@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.seata.common.exception.FrameworkErrorCode;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.AsyncCallback;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.StateMachineEngine;
@@ -50,7 +51,7 @@ import
org.apache.seata.saga.statelang.domain.impl.ServiceTaskStateImpl;
import org.apache.seata.saga.statelang.domain.impl.StateMachineInstanceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
+
/**
* ProcessCtrl-based state machine engine
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/ServiceInvokerManager.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/ServiceInvokerManager.java
index c776877095..5d34121a26 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/ServiceInvokerManager.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/ServiceInvokerManager.java
@@ -19,8 +19,8 @@ package org.apache.seata.saga.engine.invoker;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.statelang.domain.DomainConstants;
-import org.springframework.util.StringUtils;
/**
* Service Invoker Manager
@@ -28,7 +28,7 @@ import org.springframework.util.StringUtils;
*/
public class ServiceInvokerManager {
- private Map<String, ServiceInvoker> serviceInvokerMap = new
ConcurrentHashMap<>();
+ private final Map<String, ServiceInvoker> serviceInvokerMap = new
ConcurrentHashMap<>();
public ServiceInvoker getServiceInvoker(String serviceType) {
if (StringUtils.isEmpty(serviceType)) {
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/StateInstruction.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/StateInstruction.java
index d2562a4f3e..06b1dc83e5 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/StateInstruction.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/StateInstruction.java
@@ -17,6 +17,7 @@
package org.apache.seata.saga.engine.pcext;
import org.apache.seata.common.exception.FrameworkErrorCode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
import org.apache.seata.saga.proctrl.Instruction;
@@ -24,7 +25,6 @@ import org.apache.seata.saga.proctrl.ProcessContext;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.State;
import org.apache.seata.saga.statelang.domain.StateMachine;
-import org.springframework.util.StringUtils;
/**
* State Instruction
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ChoiceStateHandler.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ChoiceStateHandler.java
index 91bcddf2cd..ee6fac0c13 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ChoiceStateHandler.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ChoiceStateHandler.java
@@ -21,6 +21,7 @@ import java.util.List;
import java.util.Map;
import org.apache.seata.common.exception.FrameworkErrorCode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
import org.apache.seata.saga.engine.expression.Expression;
@@ -34,7 +35,6 @@ import org.apache.seata.saga.statelang.domain.ChoiceState;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.StateMachineInstance;
import org.apache.seata.saga.statelang.domain.impl.ChoiceStateImpl;
-import org.springframework.util.StringUtils;
/**
* ChoiceState Handler
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ServiceTaskStateHandler.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ServiceTaskStateHandler.java
index 62d4770684..0c9365d1fd 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ServiceTaskStateHandler.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/ServiceTaskStateHandler.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.seata.common.exception.FrameworkErrorCode;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.StateMachineEngine;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
@@ -43,8 +44,6 @@ import
org.apache.seata.saga.statelang.domain.StateMachineInstance;
import org.apache.seata.saga.statelang.domain.impl.ServiceTaskStateImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.util.StringUtils;
/**
* ServiceTaskState Handler
@@ -94,10 +93,6 @@ public class ServiceTaskStateHandler implements
StateHandler, InterceptableState
throw new EngineExecutionException("No such
ServiceInvoker[" + state.getServiceType() + "]",
FrameworkErrorCode.ObjectNotExists);
}
- if (serviceInvoker instanceof ApplicationContextAware) {
- ((ApplicationContextAware)
serviceInvoker).setApplicationContext(
- stateMachineConfig.getApplicationContext());
- }
result = serviceInvoker.invoke(state, input.toArray());
}
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java
index 0de30cb319..8755f84894 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/handlers/SubStateMachineHandler.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import org.apache.seata.common.exception.FrameworkErrorCode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.StateMachineEngine;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
@@ -41,7 +42,6 @@ import org.apache.seata.saga.statelang.domain.SubStateMachine;
import org.apache.seata.saga.statelang.domain.impl.SubStateMachineImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
/**
* SubStateMachine Handler
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/InSagaBranchHandlerInterceptor.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/InSagaBranchHandlerInterceptor.java
similarity index 100%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/InSagaBranchHandlerInterceptor.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/InSagaBranchHandlerInterceptor.java
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java
index cd05ba20cd..03a8c238a3 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/interceptors/ServiceTaskHandlerInterceptor.java
@@ -24,12 +24,13 @@ import java.util.Map;
import org.apache.seata.common.exception.FrameworkErrorCode;
import org.apache.seata.common.loader.LoadLevel;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.StateMachineConfig;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
+import org.apache.seata.saga.engine.expression.ELExpression;
import org.apache.seata.saga.engine.expression.Expression;
import org.apache.seata.saga.engine.expression.ExpressionResolver;
import
org.apache.seata.saga.engine.expression.exception.ExceptionMatchExpression;
-import org.apache.seata.saga.engine.expression.spel.SpringELExpression;
import org.apache.seata.saga.engine.pcext.InterceptableStateHandler;
import org.apache.seata.saga.engine.pcext.StateHandlerInterceptor;
import org.apache.seata.saga.engine.pcext.StateInstruction;
@@ -50,7 +51,6 @@ import
org.apache.seata.saga.statelang.domain.impl.ServiceTaskStateImpl;
import org.apache.seata.saga.statelang.domain.impl.StateInstanceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
/**
* StateInterceptor for ServiceTask, SubStateMachine, CompensateState
@@ -121,8 +121,8 @@ public class ServiceTaskHandlerInterceptor implements
StateHandlerInterceptor {
stateInstance.setMachineInstanceId(stateMachineInstance.getId());
stateInstance.setStateMachineInstance(stateMachineInstance);
- Object isForCompensation = state.isForCompensation();
- if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE) &&
!Boolean.TRUE.equals(isForCompensation)) {
+ boolean isForCompensation = state.isForCompensation();
+ if (context.hasVariable(DomainConstants.VAR_NAME_IS_LOOP_STATE) &&
!isForCompensation) {
stateInstance.setName(LoopTaskUtils.generateLoopStateName(context,
state.getName()));
StateInstance lastRetriedStateInstance =
LoopTaskUtils.findOutLastRetriedStateInstance(stateMachineInstance,
stateInstance.getName());
@@ -150,7 +150,7 @@ public class ServiceTaskHandlerInterceptor implements
StateHandlerInterceptor {
stateInstance.setServiceMethod(state.getServiceMethod());
stateInstance.setServiceType(state.getServiceType());
- if (isForCompensation != null && (Boolean)isForCompensation) {
+ if (isForCompensation) {
CompensationHolder compensationHolder =
CompensationHolder.getCurrent(context, true);
StateInstance stateToBeCompensated =
compensationHolder.getStatesNeedCompensation().get(state.getName());
if (stateToBeCompensated != null) {
@@ -339,7 +339,7 @@ public class ServiceTaskHandlerInterceptor implements
StateHandlerInterceptor {
Class<? extends Expression> expressionClass =
evaluator.getClass();
if
(expressionClass.isAssignableFrom(ExceptionMatchExpression.class)) {
elContext =
context.getVariable(DomainConstants.VAR_NAME_CURRENT_EXCEPTION);
- } else if
(expressionClass.isAssignableFrom(SpringELExpression.class)) {
+ } else if
(expressionClass.isAssignableFrom(ELExpression.class)) {
elContext =
context.getVariable(DomainConstants.VAR_NAME_OUTPUT_PARAMS);
} else {
elContext = context.getVariables();
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/routers/TaskStateRouter.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/routers/TaskStateRouter.java
index 34998a529a..5e9fb14ecf 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/routers/TaskStateRouter.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/routers/TaskStateRouter.java
@@ -19,6 +19,7 @@ package org.apache.seata.saga.engine.pcext.routers;
import java.util.Stack;
import org.apache.seata.common.exception.FrameworkErrorCode;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.exception.EngineExecutionException;
import org.apache.seata.saga.engine.pcext.StateInstruction;
import org.apache.seata.saga.engine.pcext.StateRouter;
@@ -39,7 +40,6 @@ import
org.apache.seata.saga.statelang.domain.impl.AbstractTaskState;
import org.apache.seata.saga.statelang.domain.impl.LoopStartStateImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
/**
* TaskState Router
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/utils/ParameterUtils.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/utils/ParameterUtils.java
index 348c64c685..92356024e5 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/utils/ParameterUtils.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/pcext/utils/ParameterUtils.java
@@ -17,13 +17,13 @@
package org.apache.seata.saga.engine.pcext.utils;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.expression.Expression;
import org.apache.seata.saga.engine.expression.ExpressionResolver;
import org.apache.seata.saga.engine.expression.seq.SequenceExpression;
import org.apache.seata.saga.statelang.domain.StateInstance;
import org.apache.seata.saga.statelang.domain.impl.AbstractTaskState;
import org.apache.seata.saga.statelang.domain.impl.StateInstanceImpl;
-import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/StateMachineRepository.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/StateMachineRepository.java
index 85bbf0c153..7eeaeca3e1 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/StateMachineRepository.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/StateMachineRepository.java
@@ -16,10 +16,10 @@
*/
package org.apache.seata.saga.engine.repo;
-import java.io.IOException;
-
import org.apache.seata.saga.statelang.domain.StateMachine;
-import org.springframework.core.io.Resource;
+
+import java.io.IOException;
+import java.io.InputStream;
/**
* StateMachineRepository
@@ -57,15 +57,17 @@ public interface StateMachineRepository {
/**
* Register the state machine to the repository (if the same version
already exists, return the existing version)
*
- * @param stateMachine
+ * @param stateMachine stateMachine
+ * @return the state machine
*/
StateMachine registryStateMachine(StateMachine stateMachine);
/**
- * registry by resources
+ * Registry by resources.
*
- * @param resources
- * @param tenantId
+ * @param resourceAsStreamArray the resource as stream array
+ * @param tenantId the tenant id
+ * @throws IOException the io exception
*/
- void registryByResources(Resource[] resources, String tenantId) throws
IOException;
+ void registryByResources(InputStream[] resourceAsStreamArray, String
tenantId) throws IOException;
}
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/impl/StateMachineRepositoryImpl.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/impl/StateMachineRepositoryImpl.java
index 0ddef490de..0def5110ec 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/impl/StateMachineRepositoryImpl.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/repo/impl/StateMachineRepositoryImpl.java
@@ -28,7 +28,7 @@ import org.apache.seata.common.util.CollectionUtils;
import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.engine.repo.StateMachineRepository;
import org.apache.seata.saga.engine.sequence.SeqGenerator;
-import org.apache.seata.saga.engine.sequence.SpringJvmUUIDSeqGenerator;
+import org.apache.seata.saga.engine.sequence.UUIDSeqGenerator;
import org.apache.seata.saga.engine.store.StateLangStore;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.StateMachine;
@@ -36,7 +36,6 @@ import
org.apache.seata.saga.statelang.parser.StateMachineParserFactory;
import org.apache.seata.saga.statelang.parser.utils.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.core.io.Resource;
/**
* StateMachineRepository Implementation
@@ -48,7 +47,7 @@ public class StateMachineRepositoryImpl implements
StateMachineRepository {
private Map<String/** Name_Tenant **/, Item>
stateMachineMapByNameAndTenant = new ConcurrentHashMap<>();
private Map<String/** Id **/, Item> stateMachineMapById = new
ConcurrentHashMap<>();
private StateLangStore stateLangStore;
- private SeqGenerator seqGenerator = new SpringJvmUUIDSeqGenerator();
+ private SeqGenerator seqGenerator = new UUIDSeqGenerator();
private String charset = "UTF-8";
private String defaultTenantId;
private String jsonParserName = DomainConstants.DEFAULT_JSON_PARSER;
@@ -164,23 +163,21 @@ public class StateMachineRepositoryImpl implements
StateMachineRepository {
}
@Override
- public void registryByResources(Resource[] resources, String tenantId)
throws IOException {
- if (resources != null) {
- for (Resource resource : resources) {
- String json;
- try (InputStream is = resource.getInputStream()) {
- json = IOUtils.toString(is, charset);
+ public void registryByResources(InputStream[] resourceAsStreamArray,
String tenantId) throws IOException {
+ for (InputStream resource : resourceAsStreamArray) {
+ String json;
+ try (InputStream is = resource) {
+ json = IOUtils.toString(is, charset);
+ }
+ StateMachine stateMachine =
StateMachineParserFactory.getStateMachineParser(jsonParserName).parse(json);
+ if (stateMachine != null) {
+ stateMachine.setContent(json);
+ if (StringUtils.isBlank(stateMachine.getTenantId())) {
+ stateMachine.setTenantId(tenantId);
}
- StateMachine stateMachine =
StateMachineParserFactory.getStateMachineParser(jsonParserName).parse(json);
- if (stateMachine != null) {
- stateMachine.setContent(json);
- if (StringUtils.isBlank(stateMachine.getTenantId())) {
- stateMachine.setTenantId(tenantId);
- }
- registryStateMachine(stateMachine);
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("===== StateMachine Loaded: \n{}", json);
- }
+ registryStateMachine(stateMachine);
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("===== StateMachine Loaded: \n{}", json);
}
}
}
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/SpringJvmUUIDSeqGenerator.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/UUIDSeqGenerator.java
similarity index 80%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/SpringJvmUUIDSeqGenerator.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/UUIDSeqGenerator.java
index 8d1878e522..a31665d4c6 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/SpringJvmUUIDSeqGenerator.java
+++
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/sequence/UUIDSeqGenerator.java
@@ -17,21 +17,17 @@
package org.apache.seata.saga.engine.sequence;
import java.util.List;
-
-import org.springframework.util.AlternativeJdkIdGenerator;
-import org.springframework.util.IdGenerator;
+import java.util.UUID;
/**
- * Based On Spring AlternativeJdkIdGenerator
+ * UUID SeqGenerator
*
*/
-public class SpringJvmUUIDSeqGenerator implements SeqGenerator {
-
- private IdGenerator idGenerator = new AlternativeJdkIdGenerator();
+public class UUIDSeqGenerator implements SeqGenerator {
@Override
public String generate(String entity, String ruleName, List<Object>
shardingParameters) {
- String uuid = idGenerator.generateId().toString();
+ String uuid = UUID.randomUUID().toString();
StringBuilder sb = new StringBuilder(uuid.length() - 4);
for (String seg : uuid.split("-")) {
sb.append(seg);
@@ -48,4 +44,4 @@ public class SpringJvmUUIDSeqGenerator implements
SeqGenerator {
public String generate(String entity) {
return generate(entity, null);
}
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/Serializer.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/Serializer.java
similarity index 100%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/Serializer.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/Serializer.java
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/impl/ExceptionSerializer.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/impl/ExceptionSerializer.java
similarity index 100%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/impl/ExceptionSerializer.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/impl/ExceptionSerializer.java
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/impl/ParamsSerializer.java
b/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/impl/ParamsSerializer.java
similarity index 100%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/serializer/impl/ParamsSerializer.java
rename to
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/serializer/impl/ParamsSerializer.java
diff --git
a/saga/seata-saga-engine/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
b/saga/seata-saga-engine/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
index 2189f770a4..0626e821f0 100644
---
a/saga/seata-saga-engine/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
+++
b/saga/seata-saga-engine/src/main/resources/META-INF/services/org.apache.seata.saga.engine.pcext.StateHandlerInterceptor
@@ -1,3 +1,4 @@
org.apache.seata.saga.engine.pcext.interceptors.ServiceTaskHandlerInterceptor
org.apache.seata.saga.engine.pcext.interceptors.ScriptTaskHandlerInterceptor
-org.apache.seata.saga.engine.pcext.interceptors.LoopTaskHandlerInterceptor
\ No newline at end of file
+org.apache.seata.saga.engine.pcext.interceptors.LoopTaskHandlerInterceptor
+org.apache.seata.saga.engine.pcext.interceptors.InSagaBranchHandlerInterceptor
\ No newline at end of file
diff --git
a/saga/seata-saga-rm/src/main/java/org/apache/seata/saga/rm/StateMachineEngineHolder.java
b/saga/seata-saga-rm/src/main/java/org/apache/seata/saga/rm/StateMachineEngineHolder.java
index 064b052297..9f7a7f8794 100644
---
a/saga/seata-saga-rm/src/main/java/org/apache/seata/saga/rm/StateMachineEngineHolder.java
+++
b/saga/seata-saga-rm/src/main/java/org/apache/seata/saga/rm/StateMachineEngineHolder.java
@@ -19,6 +19,7 @@ package org.apache.seata.saga.rm;
import org.apache.seata.saga.engine.StateMachineEngine;
/**
+ * StateMachineEngineHolder
*/
public class StateMachineEngineHolder {
@@ -28,7 +29,7 @@ public class StateMachineEngineHolder {
return stateMachineEngine;
}
- public void setStateMachineEngine(StateMachineEngine smEngine) {
+ public static void setStateMachineEngine(StateMachineEngine smEngine) {
stateMachineEngine = smEngine;
}
}
diff --git a/saga/seata-saga-tm/pom.xml b/saga/seata-saga-spring/pom.xml
similarity index 64%
rename from saga/seata-saga-tm/pom.xml
rename to saga/seata-saga-spring/pom.xml
index 5924c7106f..78d1c13591 100644
--- a/saga/seata-saga-tm/pom.xml
+++ b/saga/seata-saga-spring/pom.xml
@@ -17,30 +17,53 @@
limitations under the License.
-->
+
<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>
<artifactId>seata-saga</artifactId>
<groupId>org.apache.seata</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>seata-saga-tm</artifactId>
- <name>seata-saga-tm ${project.version}</name>
- <description>saga transaction manager for Seata built with
Maven</description>
-
+ <artifactId>seata-saga-spring</artifactId>
+ <name>seata-saga-spring ${project.version}</name>
+ <description>seata-saga-spring for Seata built with Maven</description>
<dependencies>
+
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-tm</artifactId>
+ <artifactId>seata-saga-engine</artifactId>
<version>${project.version}</version>
</dependency>
+
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>seata-saga-rm</artifactId>
<version>${project.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.alipay.sofa.common</groupId>
+ <artifactId>sofa-common-tools</artifactId>
+ <version>2.1.0</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
\ No newline at end of file
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
similarity index 82%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
index 31647d2108..0672b67ce0 100644
---
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/config/DbStateMachineConfig.java
@@ -21,15 +21,15 @@ import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
+import org.apache.seata.common.ConfigurationKeys;
import org.apache.seata.config.Configuration;
import org.apache.seata.config.ConfigurationFactory;
-import org.apache.seata.core.constants.ConfigurationKeys;
import org.apache.seata.saga.engine.impl.DefaultStateMachineConfig;
import org.apache.seata.saga.engine.serializer.impl.ParamsSerializer;
import org.apache.seata.saga.engine.store.db.DbAndReportTcStateLogStore;
import org.apache.seata.saga.engine.store.db.DbStateLangStore;
-import org.apache.seata.saga.tm.DefaultSagaTransactionalTemplate;
-import org.apache.seata.saga.tm.SagaTransactionalTemplate;
+import org.apache.seata.saga.engine.tm.DefaultSagaTransactionalTemplate;
+import org.apache.seata.saga.engine.tm.SagaTransactionalTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
@@ -43,7 +43,6 @@ import static
org.apache.seata.common.DefaultValues.DEFAULT_SAGA_JSON_PARSER;
/**
* DbStateMachineConfig
- *
*/
public class DbStateMachineConfig extends DefaultStateMachineConfig implements
DisposableBean {
@@ -57,25 +56,22 @@ public class DbStateMachineConfig extends
DefaultStateMachineConfig implements D
private String tablePrefix = "seata_";
private String dbType;
private SagaTransactionalTemplate sagaTransactionalTemplate;
- private boolean rmReportSuccessEnable =
DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE;
- private boolean sagaBranchRegisterEnable =
DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE;
-
public DbStateMachineConfig() {
try {
Configuration configuration = ConfigurationFactory.getInstance();
if (configuration != null) {
- this.rmReportSuccessEnable =
configuration.getBoolean(ConfigurationKeys.CLIENT_REPORT_SUCCESS_ENABLE,
DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE);
- this.sagaBranchRegisterEnable =
configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_BRANCH_REGISTER_ENABLE,
DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE);
+
setRmReportSuccessEnable(configuration.getBoolean(ConfigurationKeys.CLIENT_REPORT_SUCCESS_ENABLE,
DEFAULT_CLIENT_REPORT_SUCCESS_ENABLE));
+
setSagaBranchRegisterEnable(configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_BRANCH_REGISTER_ENABLE,
DEFAULT_CLIENT_SAGA_BRANCH_REGISTER_ENABLE));
setSagaJsonParser(configuration.getConfig(ConfigurationKeys.CLIENT_SAGA_JSON_PARSER,
DEFAULT_SAGA_JSON_PARSER));
this.applicationId =
configuration.getConfig(ConfigurationKeys.APPLICATION_ID);
this.txServiceGroup =
configuration.getConfig(ConfigurationKeys.TX_SERVICE_GROUP);
- this.accessKey =
configuration.getConfig(ConfigurationKeys.ACCESS_KEY,null);
- this.secretKey =
configuration.getConfig(ConfigurationKeys.SECRET_KEY,null);
+ this.accessKey =
configuration.getConfig(ConfigurationKeys.ACCESS_KEY, null);
+ this.secretKey =
configuration.getConfig(ConfigurationKeys.SECRET_KEY, null);
setSagaRetryPersistModeUpdate(configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE,
- DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE));
+ DEFAULT_CLIENT_SAGA_RETRY_PERSIST_MODE_UPDATE));
setSagaCompensatePersistModeUpdate(configuration.getBoolean(ConfigurationKeys.CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE,
- DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE));
+ DEFAULT_CLIENT_SAGA_COMPENSATE_PERSIST_MODE_UPDATE));
}
} catch (Exception e) {
LOGGER.warn("Load SEATA configuration failed, use default
configuration instead.", e);
@@ -91,9 +87,11 @@ public class DbStateMachineConfig extends
DefaultStateMachineConfig implements D
@Override
public void afterPropertiesSet() throws Exception {
+ if (dataSource == null) {
+ throw new IllegalArgumentException("datasource required not
null!");
+ }
dbType = getDbTypeFromDataSource(dataSource);
-
if (getStateLogStore() == null) {
DbAndReportTcStateLogStore dbStateLogStore = new
DbAndReportTcStateLogStore();
dbStateLogStore.setDataSource(dataSource);
@@ -109,8 +107,7 @@ public class DbStateMachineConfig extends
DefaultStateMachineConfig implements D
}
if (sagaTransactionalTemplate == null) {
- DefaultSagaTransactionalTemplate
defaultSagaTransactionalTemplate
- = new DefaultSagaTransactionalTemplate();
+ DefaultSagaTransactionalTemplate
defaultSagaTransactionalTemplate = new DefaultSagaTransactionalTemplate();
defaultSagaTransactionalTemplate.setApplicationContext(getApplicationContext());
defaultSagaTransactionalTemplate.setApplicationId(applicationId);
defaultSagaTransactionalTemplate.setTxServiceGroup(txServiceGroup);
@@ -134,7 +131,8 @@ public class DbStateMachineConfig extends
DefaultStateMachineConfig implements D
setStateLangStore(dbStateLangStore);
}
- super.afterPropertiesSet();//must execute after StateLangStore
initialized
+ //must execute after StateLangStore initialized
+ super.afterPropertiesSet();
}
@Override
@@ -203,20 +201,4 @@ public class DbStateMachineConfig extends
DefaultStateMachineConfig implements D
public void setDbType(String dbType) {
this.dbType = dbType;
}
-
- public boolean isRmReportSuccessEnable() {
- return rmReportSuccessEnable;
- }
-
- public boolean isSagaBranchRegisterEnable() {
- return sagaBranchRegisterEnable;
- }
-
- public void setSagaBranchRegisterEnable(boolean sagaBranchRegisterEnable) {
- this.sagaBranchRegisterEnable = sagaBranchRegisterEnable;
- }
-
- public void setRmReportSuccessEnable(boolean rmReportSuccessEnable) {
- this.rmReportSuccessEnable = rmReportSuccessEnable;
- }
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
similarity index 92%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
index b345e5feac..ac1e14e70e 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpression.java
@@ -16,13 +16,13 @@
*/
package org.apache.seata.saga.engine.expression.spel;
-import org.apache.seata.saga.engine.expression.Expression;
+import org.apache.seata.saga.engine.expression.ELExpression;
/**
* Expression base on Spring EL
*
*/
-public class SpringELExpression implements Expression {
+public class SpringELExpression implements ELExpression {
private org.springframework.expression.Expression expression;
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
similarity index 90%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
index dc43b4066d..3598512dc3 100644
---
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/expression/spel/SpringELExpressionFactory.java
@@ -18,9 +18,7 @@ package org.apache.seata.saga.engine.expression.spel;
import org.apache.seata.saga.engine.expression.Expression;
import org.apache.seata.saga.engine.expression.ExpressionFactory;
-import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
import org.springframework.expression.AccessException;
import org.springframework.expression.BeanResolver;
import org.springframework.expression.EvaluationContext;
@@ -33,11 +31,15 @@ import
org.springframework.expression.spel.support.StandardEvaluationContext;
* SpringELExpression factory
*
*/
-public class SpringELExpressionFactory implements ExpressionFactory,
ApplicationContextAware {
+public class SpringELExpressionFactory implements ExpressionFactory {
ExpressionParser parser = new SpelExpressionParser();
ApplicationContext applicationContext;
+ public SpringELExpressionFactory(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+
@Override
public Expression createExpression(String expression) {
org.springframework.expression.Expression defaultExpression =
parser.parseExpression(expression);
@@ -46,11 +48,6 @@ public class SpringELExpressionFactory implements
ExpressionFactory, Application
return new SpringELExpression(defaultExpression);
}
- @Override
- public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
- this.applicationContext = applicationContext;
- }
-
private class AppContextBeanResolver implements BeanResolver {
@Override
diff --git
a/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
new file mode 100644
index 0000000000..247f43c4d5
--- /dev/null
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/impl/DefaultStateMachineConfig.java
@@ -0,0 +1,96 @@
+/*
+ * 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 org.apache.seata.saga.engine.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.seata.saga.engine.config.AbstractStateMachineConfig;
+import org.apache.seata.saga.engine.expression.ExpressionFactoryManager;
+import org.apache.seata.saga.engine.expression.spel.SpringELExpressionFactory;
+import org.apache.seata.saga.engine.invoker.ServiceInvokerManager;
+import org.apache.seata.saga.engine.invoker.impl.SpringBeanServiceInvoker;
+import org.apache.seata.saga.engine.utils.ResourceUtil;
+import org.apache.seata.saga.statelang.domain.DomainConstants;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.io.Resource;
+
+/**
+ * State machine configuration base spring. In spring context,some uses will
be combined with the spring framework.
+ * such as expression evaluation add spring el impl, serviceInvoker add spring
bean Invoker impl, etc ...
+ *
+ */
+public class DefaultStateMachineConfig extends AbstractStateMachineConfig
implements ApplicationContextAware, InitializingBean {
+
+ private ApplicationContext applicationContext;
+
+ private String[] resources = new String[]
{"classpath*:seata/saga/statelang/**/*.json"};
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ // super init
+ super.init();
+
+ // register StateMachine def after init
+ registerStateMachineDef();
+
+ // register spring el ExpressionFactoryManager
+ registerSpringElExpressionFactoryManager();
+
+ // register serviceInvoker as spring bean invoker after init
+ registerSpringBeanServiceInvoker();
+ }
+
+ private void registerStateMachineDef() throws IOException {
+ Resource[] registerResources =
ResourceUtil.getResources(this.resources);
+ InputStream[] resourceAsStreamArray = new
InputStream[registerResources.length];
+ for (int i = 0; i < registerResources.length; i++) {
+ resourceAsStreamArray[i] = registerResources[i].getInputStream();
+ }
+ getStateMachineRepository().registryByResources(resourceAsStreamArray,
getDefaultTenantId());
+ }
+
+ private void registerSpringElExpressionFactoryManager() {
+ ExpressionFactoryManager expressionFactoryManager =
getExpressionFactoryManager();
+ SpringELExpressionFactory springELExpressionFactory = new
SpringELExpressionFactory(getApplicationContext());
+
expressionFactoryManager.putExpressionFactory(ExpressionFactoryManager.DEFAULT_EXPRESSION_TYPE,
springELExpressionFactory);
+ }
+
+ private void registerSpringBeanServiceInvoker() {
+ ServiceInvokerManager manager = getServiceInvokerManager();
+ SpringBeanServiceInvoker springBeanServiceInvoker = new
SpringBeanServiceInvoker();
+ springBeanServiceInvoker.setSagaJsonParser(getSagaJsonParser());
+
springBeanServiceInvoker.setApplicationContext(getApplicationContext());
+
springBeanServiceInvoker.setThreadPoolExecutor(getThreadPoolExecutor());
+ manager.putServiceInvoker(DomainConstants.SERVICE_TYPE_SPRING_BEAN,
springBeanServiceInvoker);
+ }
+
+ public ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+ public void setResources(String[] resources) {
+ this.resources = resources;
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java
similarity index 100%
rename from
saga/seata-saga-engine/src/main/java/org/apache/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/invoker/impl/SpringBeanServiceInvoker.java
diff --git
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
similarity index 99%
rename from
saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
index ea73261409..8cc8b4bf5c 100644
---
a/saga/seata-saga-engine-store/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/store/db/DbAndReportTcStateLogStore.java
@@ -29,6 +29,7 @@ import org.apache.seata.common.Constants;
import org.apache.seata.common.exception.FrameworkErrorCode;
import org.apache.seata.common.exception.StoreException;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.core.context.RootContext;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.model.BranchStatus;
@@ -45,6 +46,7 @@ import org.apache.seata.saga.engine.serializer.Serializer;
import org.apache.seata.saga.engine.serializer.impl.ExceptionSerializer;
import org.apache.seata.saga.engine.serializer.impl.ParamsSerializer;
import org.apache.seata.saga.engine.store.StateLogStore;
+import org.apache.seata.saga.engine.tm.SagaTransactionalTemplate;
import org.apache.seata.saga.proctrl.ProcessContext;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.ExecutionStatus;
@@ -54,13 +56,11 @@ import
org.apache.seata.saga.statelang.domain.StateMachineInstance;
import org.apache.seata.saga.statelang.domain.impl.ServiceTaskStateImpl;
import org.apache.seata.saga.statelang.domain.impl.StateInstanceImpl;
import org.apache.seata.saga.statelang.domain.impl.StateMachineInstanceImpl;
-import org.apache.seata.saga.tm.SagaTransactionalTemplate;
import org.apache.seata.tm.api.GlobalTransaction;
import org.apache.seata.tm.api.TransactionalExecutor.ExecutionException;
import org.apache.seata.tm.api.transaction.TransactionInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
/**
* State machine logs and definitions persist to database and report status to
TC (Transaction Coordinator)
diff --git
a/saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/DefaultSagaTransactionalTemplate.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/DefaultSagaTransactionalTemplate.java
similarity index 91%
rename from
saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/DefaultSagaTransactionalTemplate.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/DefaultSagaTransactionalTemplate.java
index 0fe7809382..9e1ff71a6e 100644
---
a/saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/DefaultSagaTransactionalTemplate.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/DefaultSagaTransactionalTemplate.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.saga.tm;
+package org.apache.seata.saga.engine.tm;
import java.util.List;
@@ -49,10 +49,9 @@ import
org.springframework.context.ConfigurableApplicationContext;
/**
* Template of executing business logic with a global transaction for SAGA mode
- *
*/
public class DefaultSagaTransactionalTemplate
- implements SagaTransactionalTemplate, ApplicationContextAware,
DisposableBean, InitializingBean {
+ implements SagaTransactionalTemplate, ApplicationContextAware,
DisposableBean, InitializingBean {
private static final Logger LOGGER =
LoggerFactory.getLogger(DefaultSagaTransactionalTemplate.class);
@@ -76,7 +75,7 @@ public class DefaultSagaTransactionalTemplate
@Override
public void rollbackTransaction(GlobalTransaction tx, Throwable ex)
- throws TransactionException, TransactionalExecutor.ExecutionException {
+ throws TransactionException,
TransactionalExecutor.ExecutionException {
triggerBeforeRollback(tx);
tx.rollback();
triggerAfterRollback(tx);
@@ -104,7 +103,7 @@ public class DefaultSagaTransactionalTemplate
@Override
public void reportTransaction(GlobalTransaction tx, GlobalStatus
globalStatus)
- throws TransactionalExecutor.ExecutionException {
+ throws TransactionalExecutor.ExecutionException {
try {
tx.globalReport(globalStatus);
triggerAfterCompletion(tx);
@@ -116,14 +115,14 @@ public class DefaultSagaTransactionalTemplate
@Override
public long branchRegister(String resourceId, String clientId, String xid,
String applicationData, String lockKeys)
- throws TransactionException {
+ throws TransactionException {
return DefaultResourceManager.get().branchRegister(BranchType.SAGA,
resourceId, clientId, xid, applicationData,
- lockKeys);
+ lockKeys);
}
@Override
public void branchReport(String xid, long branchId, BranchStatus status,
String applicationData)
- throws TransactionException {
+ throws TransactionException {
DefaultResourceManager.get().branchReport(BranchType.SAGA, xid,
branchId, status, applicationData);
}
@@ -227,23 +226,23 @@ public class DefaultSagaTransactionalTemplate
LOGGER.info("Initializing Global Transaction Clients ... ");
}
if (StringUtils.isNullOrEmpty(applicationId) || StringUtils
- .isNullOrEmpty(txServiceGroup)) {
+ .isNullOrEmpty(txServiceGroup)) {
throw new IllegalArgumentException(
- "applicationId: " + applicationId + ", txServiceGroup: " +
txServiceGroup);
+ "applicationId: " + applicationId + ", txServiceGroup: " +
txServiceGroup);
}
//init TM
TMClient.init(applicationId, txServiceGroup, accessKey, secretKey);
if (LOGGER.isInfoEnabled()) {
LOGGER.info(
- "Transaction Manager Client is initialized. applicationId[" +
applicationId + "] txServiceGroup["
- + txServiceGroup + "]");
+ "Transaction Manager Client is initialized.
applicationId[" + applicationId + "] txServiceGroup["
+ + txServiceGroup + "]");
}
//init RM
RMClient.init(applicationId, txServiceGroup);
if (LOGGER.isInfoEnabled()) {
LOGGER.info(
- "Resource Manager is initialized. applicationId[" +
applicationId + "] txServiceGroup[" + txServiceGroup
- + "]");
+ "Resource Manager is initialized. applicationId[" +
applicationId + "] txServiceGroup[" + txServiceGroup
+ + "]");
}
// Only register application as a saga resource
@@ -261,7 +260,7 @@ public class DefaultSagaTransactionalTemplate
private void registerSpringShutdownHook() {
if (applicationContext instanceof ConfigurableApplicationContext) {
-
((ConfigurableApplicationContext)applicationContext).registerShutdownHook();
+ ((ConfigurableApplicationContext)
applicationContext).registerShutdownHook();
ShutdownHook.removeRuntimeShutdownHook();
}
ShutdownHook.getInstance().addDisposable(TmNettyRemotingClient.getInstance(applicationId,
txServiceGroup, accessKey, secretKey));
@@ -313,4 +312,4 @@ public class DefaultSagaTransactionalTemplate
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/SagaTransactionalTemplate.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/SagaTransactionalTemplate.java
similarity index 98%
rename from
saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/SagaTransactionalTemplate.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/SagaTransactionalTemplate.java
index 0fff60a6f6..e1db2ef814 100644
---
a/saga/seata-saga-tm/src/main/java/org/apache/seata/saga/tm/SagaTransactionalTemplate.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/tm/SagaTransactionalTemplate.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.saga.tm;
+package org.apache.seata.saga.engine.tm;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.model.BranchStatus;
@@ -51,4 +51,4 @@ public interface SagaTransactionalTemplate {
void triggerAfterCompletion(GlobalTransaction tx);
void cleanUp();
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtil.java
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/utils/ResourceUtil.java
similarity index 94%
rename from
saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtil.java
rename to
saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/utils/ResourceUtil.java
index 9184b07ab0..d58535e995 100644
---
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtil.java
+++
b/saga/seata-saga-spring/src/main/java/org/apache/seata/saga/engine/utils/ResourceUtil.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.seata.saga.statelang.parser.utils;
+package org.apache.seata.saga.engine.utils;
-import java.io.IOException;
-import java.util.Optional;
-import java.util.stream.Stream;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
+import java.io.IOException;
+import java.util.Optional;
+import java.util.stream.Stream;
+
/**
* State lang resource util.
*
@@ -43,6 +44,6 @@ public class ResourceUtil {
return Stream
.of(Optional.ofNullable(locationArr).orElse(new String[0]))
.flatMap(location -> Stream.of(getResources(location)))
- .toArray(i -> new Resource[i]);
+ .toArray(Resource[]::new);
}
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
b/saga/seata-saga-spring/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
similarity index 89%
rename from
saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
rename to
saga/seata-saga-spring/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
index 8e16e0f4c4..7ed5549b05 100644
---
a/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
+++
b/saga/seata-saga-spring/src/test/java/org/apache/seata/saga/statelang/parser/utils/ResourceUtilTests.java
@@ -16,6 +16,7 @@
*/
package org.apache.seata.saga.statelang.parser.utils;
+import org.apache.seata.saga.engine.utils.ResourceUtil;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.Resource;
@@ -30,9 +31,9 @@ public class ResourceUtilTests {
@Test
public void getResources_test() {
Resource[] resources =
ResourceUtil.getResources("classpath*:statelang/*.json");
- assertThat(resources.length).isEqualTo(6);
+ assertThat(resources.length).isEqualTo(1);
Resource[] resources2 = ResourceUtil.getResources(new
String[]{"classpath*:statelang/*.json"});
- assertThat(resources2.length).isEqualTo(6);
+ assertThat(resources2.length).isEqualTo(1);
}
-}
+}
\ No newline at end of file
diff --git
a/saga/seata-saga-spring/src/test/resources/statelang/simple_statemachine.json
b/saga/seata-saga-spring/src/test/resources/statelang/simple_statemachine.json
new file mode 100644
index 0000000000..91ed501953
--- /dev/null
+++
b/saga/seata-saga-spring/src/test/resources/statelang/simple_statemachine.json
@@ -0,0 +1,138 @@
+{
+ "Name": "simpleTestStateMachine",
+ "Comment": "测试状态机定义",
+ "StartState": "FirstState",
+ "Version": "0.0.1",
+ "States": {
+ "FirstState": {
+ "Type": "ServiceTask",
+ "ServiceName": "is.seata.saga.DemoService",
+ "ServiceMethod": "foo",
+ "IsPersist": false,
+ "Next": "ScriptState"
+ },
+ "ScriptState": {
+ "Type": "ScriptTask",
+ "ScriptType": "groovy",
+ "ScriptContent": "return 'hello ' + inputA",
+ "Input": [
+ {
+ "inputA": "$.data1"
+ }
+ ],
+ "Output": {
+ "scriptStateResult": "$.#root"
+ },
+ "Next": "ChoiceState"
+ },
+ "ChoiceState": {
+ "Type": "Choice",
+ "Choices": [
+ {
+ "Expression": "foo == 1",
+ "Next": "FirstMatchState"
+ },
+ {
+ "Expression": "foo == 2",
+ "Next": "SecondMatchState"
+ }
+ ],
+ "Default": "FailState"
+ },
+ "FirstMatchState": {
+ "Type": "ServiceTask",
+ "ServiceName": "is.seata.saga.DemoService",
+ "ServiceMethod": "bar",
+ "CompensateState": "CompensateFirst",
+ "Status": {
+ "return.code == 'S'": "SU",
+ "return.code == 'F'": "FA",
+ "$exception{java.lang.Throwable}": "UN"
+ },
+ "Input": [
+ {
+ "inputA1": "$.data1",
+ "inputA2": {
+ "a": "$.data2.a"
+ }
+ },
+ {
+ "inputB": "$.header"
+ }
+ ],
+ "Output": {
+ "firstMatchStateResult": "$.#root"
+ },
+ "Retry": [
+ {
+ "Exceptions": ["java.lang.Exception"],
+ "IntervalSeconds": 2,
+ "MaxAttempts": 3,
+ "BackoffRate": 1.5
+ }
+ ],
+ "Catch": [
+ {
+ "Exceptions": [
+ "java.lang.Exception"
+ ],
+ "Next": "CompensationTrigger"
+ }
+ ],
+ "Next": "SuccessState"
+ },
+ "CompensateFirst": {
+ "Type": "ServiceTask",
+ "ServiceName": "is.seata.saga.DemoService",
+ "ServiceMethod": "compensateBar",
+ "IsForCompensation": true,
+ "IsForUpdate": true,
+ "Input": [
+ {
+ "input": "$.data"
+ }
+ ],
+ "Output": {
+ "firstMatchStateResult": "$.#root"
+ },
+ "Status": {
+ "return.code == 'S'": "SU",
+ "return.code == 'F'": "FA",
+ "$exception{java.lang.Throwable}": "UN"
+ }
+ },
+ "CompensationTrigger": {
+ "Type": "CompensationTrigger",
+ "Next": "CompensateEndState"
+ },
+ "CompensateEndState": {
+ "Type": "Fail",
+ "ErrorCode": "StateCompensated",
+ "Message": "State Compensated!"
+ },
+ "SecondMatchState": {
+ "Type": "SubStateMachine",
+ "StateMachineName": "simpleTestSubStateMachine",
+ "Input": [
+ {
+ "input": "$.data"
+ },
+ {
+ "header": "$.header"
+ }
+ ],
+ "Output": {
+ "firstMatchStateResult": "$.#root"
+ },
+ "Next": "SuccessState"
+ },
+ "FailState": {
+ "Type": "Fail",
+ "ErrorCode": "DefaultStateError",
+ "Message": "No Matches!"
+ },
+ "SuccessState": {
+ "Type": "Succeed"
+ }
+ }
+}
\ No newline at end of file
diff --git a/saga/seata-saga-statelang/pom.xml
b/saga/seata-saga-statelang/pom.xml
index 58ec94791e..57b70f6b4a 100644
--- a/saga/seata-saga-statelang/pom.xml
+++ b/saga/seata-saga-statelang/pom.xml
@@ -32,13 +32,5 @@
<dependencies>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/CompensateSubStateMachineStateParser.java
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/CompensateSubStateMachineStateParser.java
index 9bf561fc06..895ab63cba 100644
---
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/CompensateSubStateMachineStateParser.java
+++
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/CompensateSubStateMachineStateParser.java
@@ -16,11 +16,11 @@
*/
package org.apache.seata.saga.statelang.parser.impl;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.ServiceTaskState;
import
org.apache.seata.saga.statelang.domain.impl.CompensateSubStateMachineStateImpl;
import org.apache.seata.saga.statelang.parser.StateParser;
-import org.springframework.util.StringUtils;
/**
* CompensateSubStateMachineState Parser
diff --git
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/SubStateMachineParser.java
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/SubStateMachineParser.java
index 926ec09366..08ab9c1c5a 100644
---
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/SubStateMachineParser.java
+++
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/impl/SubStateMachineParser.java
@@ -18,11 +18,11 @@ package org.apache.seata.saga.statelang.parser.impl;
import java.util.Map;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.statelang.domain.ServiceTaskState;
import org.apache.seata.saga.statelang.domain.SubStateMachine;
import org.apache.seata.saga.statelang.domain.impl.SubStateMachineImpl;
import org.apache.seata.saga.statelang.parser.StateParser;
-import org.springframework.util.StringUtils;
/**
* SubStateMachineParser
diff --git
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/DesignerJsonTransformer.java
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/DesignerJsonTransformer.java
index c484a658c0..d653b6708a 100644
---
a/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/DesignerJsonTransformer.java
+++
b/saga/seata-saga-statelang/src/main/java/org/apache/seata/saga/statelang/parser/utils/DesignerJsonTransformer.java
@@ -19,11 +19,11 @@ package org.apache.seata.saga.statelang.parser.utils;
import org.apache.seata.common.exception.FrameworkErrorCode;
import org.apache.seata.common.exception.FrameworkException;
import org.apache.seata.common.util.CollectionUtils;
+import org.apache.seata.common.util.StringUtils;
import org.apache.seata.saga.statelang.domain.ExecutionStatus;
import org.apache.seata.saga.statelang.domain.StateInstance;
import org.apache.seata.saga.statelang.domain.StateMachineInstance;
import org.apache.seata.saga.statelang.parser.JsonParser;
-import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
diff --git
a/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/StateParserTests.java
b/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/StateParserTests.java
index 4b85f94c10..d054e3017d 100644
---
a/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/StateParserTests.java
+++
b/saga/seata-saga-statelang/src/test/java/org/apache/seata/saga/statelang/parser/StateParserTests.java
@@ -17,28 +17,26 @@
package org.apache.seata.saga.statelang.parser;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Date;
import java.util.Map;
import org.apache.seata.saga.statelang.domain.StateMachine;
import org.apache.seata.saga.statelang.parser.utils.DesignerJsonTransformer;
-import org.apache.seata.saga.statelang.validator.ValidationException;
import org.apache.seata.saga.statelang.parser.utils.IOUtils;
+import org.apache.seata.saga.statelang.validator.ValidationException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.springframework.core.io.ClassPathResource;
/**
* StateParser tests
- *
*/
public class StateParserTests {
@Test
public void testParser() throws IOException {
-
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
StateMachine stateMachine =
StateMachineParserFactory.getStateMachineParser(null).parse(json);
stateMachine.setGmtCreate(new Date());
Assertions.assertNotNull(stateMachine);
@@ -53,14 +51,13 @@ public class StateParserTests {
System.out.println(fastjsonOutputJson);
Assertions.assertEquals("simpleTestStateMachine",
stateMachine.getName());
- Assertions.assertTrue(stateMachine.getStates().size() > 0);
+ Assertions.assertFalse(stateMachine.getStates().isEmpty());
}
@Test
public void testDesignerJsonTransformer() throws IOException {
-
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine_with_layout.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine_with_layout.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
JsonParser jsonParser = JsonParserFactory.getJsonParser("jackson");
Map<String, Object> parsedObj =
DesignerJsonTransformer.toStandardJson(jsonParser.parse(json, Map.class, true));
Assertions.assertNotNull(parsedObj);
@@ -79,8 +76,8 @@ public class StateParserTests {
@Test
public void singleInfiniteLoopTest() throws IOException {
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine_with_single_infinite_loop.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine_with_single_infinite_loop.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
Throwable e = Assertions.assertThrows(ValidationException.class, () ->
{
StateMachineParserFactory.getStateMachineParser(null).parse(json);
});
@@ -90,8 +87,8 @@ public class StateParserTests {
@Test
public void testMultipleInfiniteLoop() throws IOException {
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine_with_multiple_infinite_loop.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine_with_multiple_infinite_loop.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
Throwable e = Assertions.assertThrows(ValidationException.class, () ->
{
StateMachineParserFactory.getStateMachineParser(null).parse(json);
});
@@ -101,8 +98,8 @@ public class StateParserTests {
@Test
public void testNonExistedName() throws IOException {
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine_with_non_existed_name.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine_with_non_existed_name.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
Throwable e = Assertions.assertThrows(ValidationException.class, () ->
{
StateMachineParserFactory.getStateMachineParser(null).parse(json);
});
@@ -112,11 +109,20 @@ public class StateParserTests {
@Test
public void testRecursiveSubStateMachine() throws IOException {
- ClassPathResource resource = new
ClassPathResource("statelang/simple_statemachine_with_recursive_sub_machine.json");
- String json = IOUtils.toString(resource.getInputStream(), "UTF-8");
+ InputStream inputStream =
getInputStreamByPath("statelang/simple_statemachine_with_recursive_sub_machine.json");
+ String json = IOUtils.toString(inputStream, "UTF-8");
Throwable e = Assertions.assertThrows(ValidationException.class, () ->
{
StateMachineParserFactory.getStateMachineParser(null).parse(json);
});
Assertions.assertTrue(e.getMessage().endsWith("call itself"));
}
-}
+
+ private InputStream getInputStreamByPath(String path) {
+ ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getClass().getClassLoader();
+ }
+
+ return classLoader.getResourceAsStream(path);
+ }
+}
\ No newline at end of file
diff --git
a/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
b/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
index c64be6a08b..43c18629fc 100644
---
a/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
+++
b/seata-spring-boot-starter/src/main/java/org/apache/seata/spring/boot/autoconfigure/SeataSagaAutoConfiguration.java
@@ -88,7 +88,7 @@ public class SeataSagaAutoConfiguration {
public StateMachineEngine stateMachineEngine(StateMachineConfig config) {
ProcessCtrlStateMachineEngine engine = new
ProcessCtrlStateMachineEngine();
engine.setStateMachineConfig(config);
- new StateMachineEngineHolder().setStateMachineEngine(engine);
+ StateMachineEngineHolder.setStateMachineEngine(engine);
return engine;
}
diff --git a/test/pom.xml b/test/pom.xml
index e02fd088d5..e9d638fe38 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -69,7 +69,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>seata-saga-engine-store</artifactId>
+ <artifactId>seata-saga-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git
a/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
b/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
index 2db6cd9288..0cc1fc8113 100644
---
a/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
+++
b/test/src/test/java/org/apache/seata/saga/engine/db/StateMachineDBTests.java
@@ -37,6 +37,7 @@ import
org.apache.seata.saga.engine.impl.DefaultStateMachineConfig;
import org.apache.seata.saga.engine.mock.DemoService.Engineer;
import org.apache.seata.saga.engine.mock.DemoService.People;
import org.apache.seata.saga.proctrl.ProcessContext;
+import org.apache.seata.saga.rm.StateMachineEngineHolder;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.ExecutionStatus;
import org.apache.seata.saga.statelang.domain.StateMachineInstance;
@@ -69,6 +70,7 @@ public class StateMachineDBTests extends AbstractServerTest {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("classpath:saga/spring/statemachine_engine_db_test.xml");
stateMachineEngine = applicationContext.getBean("stateMachineEngine",
StateMachineEngine.class);
+ StateMachineEngineHolder.setStateMachineEngine(stateMachineEngine);
}
@AfterAll
diff --git
a/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java
b/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java
index 63c9403726..e5617ce008 100644
---
a/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java
+++
b/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineAsyncDBMockServerTests.java
@@ -23,6 +23,7 @@ import org.apache.seata.common.LockAndCallback;
import org.apache.seata.common.SagaCostPrint;
import org.apache.seata.saga.engine.StateMachineEngine;
import org.apache.seata.saga.engine.mock.DemoService.People;
+import org.apache.seata.saga.rm.StateMachineEngineHolder;
import org.apache.seata.saga.statelang.domain.ExecutionStatus;
import org.apache.seata.saga.statelang.domain.StateMachineInstance;
import org.junit.jupiter.api.Assertions;
@@ -44,6 +45,7 @@ public class StateMachineAsyncDBMockServerTests {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(
"classpath:saga/spring/statemachine_engine_db_mockserver_test.xml");
stateMachineEngine = applicationContext.getBean("stateMachineEngine",
StateMachineEngine.class);
+ StateMachineEngineHolder.setStateMachineEngine(stateMachineEngine);
}
@Test
diff --git
a/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java
b/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java
index b3810f1d19..4ababca893 100644
---
a/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java
+++
b/test/src/test/java/org/apache/seata/saga/engine/db/mockserver/StateMachineDBMockServerTests.java
@@ -23,6 +23,7 @@ import org.apache.seata.common.SagaCostPrint;
import org.apache.seata.saga.engine.StateMachineEngine;
import org.apache.seata.saga.engine.mock.DemoService.Engineer;
import org.apache.seata.saga.engine.mock.DemoService.People;
+import org.apache.seata.saga.rm.StateMachineEngineHolder;
import org.apache.seata.saga.statelang.domain.DomainConstants;
import org.apache.seata.saga.statelang.domain.ExecutionStatus;
import org.apache.seata.saga.statelang.domain.StateMachineInstance;
@@ -48,6 +49,7 @@ public class StateMachineDBMockServerTests {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(
"classpath:saga/spring/statemachine_engine_db_mockserver_test.xml");
stateMachineEngine = applicationContext.getBean("stateMachineEngine",
StateMachineEngine.class);
+ StateMachineEngineHolder.setStateMachineEngine(stateMachineEngine);
}
@Test
diff --git
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockGlobalTransaction.java
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockGlobalTransaction.java
index 56c1e5ddc9..5c201fd2ff 100644
---
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockGlobalTransaction.java
+++
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockGlobalTransaction.java
@@ -19,7 +19,7 @@ package org.apache.seata.saga.engine.mock;
import org.apache.seata.core.context.RootContext;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.model.GlobalStatus;
-import org.apache.seata.saga.engine.sequence.SpringJvmUUIDSeqGenerator;
+import org.apache.seata.saga.engine.sequence.UUIDSeqGenerator;
import org.apache.seata.tm.api.GlobalTransaction;
import org.apache.seata.tm.api.GlobalTransactionRole;
import org.apache.seata.tm.api.transaction.SuspendedResourcesHolder;
@@ -31,7 +31,7 @@ public class MockGlobalTransaction implements
GlobalTransaction {
private GlobalStatus status;
private long createTime;
- private static SpringJvmUUIDSeqGenerator uuidSeqGenerator = new
SpringJvmUUIDSeqGenerator();
+ private static UUIDSeqGenerator uuidSeqGenerator = new UUIDSeqGenerator();
public MockGlobalTransaction() {}
diff --git
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
index 6cf6cd693f..55da9629da 100644
---
a/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
+++
b/test/src/test/java/org/apache/seata/saga/engine/mock/MockSagaTransactionTemplate.java
@@ -19,7 +19,7 @@ package org.apache.seata.saga.engine.mock;
import org.apache.seata.core.exception.TransactionException;
import org.apache.seata.core.model.BranchStatus;
import org.apache.seata.core.model.GlobalStatus;
-import org.apache.seata.saga.tm.SagaTransactionalTemplate;
+import org.apache.seata.saga.engine.tm.SagaTransactionalTemplate;
import org.apache.seata.server.UUIDGenerator;
import org.apache.seata.tm.api.GlobalTransaction;
import org.apache.seata.tm.api.TransactionalExecutor.ExecutionException;
diff --git
a/test/src/test/resources/saga/spring/statemachine_engine_db_mockserver_test.xml
b/test/src/test/resources/saga/spring/statemachine_engine_db_mockserver_test.xml
index 8ce3128c19..b0124b7751 100644
---
a/test/src/test/resources/saga/spring/statemachine_engine_db_mockserver_test.xml
+++
b/test/src/test/resources/saga/spring/statemachine_engine_db_mockserver_test.xml
@@ -40,16 +40,16 @@
</jdbc:initialize-database>
<bean id="stateMachineEngine"
class="org.apache.seata.saga.engine.impl.ProcessCtrlStateMachineEngine">
- <property name="stateMachineConfig"
ref="dbStateMachineConfig"></property>
+ <property name="stateMachineConfig" ref="dbStateMachineConfig"/>
</bean>
<bean id="dbStateMachineConfig"
class="org.apache.seata.saga.engine.config.DbStateMachineConfig">
- <property name="dataSource" ref="dataSource"></property>
- <property name="tablePrefix" value="seata_"></property>
- <property name="resources"
value="saga/statelang/*.json"></property>
- <property name="enableAsync" value="true"></property>
- <property name="threadPoolExecutor"
ref="threadExecutor"></property>
- <property name="applicationId" value="test_saga"></property>
- <property name="txServiceGroup"
value="default_tx_group"></property>
+ <property name="dataSource" ref="dataSource"/>
+ <property name="tablePrefix" value="seata_"/>
+ <property name="resources" value="saga/statelang/*.json"/>
+ <property name="enableAsync" value="true"/>
+ <property name="threadPoolExecutor" ref="threadExecutor"/>
+ <property name="applicationId" value="test_saga"/>
+ <property name="txServiceGroup" value="default_tx_group"/>
<property name="sagaTransactionalTemplate"
ref="mockSagaTransactionTemplate"/>
</bean>
<bean id="threadExecutor"
@@ -64,11 +64,6 @@
<bean name="callerRunsPolicy"
class="java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy">
</bean>
- <bean class="org.apache.seata.saga.rm.StateMachineEngineHolder">
- <property name="stateMachineEngine" ref="stateMachineEngine"/>
- </bean>
-
-
<bean id="demoService"
class="org.apache.seata.saga.engine.mock.DemoService"/>
<bean id="mockSagaTransactionTemplate"
class="org.apache.seata.saga.engine.mock.MockSagaTransactionTemplate"/>
diff --git
a/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml
b/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml
index 867589d918..c401726464 100644
--- a/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml
+++ b/test/src/test/resources/saga/spring/statemachine_engine_db_test.xml
@@ -40,17 +40,17 @@
</jdbc:initialize-database>
<bean id="stateMachineEngine"
class="org.apache.seata.saga.engine.impl.ProcessCtrlStateMachineEngine">
- <property name="stateMachineConfig"
ref="dbStateMachineConfig"></property>
+ <property name="stateMachineConfig" ref="dbStateMachineConfig"/>
</bean>
<bean id="dbStateMachineConfig"
class="org.apache.seata.saga.engine.config.DbStateMachineConfig">
- <property name="dataSource" ref="dataSource"></property>
- <property name="resources"
value="saga/statelang/*.json"></property>
- <property name="enableAsync" value="true"></property>
- <property name="threadPoolExecutor"
ref="threadExecutor"></property>
- <property name="applicationId" value="test_saga"></property>
- <property name="txServiceGroup"
value="default_tx_group"></property>
- <property name="sagaBranchRegisterEnable"
value="false"></property>
- <property name="sagaJsonParser" value="jackson"></property>
+ <property name="dataSource" ref="dataSource"/>
+ <property name="resources" value="saga/statelang/*.json"/>
+ <property name="enableAsync" value="true"/>
+ <property name="threadPoolExecutor" ref="threadExecutor"/>
+ <property name="applicationId" value="test_saga"/>
+ <property name="txServiceGroup" value="default_tx_group"/>
+ <property name="sagaBranchRegisterEnable" value="false"/>
+ <property name="sagaJsonParser" value="jackson"/>
<property name="sagaRetryPersistModeUpdate" value="false" />
<property name="sagaCompensatePersistModeUpdate" value="false"
/>
</bean>
@@ -67,10 +67,6 @@
<bean name="callerRunsPolicy"
class="java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy">
</bean>
- <bean class="org.apache.seata.saga.rm.StateMachineEngineHolder">
- <property name="stateMachineEngine" ref="stateMachineEngine"/>
- </bean>
-
<bean id="demoService"
class="org.apache.seata.saga.engine.mock.DemoService"/>
</beans>
\ No newline at end of file
diff --git a/test/src/test/resources/saga/spring/statemachine_engine_test.xml
b/test/src/test/resources/saga/spring/statemachine_engine_test.xml
index b755899c77..908b4b38a4 100644
--- a/test/src/test/resources/saga/spring/statemachine_engine_test.xml
+++ b/test/src/test/resources/saga/spring/statemachine_engine_test.xml
@@ -23,11 +23,11 @@
<bean id="stateMachineEngine"
class="org.apache.seata.saga.engine.impl.ProcessCtrlStateMachineEngine">
- <property name="stateMachineConfig"
ref="defaultStateMachineConfig"></property>
+ <property name="stateMachineConfig"
ref="defaultStateMachineConfig"/>
</bean>
<bean id="defaultStateMachineConfig"
class="org.apache.seata.saga.engine.impl.DefaultStateMachineConfig">
- <property name="resources"
value="saga/statelang/*.json"></property>
- <property name="enableAsync" value="true"></property>
+ <property name="resources" value="saga/statelang/*.json"/>
+ <property name="enableAsync" value="true"/>
<property name="threadPoolExecutor" ref="threadExecutor" />
</bean>
<bean id="threadExecutor"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]