NIFI-1289 reverted new method of NiFiProperties in favor of the localized reflection call in test to refresh properties.

Reviewed and Amended (added comments) by Tony Kurc (tkurc@apache.org). This closes #150
This commit is contained in:
Oleg Zhurakousky 2015-12-26 09:58:08 -05:00 committed by Tony Kurc
parent 2845e93812
commit ebcefaac23
2 changed files with 16 additions and 18 deletions

View File

@ -241,29 +241,16 @@ public class NiFiProperties extends Properties {
} }
/** /**
* Factory method to create and return a new instance of * Factory method to create an instance of the {@link NiFiProperties}. This
* {@link NiFiProperties}. Unlike its {@link #getInstance()} counterpart
* which may return you a cached instance of {@link NiFiProperties} this
* method creates new instance every time it's called. It is suitable for
* cases where properties may change at runtime.
*
* @return new instance of {@link NiFiProperties}
*/
public static synchronized NiFiProperties getNewInstance() {
instance = null;
return getInstance();
}
/**
* Factory method to create and return a new instance of
* {@link NiFiProperties}. Unlike its {@link #getNewInstance()} counterpart
* which always creates a new instance of {@link NiFiProperties}, this
* method employs a standard singleton pattern by caching the instance if it * method employs a standard singleton pattern by caching the instance if it
* was already obtained * was already obtained
* *
* @return instance of {@link NiFiProperties} * @return instance of {@link NiFiProperties}
*/ */
public static synchronized NiFiProperties getInstance() { public static synchronized NiFiProperties getInstance() {
// NOTE: unit tests can set instance to null (with reflection) to effectively create a new singleton.
// changing the below as a check for whether the instance was initialized will break those
// unit tests.
if (null == instance) { if (null == instance) {
final NiFiProperties suspectInstance = new NiFiProperties(); final NiFiProperties suspectInstance = new NiFiProperties();
final String nfPropertiesFilePath = System final String nfPropertiesFilePath = System

View File

@ -18,6 +18,7 @@ package org.apache.nifi.controller.scheduling;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -61,7 +62,7 @@ public class TestStandardProcessScheduler {
@Before @Before
public void setup() throws InitializationException { public void setup() throws InitializationException {
System.setProperty("nifi.properties.file.path", "src/test/resources/nifi.properties"); System.setProperty("nifi.properties.file.path", "src/test/resources/nifi.properties");
NiFiProperties.getNewInstance(); // ensures that properties have been reloaded this.refreshNiFiProperties();
scheduler = new StandardProcessScheduler(Mockito.mock(Heartbeater.class), Mockito.mock(ControllerServiceProvider.class), null); scheduler = new StandardProcessScheduler(Mockito.mock(Heartbeater.class), Mockito.mock(ControllerServiceProvider.class), null);
scheduler.setSchedulingAgent(SchedulingStrategy.TIMER_DRIVEN, Mockito.mock(SchedulingAgent.class)); scheduler.setSchedulingAgent(SchedulingStrategy.TIMER_DRIVEN, Mockito.mock(SchedulingAgent.class));
@ -158,4 +159,14 @@ public class TestStandardProcessScheduler {
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException { public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
} }
} }
private void refreshNiFiProperties() {
try {
Field instanceField = NiFiProperties.class.getDeclaredField("instance");
instanceField.setAccessible(true);
instanceField.set(null, null);
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
} }