You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/06/26 00:20:46 UTC

[incubator-servicecomb-saga] 01/07: SCB-244 fix servicecomb handler

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 92394dab6483ee12738af016b5e568454cbad4ad
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Jun 19 16:56:23 2018 +0800

    SCB-244 fix servicecomb handler
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../transport/servicecomb/SagaBootListener.java    | 64 ++++++++++++++++++++++
 .../transport/servicecomb/SagaConsumerHandler.java | 18 +++---
 .../transport/servicecomb/SagaProviderHandler.java | 16 ++----
 3 files changed, 77 insertions(+), 21 deletions(-)

diff --git a/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaBootListener.java b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaBootListener.java
new file mode 100644
index 0000000..412aa12
--- /dev/null
+++ b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaBootListener.java
@@ -0,0 +1,64 @@
+/*
+ *   Copyright 2017 Huawei Technologies Co., Ltd
+ *
+ *   Licensed 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.saga.omega.transport.servicecomb;
+
+import java.util.List;
+
+import org.apache.servicecomb.core.BootListener;
+import org.apache.servicecomb.core.Handler;
+import org.apache.servicecomb.core.handler.ConsumerHandlerManager;
+import org.apache.servicecomb.core.handler.ProducerHandlerManager;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SagaBootListener implements BootListener {
+  @Autowired(required = false)
+  private OmegaContext omegaContext;
+
+  @Override
+  public void onBootEvent(BootEvent bootEvent) {
+    if (EventType.AFTER_HANDLER.equals(bootEvent.getEventType())) {
+      for (List<Handler> handlers : ConsumerHandlerManager.INSTANCE.values()) {
+        injectOmegaContextIntoConsumerHandler(handlers);
+      }
+
+      for (List<Handler> handlers : ProducerHandlerManager.INSTANCE.values()) {
+        injectOmegaContextIntoProducerHandler(handlers);
+      }
+    }
+  }
+
+  private void injectOmegaContextIntoConsumerHandler(List<Handler> handlers) {
+    for (Handler handler : handlers) {
+      if (handler.getClass().equals(SagaConsumerHandler.class)) {
+        ((SagaConsumerHandler) handler).setOmegaContext(omegaContext);
+        return;
+      }
+    }
+  }
+
+  private void injectOmegaContextIntoProducerHandler(List<Handler> handlers) {
+    for (Handler handler : handlers) {
+      if (handler.getClass().equals(SagaProviderHandler.class)) {
+        ((SagaProviderHandler) handler).setOmegaContext(omegaContext);
+        return;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaConsumerHandler.java b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaConsumerHandler.java
index 82e49ef..a0b0b40 100644
--- a/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaConsumerHandler.java
+++ b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaConsumerHandler.java
@@ -22,30 +22,26 @@ import static org.apache.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID
 
 import java.lang.invoke.MethodHandles;
 
-import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.swagger.invocation.AsyncResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SagaConsumerHandler implements Handler {
 
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final OmegaContext omegaContext;
 
-  public SagaConsumerHandler(@Autowired(required=false) OmegaContext omegaContext) {
+  private OmegaContext omegaContext;
+
+  public void setOmegaContext(OmegaContext omegaContext) {
     this.omegaContext = omegaContext;
-    if (omegaContext == null) {
-      LOG.info("The OmegaContext is not injected, The SagaConsumerHandler is disabled.");
-    }
   }
 
   @Override
   public void handle(Invocation invocation, AsyncResponse asyncResponse) throws Exception {
-    if (omegaContext!= null && omegaContext.globalTxId() != null) {
+    if (omegaContext != null && omegaContext.globalTxId() != null) {
       invocation.getContext().put(GLOBAL_TX_ID_KEY, omegaContext.globalTxId());
       invocation.getContext().put(LOCAL_TX_ID_KEY, omegaContext.localTxId());
 
diff --git a/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaProviderHandler.java b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaProviderHandler.java
index a3a72b6..66e4a7f 100644
--- a/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaProviderHandler.java
+++ b/omega/omega-transport/omega-transport-servicecomb/src/main/java/org/apache/servicecomb/saga/omega/transport/servicecomb/SagaProviderHandler.java
@@ -22,25 +22,21 @@ import static org.apache.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID
 
 import java.lang.invoke.MethodHandles;
 
-import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.swagger.invocation.AsyncResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SagaProviderHandler implements Handler {
 
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final OmegaContext omegaContext;
 
-  public SagaProviderHandler(@Autowired(required=false) OmegaContext omegaContext) {
+  private OmegaContext omegaContext;
+
+  public void setOmegaContext(OmegaContext omegaContext) {
     this.omegaContext = omegaContext;
-    if (omegaContext == null) {
-      LOG.info("The OmegaContext is not injected, The SagaProviderHander is disabled.");
-    }
   }
 
   @Override