diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/locking/FileChannelCache.java b/spring-integration-file/src/main/java/org/springframework/integration/file/locking/FileChannelCache.java index 4c58605b01..781d85e628 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/locking/FileChannelCache.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/locking/FileChannelCache.java @@ -34,7 +34,7 @@ import java.util.concurrent.ConcurrentMap; */ final class FileChannelCache { - private static ConcurrentMap channelCache = new ConcurrentHashMap(); + private static ConcurrentMap channelCache = new ConcurrentHashMap<>(); private FileChannelCache() { diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/locking/NioFileLocker.java b/spring-integration-file/src/main/java/org/springframework/integration/file/locking/NioFileLocker.java index 4f3e4a3533..1f4e8f63ff 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/locking/NioFileLocker.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/locking/NioFileLocker.java @@ -40,7 +40,7 @@ import org.springframework.messaging.MessagingException; */ public class NioFileLocker extends AbstractFileLockerFilter { - private final ConcurrentMap lockCache = new ConcurrentHashMap(); + private final ConcurrentMap lockCache = new ConcurrentHashMap<>(); @Override public boolean lock(File fileToLock) { @@ -68,7 +68,7 @@ public class NioFileLocker extends AbstractFileLockerFilter { @Override public void unlock(File fileToUnlock) { - FileLock fileLock = this.lockCache.get(fileToUnlock); + FileLock fileLock = this.lockCache.remove(fileToUnlock); try { if (fileLock != null) { fileLock.release(); diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java index d37ea157ef..3918f77aae 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java @@ -20,17 +20,20 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; +import java.lang.reflect.Field; import java.util.ArrayList; -import java.util.List; +import java.util.Map; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.springframework.integration.file.filters.FileListFilter; +import org.springframework.integration.test.util.TestUtils; /** * @author Iwein Fuld + * @author Gary Russell */ public class NioFileLockerTests { @@ -47,13 +50,18 @@ public class NioFileLockerTests { }; @Test - public void fileListedByFirstFilter() throws IOException { + public void fileListedByFirstFilter() throws Exception { NioFileLocker filter = new NioFileLocker(); File testFile = new File(workdir, "test0"); testFile.createNewFile(); assertThat(filter.filterFiles(workdir.listFiles()).get(0)).isEqualTo(testFile); filter.lock(testFile); assertThat(filter.filterFiles(workdir.listFiles()).get(0)).isEqualTo(testFile); + filter.unlock(testFile); + Field channelCache = FileChannelCache.class.getDeclaredField("channelCache"); + channelCache.setAccessible(true); + assertThat(((Map) channelCache.get(null))).isEmpty(); + assertThat(((Map) TestUtils.getPropertyValue(filter, "lockCache", Map.class))).isEmpty(); } @Test @@ -64,7 +72,8 @@ public class NioFileLockerTests { testFile.createNewFile(); assertThat(filter1.filterFiles(workdir.listFiles()).get(0)).isEqualTo(testFile); filter1.lock(testFile); - assertThat(filter2.filterFiles(workdir.listFiles())).isEqualTo((List) new ArrayList()); + assertThat(filter2.filterFiles(workdir.listFiles())).isEqualTo(new ArrayList()); + filter1.unlock(testFile); } }