SCB-1811 Configure PAYLOADS_MAX_LENGTH parameter from setting environment variable
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
index 5e8aee8..017ee0e 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
@@ -53,13 +53,13 @@
 import org.apache.servicecomb.pack.alpha.fsm.model.TxEntity;
 import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension;
 import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SpringAkkaExtension;
+import org.apache.servicecomb.pack.common.Environment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import scala.concurrent.duration.Duration;
 
 public class SagaActor extends
     AbstractPersistentFSM<SagaActorState, SagaData, DomainEvent> {
-  protected static final int PAYLOADS_MAX_LENGTH = 10240;
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private String persistenceId;
   private long sagaBeginTime;
@@ -578,8 +578,8 @@
         StringWriter writer = new StringWriter();
         ex.printStackTrace(new PrintWriter(writer));
         String stackTrace = writer.toString();
-        if (stackTrace.length() > PAYLOADS_MAX_LENGTH) {
-          stackTrace = stackTrace.substring(0, PAYLOADS_MAX_LENGTH);
+        if (stackTrace.length() > Environment.getInstance().getPayloadsMaxLength()) {
+          stackTrace = stackTrace.substring(0, Environment.getInstance().getPayloadsMaxLength());
         }
         CompensateAckTimeoutEvent event = CompensateAckTimeoutEvent.builder()
             .createTime(new Date(System.currentTimeMillis()))
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TxEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TxEvent.java
index 4cab583..4c749b8 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TxEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/TxEvent.java
@@ -21,10 +21,10 @@
 import java.io.StringWriter;
 import java.util.Arrays;
 
+import org.apache.servicecomb.pack.common.Environment;
 import org.apache.servicecomb.pack.common.EventType;
 
 public class TxEvent {
-  protected static final int PAYLOADS_MAX_LENGTH = 10240;
   private final long timestamp;
   private final EventType type;
   private final String globalTxId;
@@ -138,8 +138,8 @@
     StringWriter writer = new StringWriter();
     e.printStackTrace(new PrintWriter(writer));
     String stackTrace = writer.toString();
-    if (stackTrace.length() > PAYLOADS_MAX_LENGTH) {
-      stackTrace = stackTrace.substring(0, PAYLOADS_MAX_LENGTH);
+    if (stackTrace.length() > Environment.getInstance().getPayloadsMaxLength()) {
+      stackTrace = stackTrace.substring(0, Environment.getInstance().getPayloadsMaxLength());
     }
     return stackTrace;
   }
diff --git a/pack-common/src/main/java/org/apache/servicecomb/pack/common/Environment.java b/pack-common/src/main/java/org/apache/servicecomb/pack/common/Environment.java
new file mode 100644
index 0000000..e1d949a
--- /dev/null
+++ b/pack-common/src/main/java/org/apache/servicecomb/pack/common/Environment.java
@@ -0,0 +1,54 @@
+/*
+ * 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.servicecomb.pack.common;
+
+public class Environment {
+  private static Environment instance;
+  private static final int PAYLOADS_MAX_LENGTH = 10240;
+  private int payloadsMaxLength = 0;
+
+  public Environment() {
+    if (payloadsMaxLength == 0) {
+      String val = System.getenv("PAYLOADS_MAX_LENGTH");
+      if (val == null || val.trim().length() == 0) {
+        payloadsMaxLength = PAYLOADS_MAX_LENGTH;
+      } else {
+        try {
+          payloadsMaxLength = Integer.parseInt(val);
+        } catch (NumberFormatException ex) {
+          payloadsMaxLength = PAYLOADS_MAX_LENGTH;
+        }
+      }
+    }
+  }
+
+  public static Environment getInstance(){
+    if (instance == null) {
+      synchronized (Environment.class) {
+        if (instance == null) {
+          instance = new Environment();
+        }
+      }
+    }
+    return instance;
+  }
+
+  public int getPayloadsMaxLength() {
+    return this.payloadsMaxLength;
+  }
+}
\ No newline at end of file