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