Commit 29eea6d9 by Dave Syer

Call postInit() aggressively on InstanceRegistry

To avoid possible NPE when the registry is used before it is initialized. Fixes gh-97
parent 67878cfe
......@@ -17,6 +17,7 @@ package org.springframework.cloud.netflix.eureka.server;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import javax.servlet.ServletContext;
......@@ -56,6 +57,7 @@ import com.netflix.discovery.converters.XmlXStream;
import com.netflix.eureka.EurekaBootStrap;
import com.netflix.eureka.EurekaServerConfig;
import com.netflix.eureka.EurekaServerConfigurationManager;
import com.netflix.eureka.InstanceRegistry;
import com.netflix.eureka.PeerAwareInstanceRegistry;
/**
......@@ -189,11 +191,18 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware
public void onApplicationEvent(EurekaRegistryAvailableEvent event) {
if (instance == null) {
instance = PeerAwareInstanceRegistry.getInstance();
safeInit();
replaceInstance(getProxyForInstance());
expectRegistrations(1);
}
}
private void safeInit() {
Method method = ReflectionUtils.findMethod(InstanceRegistry.class, "postInit");
ReflectionUtils.makeAccessible(method);
ReflectionUtils.invokeMethod(method, instance);
}
private void replaceInstance(Object proxy) {
Field field = ReflectionUtils.findField(PeerAwareInstanceRegistry.class,
"instance");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment