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 <ian....@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 +}