Index: core/src/main/java/quickfix/FileStore.java =================================================================== --- core/src/main/java/quickfix/FileStore.java (revision 917) +++ core/src/main/java/quickfix/FileStore.java (working copy) @@ -424,4 +424,8 @@ public void reset() throws IOException { initialize(true); } + + public void close() throws IOException { + closeFiles(); + } } \ No newline at end of file Index: core/src/main/java/quickfix/JdbcStore.java =================================================================== --- core/src/main/java/quickfix/JdbcStore.java (revision 917) +++ core/src/main/java/quickfix/JdbcStore.java (working copy) @@ -301,4 +301,8 @@ DataSource getDataSource() { return dataSource; } + + public void close() throws IOException { + // do nothing, resources already closed + } } \ No newline at end of file Index: core/src/main/java/quickfix/MemoryStore.java =================================================================== --- core/src/main/java/quickfix/MemoryStore.java (revision 917) +++ core/src/main/java/quickfix/MemoryStore.java (working copy) @@ -121,4 +121,7 @@ } + public void close() throws IOException { + // do nothing + } } \ No newline at end of file Index: core/src/main/java/quickfix/MessageStore.java =================================================================== --- core/src/main/java/quickfix/MessageStore.java (revision 917) +++ core/src/main/java/quickfix/MessageStore.java (working copy) @@ -98,4 +98,9 @@ * or throw an exception. */ void refresh() throws IOException; + + /** + * Closes the message store, cleaning up resources used + */ + void close() throws IOException; } \ No newline at end of file Index: core/src/main/java/quickfix/mina/SessionConnector.java =================================================================== --- core/src/main/java/quickfix/mina/SessionConnector.java (revision 917) +++ core/src/main/java/quickfix/mina/SessionConnector.java (working copy) @@ -172,6 +172,16 @@ if (!forceDisconnect) { waitForLogout(); } + + sessionItr = sessions.values().iterator(); + while (sessionItr.hasNext()) { + quickfix.Session session = sessionItr.next(); + try { + session.close(); + } catch (Throwable e) { + logError(session.getSessionID(), null, "Error during close", e); + } + } } protected void waitForLogout() { Index: core/src/main/java/quickfix/Session.java =================================================================== --- core/src/main/java/quickfix/Session.java (revision 917) +++ core/src/main/java/quickfix/Session.java (working copy) @@ -2059,4 +2059,8 @@ public ApplVerID getTargetDefaultApplicationVersionID() { return targetDefaultApplVerID.get(); } + + public void close() throws IOException { + state.close(); + } } \ No newline at end of file Index: core/src/main/java/quickfix/SessionState.java =================================================================== --- core/src/main/java/quickfix/SessionState.java (revision 917) +++ core/src/main/java/quickfix/SessionState.java (working copy) @@ -435,6 +435,10 @@ public Object getLock() { return lock; } + + public void close() throws IOException { + messageStore.close(); + } private final static class NullLog implements Log { public void onOutgoing(String message) { Index: core/src/main/java/quickfix/SleepycatStore.java =================================================================== --- core/src/main/java/quickfix/SleepycatStore.java (revision 917) +++ core/src/main/java/quickfix/SleepycatStore.java (working copy) @@ -194,7 +194,7 @@ } } - void close() throws IOException { + public void close() throws IOException { try { messageDatabase.close(); sequenceDatabase.close();