diff --git a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/SofaRuntimeContainer.java b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/SofaRuntimeContainer.java index b50e0c74c..248c37eac 100644 --- a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/SofaRuntimeContainer.java +++ b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/SofaRuntimeContainer.java @@ -18,7 +18,6 @@ import com.alipay.sofa.runtime.spi.component.SofaRuntimeManager; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.util.Assert; @@ -34,7 +33,7 @@ * @author huzijie * @since 2.5.0 */ -public class SofaRuntimeContainer implements ApplicationContextAware, DisposableBean { +public class SofaRuntimeContainer implements ApplicationContextAware { private static final Map APPLICATION_CONTEXT_MAP = new ConcurrentHashMap<>(); @@ -104,10 +103,14 @@ public static void clear() { JVM_INVOKE_SERIALIZE_MAP.clear(); } - @Override - public void destroy() { + public static void destroy(ClassLoader contextClassLoader) { APPLICATION_CONTEXT_MAP.remove(contextClassLoader); - SOFA_RUNTIME_MANAGER_MAP.remove(contextClassLoader); + + SofaRuntimeManager sofaRuntimeManager = SOFA_RUNTIME_MANAGER_MAP.remove(contextClassLoader); + if (sofaRuntimeManager != null) { + sofaRuntimeManager.shutDownExternally(); + } + JVM_SERVICE_CACHE_MAP.remove(contextClassLoader); JVM_INVOKE_SERIALIZE_MAP.remove(contextClassLoader); } diff --git a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandler.java b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandler.java index 96631b62b..9bb596cf4 100644 --- a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandler.java +++ b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/main/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandler.java @@ -42,13 +42,8 @@ private void doUninstallBiz(Biz biz) { // Remove dynamic JVM service cache DynamicJvmServiceProxyFinder.getInstance().afterBizUninstall(biz); - SofaRuntimeManager sofaRuntimeManager = SofaRuntimeContainer.getSofaRuntimeManager(biz - .getBizClassLoader()); + SofaRuntimeContainer.destroy(biz.getBizClassLoader()); - if (sofaRuntimeManager == null) { - throw new IllegalStateException("No SofaRuntimeManager match classLoader"); - } - sofaRuntimeManager.shutDownExternally(); } @Override diff --git a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/SofaRuntimeContainerTests.java b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/SofaRuntimeContainerTests.java index 97897b19c..e9958117d 100644 --- a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/SofaRuntimeContainerTests.java +++ b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/SofaRuntimeContainerTests.java @@ -93,7 +93,7 @@ public void destroy() throws Exception { assertThat(SofaRuntimeContainer.getApplicationContext(classLoaderA)).isEqualTo( genericApplicationContext); - sofaRuntimeContainer.destroy(); + sofaRuntimeContainer.destroy(classLoaderA); assertThat(SofaRuntimeContainer.getApplicationContext(classLoaderA)).isNull(); } diff --git a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandlerTests.java b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandlerTests.java index 0950b2be3..be3c975de 100644 --- a/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandlerTests.java +++ b/sofa-boot-project/sofa-boot-core/ark-sofa-boot/src/test/java/com/alipay/sofa/boot/ark/handler/SofaBizUninstallEventHandlerTests.java @@ -27,7 +27,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.context.support.GenericApplicationContext; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -50,14 +49,6 @@ public void clear() { SofaRuntimeContainer.clear(); } - @Test - public void noSofaRuntimeManager() { - MockBiz mockBiz = new MockBiz(); - assertThatThrownBy(() -> sofaBizUninstallEventHandler.handleEvent(new BeforeBizStopEvent(mockBiz))) - .isInstanceOf(IllegalStateException.class) - .hasMessage("No SofaRuntimeManager match classLoader"); - } - @Test public void shutDown() { SofaRuntimeContainer sofaRuntimeContainer = new SofaRuntimeContainer(sofaRuntimeManager);