From 9a85b4e54acfd1e2ddd17b5ff9bb200376865ed0 Mon Sep 17 00:00:00 2001 From: John Blum Date: Thu, 19 Mar 2020 13:25:48 -0700 Subject: [PATCH] DATAGEODE-309 - Apply Spring bean ClassLoader to Thread context ClassLoader in LocatorApplications. --- .../data/gemfire/LocatorFactoryBean.java | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/spring-data-geode/src/main/java/org/springframework/data/gemfire/LocatorFactoryBean.java b/spring-data-geode/src/main/java/org/springframework/data/gemfire/LocatorFactoryBean.java index 49325c1a..6a8df23f 100644 --- a/spring-data-geode/src/main/java/org/springframework/data/gemfire/LocatorFactoryBean.java +++ b/spring-data-geode/src/main/java/org/springframework/data/gemfire/LocatorFactoryBean.java @@ -95,28 +95,38 @@ public class LocatorFactoryBean extends AbstractFactoryBeanSupport impl public void init() { - LocatorLauncher.Builder locatorBuilder = configureGemfireProperties(newLocatorLauncherBuilder()); + ClassLoader currentThreadContextClassLoader = Thread.currentThread().getContextClassLoader(); - getBindAddress().ifPresent(locatorBuilder::setBindAddress); - getHostnameForClients().ifPresent(locatorBuilder::setHostnameForClients); - getName().ifPresent(locatorBuilder::setMemberName); + try { - locatorBuilder.set(LOG_LEVEL_PROPERTY, getLogLevel()); - locatorBuilder.setPort(getPort()); + Thread.currentThread().setContextClassLoader(getBeanClassLoader()); - locatorBuilder = postProcess(locatorBuilder); + LocatorLauncher.Builder locatorBuilder = configureGemfireProperties(newLocatorLauncherBuilder()); - this.locatorLauncher = postProcess(locatorBuilder.build()); + getBindAddress().ifPresent(locatorBuilder::setBindAddress); + getHostnameForClients().ifPresent(locatorBuilder::setHostnameForClients); + getName().ifPresent(locatorBuilder::setMemberName); - LocatorLauncher.LocatorState locatorState = this.locatorLauncher.start(); + locatorBuilder.set(LOG_LEVEL_PROPERTY, getLogLevel()); + locatorBuilder.setPort(getPort()); - /* - if (LocatorLauncher.Status.ONLINE.equals(locatorState.getStatus())) { - // log warning + locatorBuilder = postProcess(locatorBuilder); + + this.locatorLauncher = postProcess(locatorBuilder.build()); + + LocatorLauncher.LocatorState locatorState = this.locatorLauncher.start(); + + /* + if (LocatorLauncher.Status.ONLINE.equals(locatorState.getStatus())) { + // log warning + } + */ + + this.locator = this.locatorLauncher.getLocator(); + } + finally { + Thread.currentThread().setContextClassLoader(currentThreadContextClassLoader); } - */ - - this.locator = this.locatorLauncher.getLocator(); } protected LocatorLauncher.Builder configureGemfireProperties(LocatorLauncher.Builder locatorBuilder) {