You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by je...@apache.org on 2018/09/21 09:59:23 UTC

[incubator-dubbo] branch master updated: issue#2516: Remove getSpringContext() from org.apache.dubbo.config.spring.ServiceBean (#2517)

This is an automated email from the ASF dual-hosted git repository.

jerrick pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 84410f7   issue#2516: Remove getSpringContext() from org.apache.dubbo.config.spring.ServiceBean (#2517)
84410f7 is described below

commit 84410f79602a561b26957dc5149f599efd44aa2b
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Fri Sep 21 17:59:18 2018 +0800

     issue#2516: Remove getSpringContext() from org.apache.dubbo.config.spring.ServiceBean (#2517)
---
 .../java/org/apache/dubbo/config/spring/ServiceBean.java    |  7 -------
 .../config/spring/extension/SpringExtensionFactory.java     |  4 ++++
 .../dubbo/config/spring/status/DataSourceStatusChecker.java | 12 ++++++++++--
 .../dubbo/config/spring/status/SpringStatusChecker.java     | 12 ++++++++++--
 .../config/spring/status/DataSourceStatusCheckerTest.java   | 11 ++++++++++-
 .../dubbo/config/spring/status/SpringStatusCheckerTest.java | 13 ++++++++++++-
 6 files changed, 46 insertions(+), 13 deletions(-)

diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
index acdb9cd..1d5ff8e 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
@@ -50,8 +50,6 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
 
     private static final long serialVersionUID = 213195494150089726L;
 
-    private static transient ApplicationContext SPRING_CONTEXT;
-
     private final transient Service service;
 
     private transient ApplicationContext applicationContext;
@@ -70,15 +68,10 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
         this.service = service;
     }
 
-    public static ApplicationContext getSpringContext() {
-        return SPRING_CONTEXT;
-    }
-
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) {
         this.applicationContext = applicationContext;
         SpringExtensionFactory.addApplicationContext(applicationContext);
-        SPRING_CONTEXT = applicationContext;
         try {
             Method method = applicationContext.getClass().getMethod("addApplicationListener", ApplicationListener.class); // backward compatibility to spring 2.0.1
             method.invoke(applicationContext, this);
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java
index 11dd6a6..56862f3 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java
@@ -42,6 +42,10 @@ public class SpringExtensionFactory implements ExtensionFactory {
         contexts.remove(context);
     }
 
+    public static Set<ApplicationContext> getContexts() {
+        return contexts;
+    }
+
     // currently for test purpose
     public static void clearContexts() {
         contexts.clear();
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
index 4766b6b..5a934be 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.common.status.StatusChecker;
-import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
 import org.springframework.context.ApplicationContext;
 
 import javax.sql.DataSource;
@@ -41,10 +41,18 @@ public class DataSourceStatusChecker implements StatusChecker {
     @Override
     @SuppressWarnings("unchecked")
     public Status check() {
-        ApplicationContext context = ServiceBean.getSpringContext();
+        ApplicationContext context = null;
+        for (ApplicationContext c : SpringExtensionFactory.getContexts()) {
+            if (c != null) {
+                context = c;
+                break;
+            }
+        }
+
         if (context == null) {
             return new Status(Status.Level.UNKNOWN);
         }
+
         Map<String, DataSource> dataSources = context.getBeansOfType(DataSource.class, false, false);
         if (dataSources == null || dataSources.size() == 0) {
             return new Status(Status.Level.UNKNOWN);
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
index 3f7c7a7..8f4fb65 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.common.status.StatusChecker;
-import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.Lifecycle;
 
@@ -37,10 +37,18 @@ public class SpringStatusChecker implements StatusChecker {
 
     @Override
     public Status check() {
-        ApplicationContext context = ServiceBean.getSpringContext();
+        ApplicationContext context = null;
+        for (ApplicationContext c : SpringExtensionFactory.getContexts()) {
+            if (c != null) {
+                context = c;
+                break;
+            }
+        }
+
         if (context == null) {
             return new Status(Status.Level.UNKNOWN);
         }
+
         Status.Level level = Status.Level.OK;
         if (context instanceof Lifecycle) {
             if (((Lifecycle) context).isRunning()) {
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
index ee098cd..532d97b 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
@@ -18,10 +18,13 @@ package org.apache.dubbo.config.spring.status;
 
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.springframework.context.ApplicationContext;
 
 import javax.sql.DataSource;
@@ -51,6 +54,12 @@ public class DataSourceStatusCheckerTest {
         new ServiceBean<Object>().setApplicationContext(applicationContext);
     }
 
+    @After
+    public void tearDown() throws Exception {
+        SpringExtensionFactory.clearContexts();
+        Mockito.reset(applicationContext);
+    }
+
     @Test
     public void testWithoutApplicationContext() {
         Status status = dataSourceStatusChecker.check();
@@ -97,4 +106,4 @@ public class DataSourceStatusCheckerTest {
 
         assertThat(status.getLevel(), is(Status.Level.ERROR));
     }
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
index af151ca..66155e1 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
@@ -18,9 +18,12 @@ package org.apache.dubbo.config.spring.status;
 
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.Lifecycle;
 
@@ -43,6 +46,12 @@ public class SpringStatusCheckerTest {
         new ServiceBean<Object>().setApplicationContext(applicationContext);
     }
 
+    @After
+    public void tearDown() throws Exception {
+        SpringExtensionFactory.clearContexts();
+        Mockito.reset(applicationContext);
+    }
+
     @Test
     public void testWithoutApplicationContext() {
         Status status = springStatusChecker.check();
@@ -52,6 +61,7 @@ public class SpringStatusCheckerTest {
 
     @Test
     public void testWithLifeCycleRunning() {
+        SpringExtensionFactory.clearContexts();
         ApplicationLifeCycle applicationLifeCycle = mock(ApplicationLifeCycle.class);
         new ServiceBean<Object>().setApplicationContext(applicationLifeCycle);
         given(applicationLifeCycle.getConfigLocations()).willReturn(new String[]{"test1", "test2"});
@@ -65,6 +75,7 @@ public class SpringStatusCheckerTest {
 
     @Test
     public void testWithoutLifeCycleRunning() {
+        SpringExtensionFactory.clearContexts();
         ApplicationLifeCycle applicationLifeCycle = mock(ApplicationLifeCycle.class);
         new ServiceBean<Object>().setApplicationContext(applicationLifeCycle);
         given(applicationLifeCycle.isRunning()).willReturn(false);
@@ -77,4 +88,4 @@ public class SpringStatusCheckerTest {
     interface ApplicationLifeCycle extends Lifecycle, ApplicationContext {
         String[] getConfigLocations();
     }
-}
\ No newline at end of file
+}