SCB-1627 Package Alpha's metadata with AlphaMetas
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.java
new file mode 100644
index 0000000..a1a043f
--- /dev/null
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/AlphaMetas.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.omega.context;
+
+public class AlphaMetas {
+
+  private boolean akkaEnabled = false;
+
+  public boolean isAkkaEnabled() {
+    return akkaEnabled;
+  }
+
+  @Override
+  public String toString() {
+    return "AlphaMetas{" +
+        "akkaEnabled=" + akkaEnabled +
+        '}';
+  }
+
+  public static AlphaMetasBuilder builder() {
+    return new AlphaMetasBuilder();
+  }
+
+  public static final class AlphaMetasBuilder {
+
+    private boolean akkaEnabled = false;
+
+    public AlphaMetasBuilder akkaEnabled(boolean akkaEnabled) {
+      this.akkaEnabled = akkaEnabled;
+      return this;
+    }
+
+    public AlphaMetas build() {
+      AlphaMetas alphaMetas = new AlphaMetas();
+      alphaMetas.akkaEnabled = this.akkaEnabled;
+      return alphaMetas;
+    }
+  }
+}
\ No newline at end of file
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
index 660b923..fd0487a 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/pack/omega/context/OmegaContext.java
@@ -28,15 +28,15 @@
   private final ThreadLocal<String> localTxId = new InheritableThreadLocal<>();
   private final IdGenerator<String> idGenerator;
 
-  private final boolean alphaFeatureAkkaEnabled;
+  private final AlphaMetas alphaMetas;
 
   public OmegaContext(IdGenerator<String> idGenerator) {
-    this(idGenerator,false);
+    this(idGenerator, AlphaMetas.builder().akkaEnabled(false).build());
   }
 
-  public OmegaContext(IdGenerator<String> idGenerator, boolean alphaFeatureAkkaEnabled) {
+  public OmegaContext(IdGenerator<String> idGenerator, AlphaMetas alphaMetas) {
     this.idGenerator = idGenerator;
-    this.alphaFeatureAkkaEnabled = alphaFeatureAkkaEnabled;
+    this.alphaMetas = alphaMetas;
   }
 
   public String newGlobalTxId() {
@@ -67,8 +67,8 @@
     return localTxId.get();
   }
 
-  public boolean isAlphaFeatureAkkaEnabled() {
-    return alphaFeatureAkkaEnabled;
+  public AlphaMetas getAlphaMetas() {
+    return alphaMetas;
   }
 
   public TransactionContext getTransactionContext() {
@@ -85,7 +85,7 @@
     return "OmegaContext{" +
         "globalTxId=" + globalTxId.get() +
         ", localTxId=" + localTxId.get() +
-        ", alphaFeatureAkkaEnabled=" + alphaFeatureAkkaEnabled +
+        ", " + alphaMetas +
         '}';
   }
 
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
index 1fd3648..5f54972 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
@@ -28,6 +28,7 @@
 import org.apache.servicecomb.pack.omega.connector.grpc.core.TransactionType;
 import org.apache.servicecomb.pack.omega.connector.grpc.saga.SagaLoadBalanceSender;
 import org.apache.servicecomb.pack.omega.connector.grpc.tcc.TccLoadBalanceSender;
+import org.apache.servicecomb.pack.omega.context.AlphaMetas;
 import org.apache.servicecomb.pack.omega.transaction.CallbackContext;
 import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
@@ -68,7 +69,7 @@
   OmegaContext omegaContext(@Qualifier("omegaUniqueIdGenerator") IdGenerator<String> idGenerator, SagaMessageSender messageSender) {
     ServerMeta serverMeta = messageSender.onGetServerMeta();
     boolean akkaEnabeld = Boolean.parseBoolean(serverMeta.getMetaMap().get(AlphaMetaKeys.AkkaEnabled.name()));
-    return new OmegaContext(idGenerator,akkaEnabeld);
+    return new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(akkaEnabeld).build());
   }
 
   @Bean(name = {"compensationContext"})
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
index de9aa3f..9f5f268 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAnnotationProcessor.java
@@ -50,7 +50,7 @@
 
   public void onError(String compensationMethod, Throwable throwable) {
     String globalTxId = omegaContext.globalTxId();
-    if(omegaContext.isAlphaFeatureAkkaEnabled()){
+    if(omegaContext.getAlphaMetas().isAkkaEnabled()){
       sender.send(
           new SagaAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod,
               throwable));
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
index 650448d..d9a2320 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspect.java
@@ -42,7 +42,7 @@
   @Around("execution(@org.apache.servicecomb.pack.omega.context.annotations.SagaStart * *(..)) && @annotation(sagaStart)")
   Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
     initializeOmegaContext();
-    if(context.isAlphaFeatureAkkaEnabled() && sagaStart.timeout()>0){
+    if(context.getAlphaMetas().isAkkaEnabled() && sagaStart.timeout()>0){
       SagaStartAnnotationProcessorTimeoutWrapper wrapper = new SagaStartAnnotationProcessorTimeoutWrapper(this.sagaStartAnnotationProcessor);
       return wrapper.apply(joinPoint,sagaStart,context);
     }else{
diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
index ba4539c..2226181 100644
--- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
+++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/pack/omega/transaction/SagaStartAspectTest.java
@@ -29,6 +29,7 @@
 
 import org.apache.servicecomb.pack.common.EventType;
 import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
+import org.apache.servicecomb.pack.omega.context.AlphaMetas;
 import org.apache.servicecomb.pack.omega.context.IdGenerator;
 import org.apache.servicecomb.pack.omega.context.OmegaContext;
 import org.apache.servicecomb.pack.omega.context.annotations.SagaStart;
@@ -169,7 +170,7 @@
 
   @Test
   public void clearContextOnSagaStartErrorWithAkka() throws Throwable {
-    omegaContext = new OmegaContext(idGenerator,true);
+    omegaContext = new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(true).build());
     aspect = new SagaStartAspect(sender, omegaContext);
     RuntimeException oops = new RuntimeException("oops");
 
diff --git a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java b/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
index 352dd70..ce27b80 100644
--- a/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
+++ b/pack-common/src/main/java/org/apache/servicecomb/pack/common/AlphaMetaKeys.java
@@ -18,5 +18,5 @@
 package org.apache.servicecomb.pack.common;
 
 public enum AlphaMetaKeys {
-  AkkaEnabled
+  AkkaEnabled // TODO Future expansion to SupportSaga, SupportTcc
 }
\ No newline at end of file