Waldemar Maier created LANG-1144:
------------------------------------
Summary: Multiple calls of
org.apache.commons.lang3.concurrent.LazyInitializer.initialize()
Key: LANG-1144
URL: https://issues.apache.org/jira/browse/LANG-1144
Project: Commons Lang
Issue Type: Bug
Components: lang.concurrent.*
Affects Versions: 3.4
Environment: Java 1.8 on Windows 7 x64
Reporter: Waldemar Maier
Priority: Critical
It is possible to create a construct, that allows multiple calls of
LazyInitializer.initialize, when calculations (which can be very expensive)
return null as result.
The Junit Test can be somthing like this:
{code:java}
package edu.test;
import static org.junit.Assert.assertEquals;
import org.apache.commons.lang3.concurrent.ConcurrentException;
import org.apache.commons.lang3.concurrent.LazyInitializer;
import org.junit.Test;
public class LazyInitializerTest {
private int lazyinitCounter = 0;
private LazyInitializer<Object> lazyIinit = new LazyInitializer<Object>() {
@Override
protected Object initialize() throws ConcurrentException {
lazyinitCounter++;
return doSomeVeryExpensiveOperations();
}
};
private Object doSomeVeryExpensiveOperations() {
// do db calls
// do some complex math calculations
// the result of them all is null
return null;
}
@Test
public void testInitialization() throws Exception {
lazyIinit.get();
lazyIinit.get();
assertEquals("Multiple call of LazyInitializer#initialize", 1,
lazyinitCounter);
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)