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

Reply via email to