diff --git a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java index 164a14421..12ba5f23a 100644 --- a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java +++ b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java @@ -134,7 +134,7 @@ private void initializeSessionCreateTime() throws IOException { new FileInputStream(sessionTimeFile)))) { final Calendar c = SystemTime.getUtcCalendar(UtcTimestampConverter .convert(sessionTimeInput.readUTF())); - cache.setCreationTime(c); + cache.setCreationTimeCalendar(c); } catch (final Exception e) { throw new IOException(e.getMessage()); } @@ -147,7 +147,7 @@ private void storeSessionTimeStamp() throws IOException { try (DataOutputStream sessionTimeOutput = new DataOutputStream(new BufferedOutputStream( new FileOutputStream(sessionFileName, false)))) { final Date date = SystemTime.getDate(); - cache.setCreationTime(SystemTime.getUtcCalendar(date)); + cache.setCreationTimeCalendar(SystemTime.getUtcCalendar(date)); sessionTimeOutput.writeUTF(UtcTimestampConverter.convert(date, true)); } } diff --git a/quickfixj-core/src/main/java/quickfix/FileStore.java b/quickfixj-core/src/main/java/quickfix/FileStore.java index 808e30b9b..1d2309eb8 100644 --- a/quickfixj-core/src/main/java/quickfix/FileStore.java +++ b/quickfixj-core/src/main/java/quickfix/FileStore.java @@ -124,7 +124,7 @@ private void initializeSessionCreateTime() throws IOException { new FileInputStream(sessionTimeFile)))) { final Calendar c = SystemTime.getUtcCalendar(UtcTimestampConverter .convert(sessionTimeInput.readUTF())); - cache.setCreationTime(c); + cache.setCreationTimeCalendar(c); } catch (final Exception e) { throw new IOException(e.getMessage()); } @@ -137,7 +137,7 @@ private void storeSessionTimeStamp() throws IOException { try (DataOutputStream sessionTimeOutput = new DataOutputStream(new BufferedOutputStream( new FileOutputStream(sessionFileName, false)))) { final Date date = SystemTime.getDate(); - cache.setCreationTime(SystemTime.getUtcCalendar(date)); + cache.setCreationTimeCalendar(SystemTime.getUtcCalendar(date)); sessionTimeOutput.writeUTF(UtcTimestampConverter.convert(date, true)); } } diff --git a/quickfixj-core/src/main/java/quickfix/JdbcStore.java b/quickfixj-core/src/main/java/quickfix/JdbcStore.java index f05fb6e16..9954db7c7 100644 --- a/quickfixj-core/src/main/java/quickfix/JdbcStore.java +++ b/quickfixj-core/src/main/java/quickfix/JdbcStore.java @@ -160,7 +160,7 @@ private void loadCache() throws SQLException, IOException { setSessionIdParameters(query, 1); rs = query.executeQuery(); if (rs.next()) { - cache.setCreationTime(SystemTime.getUtcCalendar(rs.getTimestamp(1))); + cache.setCreationTimeCalendar(SystemTime.getUtcCalendar(rs.getTimestamp(1))); cache.setNextTargetMsgSeqNum(rs.getInt(2)); cache.setNextSenderMsgSeqNum(rs.getInt(3)); } else { diff --git a/quickfixj-core/src/main/java/quickfix/MemoryStore.java b/quickfixj-core/src/main/java/quickfix/MemoryStore.java index 9bbf967f8..485611cb4 100644 --- a/quickfixj-core/src/main/java/quickfix/MemoryStore.java +++ b/quickfixj-core/src/main/java/quickfix/MemoryStore.java @@ -37,7 +37,7 @@ public class MemoryStore implements MessageStore { private int nextSenderMsgSeqNum; private int nextTargetMsgSeqNum; private SessionID sessionID; - private Calendar creationTime = SystemTime.getUtcCalendar(); + private Calendar creationTimeCalendar = SystemTime.getUtcCalendar(); public MemoryStore() throws IOException { reset(); @@ -67,15 +67,15 @@ public boolean get(int sequence, String message) throws IOException { } public Date getCreationTime() throws IOException { - return creationTime.getTime(); + return creationTimeCalendar.getTime(); } public Calendar getCreationTimeCalendar() throws IOException { - return creationTime; + return creationTimeCalendar; } - void setCreationTime(Calendar creationTime) { - this.creationTime = creationTime; + void setCreationTimeCalendar(Calendar creationTimeCalendar) { + this.creationTimeCalendar = creationTimeCalendar; } public int getNextSenderMsgSeqNum() { @@ -98,7 +98,7 @@ public void reset() throws IOException { setNextSenderMsgSeqNum(1); setNextTargetMsgSeqNum(1); messages.clear(); - creationTime = SystemTime.getUtcCalendar(); + creationTimeCalendar = SystemTime.getUtcCalendar(); } public boolean set(int sequence, String message) throws IOException { diff --git a/quickfixj-core/src/main/java/quickfix/NoopStore.java b/quickfixj-core/src/main/java/quickfix/NoopStore.java index 8bdc4cc35..aec6c25d2 100644 --- a/quickfixj-core/src/main/java/quickfix/NoopStore.java +++ b/quickfixj-core/src/main/java/quickfix/NoopStore.java @@ -31,16 +31,15 @@ */ public class NoopStore implements MessageStore { - private Date creationTime = new Date(); - private Calendar creationTimeCalendar = SystemTime.getUtcCalendar(creationTime); private int nextSenderMsgSeqNum = 1; private int nextTargetMsgSeqNum = 1; + private Calendar creationTimeCalendar = SystemTime.getUtcCalendar(); public void get(int startSequence, int endSequence, Collection messages) { } public Date getCreationTime() { - return creationTime; + return creationTimeCalendar.getTime(); } public Calendar getCreationTimeCalendar() { @@ -64,9 +63,9 @@ public void incrNextTargetMsgSeqNum() { } public void reset() { - creationTime = new Date(); nextSenderMsgSeqNum = 1; nextTargetMsgSeqNum = 1; + creationTimeCalendar = SystemTime.getUtcCalendar(); } public boolean set(int sequence, String message) { diff --git a/quickfixj-core/src/test/java/quickfix/NoopStoreTest.java b/quickfixj-core/src/test/java/quickfix/NoopStoreTest.java new file mode 100644 index 000000000..396c83feb --- /dev/null +++ b/quickfixj-core/src/test/java/quickfix/NoopStoreTest.java @@ -0,0 +1,45 @@ +package quickfix; + +import org.junit.Test; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.Calendar; +import java.util.Date; + +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotSame; + +public class NoopStoreTest { + + @Test + public void shouldInstantiateNewCalendarOnStoreReset() { + try { + LocalDateTime before = LocalDateTime.of(2023, 1, 1, 2, 3, 4); + + MockSystemTimeSource beforeTimeSource = new MockSystemTimeSource(before.toInstant(ZoneOffset.UTC).toEpochMilli()); + SystemTime.setTimeSource(beforeTimeSource); + + NoopStore underTest = new NoopStore(); + + Date creationTime = underTest.getCreationTime(); + Calendar creationTimeCalendar = underTest.getCreationTimeCalendar(); + + MockSystemTimeSource afterTimeSource = new MockSystemTimeSource(before.plusMinutes(1L).toInstant(ZoneOffset.UTC).toEpochMilli()); + SystemTime.setTimeSource(afterTimeSource); + + underTest.reset(); + + Date creationTimeAfterReset = underTest.getCreationTime(); + Calendar creationTimeCalendarAfterReset = underTest.getCreationTimeCalendar(); + + assertNotSame(creationTime, creationTimeAfterReset); + assertNotSame(creationTimeCalendar, creationTimeCalendarAfterReset); + + assertNotEquals(creationTime, creationTimeAfterReset); + assertNotEquals(creationTimeCalendar, creationTimeCalendarAfterReset); + } finally { + SystemTime.setTimeSource(null); + } + } +}