This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
commit db95f8b80de1714837a55a13bcb2c0aac805eeba Author: KomachiSion <263976...@qq.com> AuthorDate: Tue Aug 21 13:56:04 2018 +0800 SCB-855 Support JDK7 in saga-format --- .../servicecomb/saga/format/ChildrenExtractor.java | 8 +++- .../saga/format/JacksonRestOperation.java | 7 +++- .../saga/format/JacksonSagaEventFormat.java | 47 ++++++++++++++++++---- .../saga/format/JsonSagaDefinition.java | 5 ++- 4 files changed, 55 insertions(+), 12 deletions(-) diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java index cfd3b1c..58cb1eb 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/ChildrenExtractor.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.HashSet; import java.util.Set; +import com.fasterxml.jackson.databind.JsonNode; + import org.apache.servicecomb.saga.core.SagaException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -31,6 +33,7 @@ import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat; public class ChildrenExtractor implements FromJsonFormat<Set<String>> { private static final String SAGA_CHILDREN = "sagaChildren"; + private final ObjectMapper objectMapper = new ObjectMapper(); @Override @@ -46,8 +49,9 @@ public class ChildrenExtractor implements FromJsonFormat<Set<String>> { Set<String> children = new HashSet<>(); if (value.has(SAGA_CHILDREN)) { - value.get(SAGA_CHILDREN) - .forEach(node -> children.add(node.textValue())); + for (JsonNode node : value.get(SAGA_CHILDREN)) { + children.add(node.textValue()); + } } return children; diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java index 4d42451..10876fa 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonRestOperation.java @@ -51,7 +51,12 @@ class JacksonRestOperation extends RestOperation implements TransportAware { @Override public SagaResponse send(String address, SagaResponse response) { Map<String, Map<String, String>> updated = new HashMap<>(params()); - updated.computeIfAbsent("form", (key) -> new HashMap<>()).put("response", response.body()); + // This is not thread safe + if (updated.get("form") == null) { + HashMap<String, String> formMap = new HashMap<>(); + formMap.put("response", response.body()); + updated.put("form", formMap); + } return transport.with( address, diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java index 1b416aa..8b365c6 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JacksonSagaEventFormat.java @@ -20,7 +20,6 @@ package org.apache.servicecomb.saga.format; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.function.BiFunction; import org.apache.servicecomb.saga.core.FailedSagaRequestContext; import org.apache.servicecomb.saga.core.NoOpSagaRequest; @@ -40,12 +39,42 @@ import org.apache.servicecomb.saga.core.TransactionEndedEvent; public class JacksonSagaEventFormat implements SagaEventFormat { private final Map<String, BiFunction<String, String, SagaEvent>> eventFactories = new HashMap<String, BiFunction<String, String, SagaEvent>>() {{ - put(SagaStartedEvent.class.getSimpleName(), (sagaId, json) -> sagaStartedEvent(sagaId, json)); - put(TransactionStartedEvent.class.getSimpleName(), (sagaId, json) -> transactionStartedEvent(sagaId, json)); - put(TransactionEndedEvent.class.getSimpleName(), (sagaId, json) -> transactionEndedEvent(sagaId, json)); - put(TransactionAbortedEvent.class.getSimpleName(), (sagaId, json) -> transactionAbortedEvent(sagaId, json)); - put(TransactionCompensatedEvent.class.getSimpleName(), (sagaId, json) -> compensationEndedEvent(sagaId, json)); - put(SagaEndedEvent.class.getSimpleName(), (sagaId, json) -> sagaEndedEvent(sagaId)); + put(SagaStartedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return sagaStartedEvent(sagaId, json); + } + }); + put(TransactionStartedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return transactionStartedEvent(sagaId, json); + } + }); + put(TransactionEndedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return transactionEndedEvent(sagaId, json); + } + }); + put(TransactionAbortedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return transactionAbortedEvent(sagaId, json); + } + }); + put(TransactionCompensatedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return compensationEndedEvent(sagaId, json); + } + }); + put(SagaEndedEvent.class.getSimpleName(), new BiFunction<String, String, SagaEvent>() { + @Override + public SagaEvent apply(String sagaId, String json) { + return sagaEndedEvent(sagaId); + } + }); }}; private final ObjectMapper objectMapper = new ObjectMapper(); @@ -111,4 +140,8 @@ public class JacksonSagaEventFormat implements SagaEventFormat { private String cause(String sagaId, String json) { return "Failed to deserialize saga event of sage id: " + sagaId + " from json: " + json; } + + private interface BiFunction<T, U, R> { + R apply(T t, U u); + } } diff --git a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java index 5293a13..0cf3bc6 100644 --- a/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java +++ b/saga-format/src/main/java/org/apache/servicecomb/saga/format/JsonSagaDefinition.java @@ -32,12 +32,13 @@ class JsonSagaDefinition implements SagaDefinition { static final RecoveryPolicy backwardRecovery = new BackwardRecovery(); - private static final Map<String, RecoveryPolicy> policies = new HashMap<String, RecoveryPolicy>(){{ + private static final Map<String, RecoveryPolicy> policies = new HashMap<String, RecoveryPolicy>() {{ put(RecoveryPolicy.SAGA_BACKWARD_RECOVERY_POLICY, backwardRecovery); put(RecoveryPolicy.SAGA_FORWARD_RECOVERY_POLICY, new ForwardRecovery()); }}; private final JsonSagaRequest[] requests; + private final RecoveryPolicy policy; public JsonSagaDefinition( @@ -45,7 +46,7 @@ class JsonSagaDefinition implements SagaDefinition { @JsonProperty("requests") JsonSagaRequest[] requests) { this.requests = requests; - this.policy = policies.getOrDefault(policy, backwardRecovery); + this.policy = null == policies.get(policy) ? backwardRecovery : policies.get(policy); } @Override