From 91782d5f15c9c12ef3b6285144eceafef61cbc33 Mon Sep 17 00:00:00 2001 From: Abhishek Raha Date: Fri, 3 Oct 2025 16:22:36 +0530 Subject: [PATCH 1/3] Minor changes to the quickfixj-core module to reduce unnecessary --- .../main/java/quickfix/CachedFileStore.java | 34 +--- .../java/quickfix/CachedFileStoreFactory.java | 2 +- .../java/quickfix/DefaultSessionFactory.java | 45 ++--- .../src/main/java/quickfix/FileLog.java | 17 +- .../src/main/java/quickfix/FileStore.java | 25 +-- .../main/java/quickfix/MessageCracker.java | 6 +- .../main/java/quickfix/SleepycatStore.java | 35 ++-- .../java/quickfix/mina/SessionConnector.java | 42 ++-- .../SingleThreadedEventHandlingStrategy.java | 184 +++++++++--------- .../mina/acceptor/AbstractSocketAcceptor.java | 45 ++--- .../initiator/AbstractSocketInitiator.java | 61 ++---- .../quickfix/mina/ssl/InitiatorSslFilter.java | 4 +- 12 files changed, 188 insertions(+), 312 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java index 8464e60d1..73167d381 100644 --- a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java +++ b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java @@ -24,26 +24,8 @@ import org.slf4j.LoggerFactory; import quickfix.field.converter.UtcTimestampConverter; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.RandomAccessFile; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; +import java.io.*; +import java.util.*; /** * File store implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN COMPATIBILITY WITH THE QUICKFIX JNI. IT SHOULD ONLY @@ -100,9 +82,7 @@ public class CachedFileStore implements MessageStore { sessionFileName = prefix + "session"; final File directory = new File(msgFileName).getParentFile(); - if (!directory.exists()) { - directory.mkdirs(); - } + directory.mkdirs(); initialize(false); } @@ -176,7 +156,7 @@ private void initializeSequenceNumbers() throws IOException { final String s = sequenceNumberFile.readUTF(); final int offset = s.indexOf(':'); if (offset < 0) { - throw new IOException("Invalid sequenceNumbderFile '" + seqNumFileName + throw new IOException("Invalid sequenceNumberFile '" + seqNumFileName + "' character ':' is missing"); } cache.setNextSenderMsgSeqNum(Integer.parseInt(s.substring(0, offset))); @@ -349,7 +329,7 @@ public boolean set(int sequence, String message) throws IOException { final long offset = messageFileWriter.getFilePointer(); final byte[] messageBytes = message.getBytes(CharsetSupport.getCharset()); final int size = messageBytes.length; - messageIndex.put((long) sequence, new long[] { offset, size }); + messageIndex.put((long) sequence, new long[]{offset, size}); headerDataOutputStream.writeInt(sequence); headerDataOutputStream.writeLong(offset); headerDataOutputStream.writeInt(size); @@ -488,7 +468,7 @@ private long[] seekMessageIndex(final long index) { final long offset = headerDataInputStream.readLong(); final int size = headerDataInputStream.readInt(); if (index == sequenceNumber) { - return new long[] { offset, size }; + return new long[]{offset, size}; } } } catch (final IOException e) { @@ -519,7 +499,7 @@ private List seekMessageIndex(final long startSequence, final long endSe final long offset = headerDataInputStream.readLong(); final int size = headerDataInputStream.readInt(); if (sequenceNumber >= startSequence && sequenceNumber <= endSequence) { - indexPerSequenceNumber.put(sequenceNumber, new long[] { offset, size }); + indexPerSequenceNumber.put(sequenceNumber, new long[]{offset, size}); } } } catch (final IOException e) { diff --git a/quickfixj-core/src/main/java/quickfix/CachedFileStoreFactory.java b/quickfixj-core/src/main/java/quickfix/CachedFileStoreFactory.java index e6aa8b2ec..b6a9af022 100644 --- a/quickfixj-core/src/main/java/quickfix/CachedFileStoreFactory.java +++ b/quickfixj-core/src/main/java/quickfix/CachedFileStoreFactory.java @@ -21,7 +21,7 @@ /** * Creates a message store that stores messages in a file. Compatibility note: The file formats are not compatible with - * QF C++/JNI. If you upgrading from the QuickFIX JNI, you must delete your old session state files.) + * QF C++/JNI. If you're upgrading from the QuickFIX JNI, you must delete your old session state files.) */ public class CachedFileStoreFactory extends FileStoreFactory { diff --git a/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java b/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java index f131f5d4b..7d826b118 100644 --- a/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java +++ b/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java @@ -27,12 +27,7 @@ import quickfix.field.DefaultApplVerID; import java.net.InetAddress; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.List; -import java.util.Properties; -import java.util.Set; +import java.util.*; /** * Factory for creating sessions. Used by the communications code (acceptors, @@ -56,7 +51,7 @@ public class DefaultSessionFactory implements SessionFactory { private final SessionScheduleFactory sessionScheduleFactory; public DefaultSessionFactory(Application application, MessageStoreFactory messageStoreFactory, - LogFactory logFactory) { + LogFactory logFactory) { this.application = application; this.messageStoreFactory = messageStoreFactory; this.messageQueueFactory = new InMemoryMessageQueueFactory(); @@ -66,7 +61,7 @@ public DefaultSessionFactory(Application application, MessageStoreFactory messag } public DefaultSessionFactory(Application application, MessageStoreFactory messageStoreFactory, - LogFactory logFactory, MessageFactory messageFactory) { + LogFactory logFactory, MessageFactory messageFactory) { this.application = application; this.messageStoreFactory = messageStoreFactory; this.messageQueueFactory = new InMemoryMessageQueueFactory(); @@ -274,7 +269,7 @@ public Session create(SessionID sessionID, SessionSettings settings) throws Conf } private void processPreFixtDataDictionary(SessionID sessionID, SessionSettings settings, - DefaultDataDictionaryProvider dataDictionaryProvider) throws ConfigError, + DefaultDataDictionaryProvider dataDictionaryProvider) throws ConfigError, FieldConvertError { final DataDictionary dataDictionary = createDataDictionary(sessionID, settings, Session.SETTING_DATA_DICTIONARY, sessionID.getBeginString()); @@ -284,7 +279,7 @@ private void processPreFixtDataDictionary(SessionID sessionID, SessionSettings s } private DataDictionary createDataDictionary(SessionID sessionID, SessionSettings settings, - String settingsKey, String beginString) throws ConfigError, FieldConvertError { + String settingsKey, String beginString) throws ConfigError, FieldConvertError { final String path = getDictionaryPath(sessionID, settings, settingsKey, beginString); return getDataDictionary(path); } @@ -293,22 +288,22 @@ private ValidationSettings createValidationSettings(SessionID sessionID, Session ValidationSettings validationSettings = new ValidationSettings(); validationSettings.setCheckFieldsOutOfOrder(settings.getBoolOrDefault(sessionID, - Session.SETTING_VALIDATE_FIELDS_OUT_OF_ORDER, validationSettings.isCheckFieldsOutOfOrder())); + Session.SETTING_VALIDATE_FIELDS_OUT_OF_ORDER, validationSettings.isCheckFieldsOutOfOrder())); validationSettings.setCheckFieldsHaveValues(settings.getBoolOrDefault(sessionID, - Session.SETTING_VALIDATE_FIELDS_HAVE_VALUES, validationSettings.isCheckFieldsHaveValues())); + Session.SETTING_VALIDATE_FIELDS_HAVE_VALUES, validationSettings.isCheckFieldsHaveValues())); validationSettings.setCheckUnorderedGroupFields(settings.getBoolOrDefault(sessionID, - Session.SETTING_VALIDATE_UNORDERED_GROUP_FIELDS, validationSettings.isCheckUnorderedGroupFields())); + Session.SETTING_VALIDATE_UNORDERED_GROUP_FIELDS, validationSettings.isCheckUnorderedGroupFields())); validationSettings.setCheckUserDefinedFields(settings.getBoolOrDefault(sessionID, - Session.SETTING_VALIDATE_USER_DEFINED_FIELDS, validationSettings.isCheckUserDefinedFields())); + Session.SETTING_VALIDATE_USER_DEFINED_FIELDS, validationSettings.isCheckUserDefinedFields())); validationSettings.setAllowUnknownMessageFields(settings.getBoolOrDefault(sessionID, - Session.SETTING_ALLOW_UNKNOWN_MSG_FIELDS, validationSettings.isAllowUnknownMessageFields())); + Session.SETTING_ALLOW_UNKNOWN_MSG_FIELDS, validationSettings.isAllowUnknownMessageFields())); validationSettings.setFirstFieldInGroupIsDelimiter(settings.getBoolOrDefault(sessionID, - Session.SETTING_FIRST_FIELD_IN_GROUP_IS_DELIMITER, validationSettings.isFirstFieldInGroupIsDelimiter())); + Session.SETTING_FIRST_FIELD_IN_GROUP_IS_DELIMITER, validationSettings.isFirstFieldInGroupIsDelimiter())); validateValidationSettings(validationSettings); @@ -323,7 +318,7 @@ private void validateValidationSettings(ValidationSettings validationSettings) { } private void processFixtDataDictionaries(SessionID sessionID, SessionSettings settings, - DefaultDataDictionaryProvider dataDictionaryProvider) throws ConfigError, + DefaultDataDictionaryProvider dataDictionaryProvider) throws ConfigError, FieldConvertError { dataDictionaryProvider.addTransportDictionary( sessionID.getBeginString(), @@ -373,7 +368,7 @@ private boolean isApplVerIdEnum(String value) { } private String getDictionaryPath(SessionID sessionID, SessionSettings settings, - String settingsKey, String beginString) throws ConfigError, FieldConvertError { + String settingsKey, String beginString) throws ConfigError, FieldConvertError { String path; if (settings.isSetting(sessionID, settingsKey)) { path = settings.getString(sessionID, settingsKey); @@ -410,7 +405,7 @@ private int[] getLogonIntervalsInSeconds(SessionSettings settings, SessionID ses throw new ConfigError(e); } } - return new int[] { 5 }; // default value + return new int[]{5}; // default value } private Set getInetAddresses(SessionSettings settings, SessionID sessionID) @@ -428,26 +423,26 @@ private Set getInetAddresses(SessionSettings settings, SessionID se } private boolean getSetting(SessionSettings settings, SessionID sessionID, String key, - boolean defaultValue) throws ConfigError, FieldConvertError { + boolean defaultValue) throws ConfigError, FieldConvertError { return settings.isSetting(sessionID, key) ? settings.getBool(sessionID, key) : defaultValue; } private int getSetting(SessionSettings settings, SessionID sessionID, String key, - int defaultValue) throws ConfigError, FieldConvertError { + int defaultValue) throws ConfigError, FieldConvertError { return settings.isSetting(sessionID, key) ? (int) settings.getLong(sessionID, key) : defaultValue; } private double getSetting(SessionSettings settings, SessionID sessionID, String key, - double defaultValue) throws ConfigError, FieldConvertError { + double defaultValue) throws ConfigError, FieldConvertError { return settings.isSetting(sessionID, key) ? Double.parseDouble(settings.getString(sessionID, key)) : defaultValue; } private UtcTimestampPrecision getTimestampPrecision(SessionSettings settings, SessionID sessionID, - UtcTimestampPrecision defaultValue) throws ConfigError, FieldConvertError { + UtcTimestampPrecision defaultValue) throws ConfigError, FieldConvertError { if (settings.isSetting(sessionID, Session.SETTING_TIMESTAMP_PRECISION)) { String string = settings.getString(sessionID, Session.SETTING_TIMESTAMP_PRECISION); try { @@ -462,13 +457,13 @@ private UtcTimestampPrecision getTimestampPrecision(SessionSettings settings, Se private List getLogonTags(SessionSettings settings, SessionID sessionID) throws ConfigError, FieldConvertError { List logonTags = new ArrayList<>(); - for (int index = 0;; index++) { + for (int index = 0; ; index++) { final String logonTagSetting = Session.SETTING_LOGON_TAG + (index == 0 ? "" : NumbersCache.get(index)); if (settings.isSetting(sessionID, logonTagSetting)) { String tag = settings.getString(sessionID, logonTagSetting); String[] split = tag.split("=", 2); - StringField stringField = new StringField(Integer.valueOf(split[0]), split[1]); + StringField stringField = new StringField(Integer.parseInt(split[0]), split[1]); logonTags.add(stringField); } else { break; diff --git a/quickfixj-core/src/main/java/quickfix/FileLog.java b/quickfixj-core/src/main/java/quickfix/FileLog.java index ecd84fe5a..396069099 100644 --- a/quickfixj-core/src/main/java/quickfix/FileLog.java +++ b/quickfixj-core/src/main/java/quickfix/FileLog.java @@ -19,17 +19,11 @@ package quickfix; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; - import org.quickfixj.CharsetSupport; - import quickfix.field.converter.UtcTimestampConverter; +import java.io.*; + /** * File log implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN COMPATIBILITY * WITH THE QUICKFIX JNI. IT SHOULD ONLY BE CREATED USING A FACTORY. @@ -69,9 +63,8 @@ public class FileLog extends AbstractLog { eventFileName = prefix + "event.log"; File directory = new File(messagesFileName).getParentFile(); - if (!directory.exists()) { - directory.mkdirs(); - } + directory.mkdirs(); + this.includeMillis = includeMillis; this.includeTimestampForMessages = includeTimestampForMessages; @@ -94,7 +87,7 @@ protected void logOutgoing(String message) { private void writeMessage(FileOutputStream stream, Object lock, String message, boolean forceTimestamp) { try { - synchronized(lock) { + synchronized (lock) { if (forceTimestamp || includeTimestampForMessages) { writeTimeStamp(stream); } diff --git a/quickfixj-core/src/main/java/quickfix/FileStore.java b/quickfixj-core/src/main/java/quickfix/FileStore.java index 4cf6a5127..37e93afd9 100644 --- a/quickfixj-core/src/main/java/quickfix/FileStore.java +++ b/quickfixj-core/src/main/java/quickfix/FileStore.java @@ -22,23 +22,8 @@ import org.quickfixj.CharsetSupport; import quickfix.field.converter.UtcTimestampConverter; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.Closeable; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; -import java.util.TreeMap; +import java.io.*; +import java.util.*; /** * File store implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN @@ -88,9 +73,7 @@ public class FileStore implements MessageStore, Closeable { sessionFileName = prefix + "session"; final File directory = new File(msgFileName).getParentFile(); - if (!directory.exists()) { - directory.mkdirs(); - } + directory.mkdirs(); initialize(false); } @@ -203,7 +186,7 @@ private void updateMessageIndex(long sequenceNum, long offset, int size) { messageIndex.pollFirstEntry(); } - messageIndex.put(sequenceNum, new long[] { offset, size }); + messageIndex.put(sequenceNum, new long[]{offset, size}); } /** diff --git a/quickfixj-core/src/main/java/quickfix/MessageCracker.java b/quickfixj-core/src/main/java/quickfix/MessageCracker.java index 28b65dac1..685a4f7fe 100644 --- a/quickfixj-core/src/main/java/quickfix/MessageCracker.java +++ b/quickfixj-core/src/main/java/quickfix/MessageCracker.java @@ -41,7 +41,7 @@ public class MessageCracker { public @interface Handler { } - public class RedundantHandlerException extends RuntimeException { + public static class RedundantHandlerException extends RuntimeException { private final Class messageClass; private final Method originalMethod; private final Method redundantMethod; @@ -55,7 +55,7 @@ public RedundantHandlerException(Class messageClass, Method originalMethod, @Override public String toString() { - return "Duplicate handler method for " + messageClass + ", orginal method is " + return "Duplicate handler method for " + messageClass + ", original method is " + originalMethod + ", redundant method is " + redundantMethod; } } @@ -97,7 +97,7 @@ private boolean matchesConventionOrAnnotation(Method method) { return method.getName().equals("onMessage") || method.isAnnotationPresent(Handler.class); } - private class Invoker { + private static class Invoker { private final Object target; private final Method method; diff --git a/quickfixj-core/src/main/java/quickfix/SleepycatStore.java b/quickfixj-core/src/main/java/quickfix/SleepycatStore.java index 3fddd79f5..ce307d7b9 100644 --- a/quickfixj-core/src/main/java/quickfix/SleepycatStore.java +++ b/quickfixj-core/src/main/java/quickfix/SleepycatStore.java @@ -19,30 +19,21 @@ package quickfix; +import com.sleepycat.bind.EntryBinding; +import com.sleepycat.bind.tuple.TupleBinding; +import com.sleepycat.bind.tuple.TupleInput; +import com.sleepycat.bind.tuple.TupleOutput; +import com.sleepycat.je.*; +import org.quickfixj.CharsetSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Collection; import java.util.Date; -import org.quickfixj.CharsetSupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.sleepycat.bind.EntryBinding; -import com.sleepycat.bind.tuple.TupleBinding; -import com.sleepycat.bind.tuple.TupleInput; -import com.sleepycat.bind.tuple.TupleOutput; -import com.sleepycat.je.Cursor; -import com.sleepycat.je.Database; -import com.sleepycat.je.DatabaseConfig; -import com.sleepycat.je.DatabaseEntry; -import com.sleepycat.je.DatabaseException; -import com.sleepycat.je.Environment; -import com.sleepycat.je.EnvironmentConfig; -import com.sleepycat.je.LockMode; -import com.sleepycat.je.OperationStatus; - /** * Sleepycat message and session state storage. This could be creating * using the Sleepycat store factory. @@ -211,7 +202,7 @@ public synchronized void get(int startSequence, int endSequence, Collection sequenceBinding = TupleBinding.getPrimitiveBinding(Integer.class); // Must start at start-1 because db will look for next record larger sequenceBinding.objectToEntry(startSequence - 1, sequenceKey); @@ -223,7 +214,7 @@ public synchronized void get(int startSequence, int endSequence, Collection sequenceBinding = TupleBinding.getPrimitiveBinding(Integer.class); sequenceBinding.objectToEntry(sequence, sequenceKey); DatabaseEntry messageBytes = new DatabaseEntry(message.getBytes(CharsetSupport.getCharset())); messageDatabase.put(null, sequenceKey, messageBytes); diff --git a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java index 675387a6e..670b71e94 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java +++ b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java @@ -20,39 +20,19 @@ package quickfix.mina; import org.apache.mina.core.filterchain.IoFilterChainBuilder; +import org.apache.mina.core.future.CloseFuture; +import org.apache.mina.core.service.IoService; import org.apache.mina.core.session.IoSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import quickfix.ConfigError; -import quickfix.Connector; -import quickfix.ExecutorFactory; -import quickfix.FieldConvertError; -import quickfix.Session; -import quickfix.SessionFactory; -import quickfix.SessionID; -import quickfix.SessionSettings; +import quickfix.*; import quickfix.field.converter.IntConverter; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.ConcurrentHashMap; -import org.apache.mina.core.future.CloseFuture; -import org.apache.mina.core.service.IoService; +import java.util.*; +import java.util.concurrent.*; /** * An abstract base class for acceptors and initiators. Provides support for common functionality and also serves as an @@ -98,7 +78,7 @@ public SessionConnector(SessionSettings settings, SessionFactory sessionFactory) * If using external Executors, this method should be called immediately after the constructor. Once set, the * Executors cannot be changed. *

- * + * * @param executorFactory See {@link ExecutorFactory} for detailed requirements. */ public void setExecutorFactory(ExecutorFactory executorFactory) { @@ -296,7 +276,7 @@ protected void waitForLogout() { } protected void logError(SessionID sessionID, IoSession protocolSession, String message, Throwable t) { - log.error(message + getLogSuffix(sessionID, protocolSession), t); + log.error("{}{}", message, getLogSuffix(sessionID, protocolSession), t); } private String getLogSuffix(SessionID sessionID, IoSession protocolSession) { @@ -329,7 +309,7 @@ protected void stopSessionTimer() { // visible for testing boolean checkSessionTimerRunning() { - if ( sessionTimerFuture != null ) { + if (sessionTimerFuture != null) { return !sessionTimerFuture.isDone(); } return false; @@ -433,13 +413,13 @@ public void setIoFilterChainBuilder(IoFilterChainBuilder ioFilterChainBuilder) { protected IoFilterChainBuilder getIoFilterChainBuilder() { return ioFilterChainBuilder; } - + /** * Closes all managed sessions of an Initiator/Acceptor. * - * @param ioService Acceptor or Initiator implementation + * @param ioService Acceptor or Initiator implementation * @param awaitTermination whether to wait for underlying ExecutorService to terminate - * @param logger used for logging WARNING when IoSession could not be closed + * @param logger used for logging WARNING when IoSession could not be closed */ public static void closeManagedSessionsAndDispose(IoService ioService, boolean awaitTermination, Logger logger) { Map managedSessions = ioService.getManagedSessions(); diff --git a/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java b/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java index 4d34d5ca9..8ddd36a29 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java +++ b/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java @@ -24,11 +24,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.Executor; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import static quickfix.mina.QueueTrackers.newDefaultQueueTracker; import static quickfix.mina.QueueTrackers.newMultiSessionWatermarkTracker; @@ -215,95 +211,95 @@ public int getQueueSize(SessionID sessionID) { return getQueueSize(); } - /** - * A stand-in for the Thread class that delegates to an Executor. - * Implements all the API required by pre-existing QFJ code. - */ - static final class ThreadAdapter { - - private final Executor executor; - private final RunnableWrapper wrapper; - - ThreadAdapter(Runnable command, String name, Executor executor) { - wrapper = new RunnableWrapper(command, name); - this.executor = executor != null ? executor : new DedicatedThreadExecutor(name); - } - - public void join() throws InterruptedException { - wrapper.join(); - } - - public void setDaemon(boolean b) { - /* No-Op. Already set for DedicatedThreadExecutor. Not relevant for externally supplied Executors. */ - } - - public boolean isAlive() { - return wrapper.isAlive(); - } - - public void start() { - executor.execute(wrapper); - } - - /** - * Provides the Thread::join and Thread::isAlive semantics on the nested Runnable. - */ - static final class RunnableWrapper implements Runnable { - - private final CountDownLatch latch = new CountDownLatch(1); - private final Runnable command; - private final String name; - - public RunnableWrapper(Runnable command, String name) { - this.command = command; - this.name = name; - } - - @Override - public void run() { - Thread currentThread = Thread.currentThread(); - String threadName = currentThread.getName(); - try { - if (!name.equals(threadName)) { - currentThread.setName(name + " (" + threadName + ")"); - } - command.run(); - } finally { - latch.countDown(); - currentThread.setName(threadName); - } - } + /** + * A stand-in for the Thread class that delegates to an Executor. + * Implements all the API required by pre-existing QFJ code. + */ + static final class ThreadAdapter { + + private final Executor executor; + private final RunnableWrapper wrapper; + + ThreadAdapter(Runnable command, String name, Executor executor) { + wrapper = new RunnableWrapper(command, name); + this.executor = executor != null ? executor : new DedicatedThreadExecutor(name); + } + + public void join() throws InterruptedException { + wrapper.join(); + } + + public void setDaemon(boolean b) { + /* No-Op. Already set for DedicatedThreadExecutor. Not relevant for externally supplied Executors. */ + } + + public boolean isAlive() { + return wrapper.isAlive(); + } + + public void start() { + executor.execute(wrapper); + } + + /** + * Provides the Thread::join and Thread::isAlive semantics on the nested Runnable. + */ + static final class RunnableWrapper implements Runnable { + + private final CountDownLatch latch = new CountDownLatch(1); + private final Runnable command; + private final String name; + + public RunnableWrapper(Runnable command, String name) { + this.command = command; + this.name = name; + } - public void join() throws InterruptedException { - latch.await(); - } - - public boolean isAlive() { - return latch.getCount() > 0; - } - } - - /** - * An Executor that uses its own dedicated Thread. - * Provides equivalent behavior to the prior non-Executor approach. - */ - static final class DedicatedThreadExecutor implements Executor { - - private final String name; - private Thread thread; - - DedicatedThreadExecutor(String name) { - this.name = name; - } - - @Override - public void execute(Runnable command) { - thread = new Thread(command, name); - thread.setDaemon(true); - thread.start(); - } - } - - } + @Override + public void run() { + Thread currentThread = Thread.currentThread(); + String threadName = currentThread.getName(); + try { + if (!name.equals(threadName)) { + currentThread.setName(name + " (" + threadName + ")"); + } + command.run(); + } finally { + latch.countDown(); + currentThread.setName(threadName); + } + } + + public void join() throws InterruptedException { + latch.await(); + } + + public boolean isAlive() { + return latch.getCount() > 0; + } + } + + /** + * An Executor that uses its own dedicated Thread. + * Provides equivalent behavior to the prior non-Executor approach. + */ + static final class DedicatedThreadExecutor implements Executor { + + private final String name; + private Thread thread; + + DedicatedThreadExecutor(String name) { + this.name = name; + } + + @Override + public void execute(Runnable command) { + thread = new Thread(command, name); + thread.setDaemon(true); + thread.start(); + } + } + + } } diff --git a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java index f9f418b5d..3939670af 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java +++ b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java @@ -24,26 +24,8 @@ import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.ssl.SslFilter; -import quickfix.Acceptor; -import quickfix.Application; -import quickfix.ConfigError; -import quickfix.DefaultSessionFactory; -import quickfix.FieldConvertError; -import quickfix.LogFactory; -import quickfix.LogUtil; -import quickfix.MessageFactory; -import quickfix.MessageStoreFactory; -import quickfix.RuntimeError; -import quickfix.ScreenLogFactory; -import quickfix.Session; -import quickfix.SessionFactory; -import quickfix.SessionID; -import quickfix.SessionSettings; -import quickfix.mina.CompositeIoFilterChainBuilder; -import quickfix.mina.EventHandlingStrategy; -import quickfix.mina.NetworkingOptions; -import quickfix.mina.ProtocolFactory; -import quickfix.mina.SessionConnector; +import quickfix.*; +import quickfix.mina.*; import quickfix.mina.message.FIXProtocolCodecFactory; import quickfix.mina.ssl.SSLConfig; import quickfix.mina.ssl.SSLContextFactory; @@ -53,11 +35,7 @@ import java.io.IOException; import java.net.SocketAddress; import java.security.GeneralSecurityException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -81,13 +59,15 @@ protected AbstractSocketAcceptor(SessionSettings settings, SessionFactory sessio protected AbstractSocketAcceptor(Application application, MessageStoreFactory messageStoreFactory, SessionSettings settings, MessageFactory messageFactory) throws ConfigError { + MessageStoreFactory messageStoreFactory, SessionSettings settings, + MessageFactory messageFactory) throws ConfigError { this(application, messageStoreFactory, settings, new ScreenLogFactory(settings), messageFactory); } protected AbstractSocketAcceptor(Application application, - MessageStoreFactory messageStoreFactory, SessionSettings settings, - LogFactory logFactory, MessageFactory messageFactory) throws ConfigError { + MessageStoreFactory messageStoreFactory, SessionSettings settings, + LogFactory logFactory, MessageFactory messageFactory) throws ConfigError { this(settings, new DefaultSessionFactory(application, messageStoreFactory, logFactory, messageFactory)); } @@ -122,7 +102,7 @@ protected synchronized void startAcceptingConnections() throws ConfigError { if (continueInitOnError) { log.warn("error during session initialization for session(s) {}, continuing...", socketDescriptor.getAcceptedSessions().keySet(), e); } else { - log.error("Cannot start acceptor session for {}, error: {}", address, e); + log.error("Cannot start acceptor session for {}, error: ", address, e); throw new RuntimeError(e); } } @@ -130,7 +110,7 @@ protected synchronized void startAcceptingConnections() throws ConfigError { } private void installSSL(AcceptorSocketDescriptor descriptor, - CompositeIoFilterChainBuilder ioFilterChainBuilder) throws GeneralSecurityException { + CompositeIoFilterChainBuilder ioFilterChainBuilder) throws GeneralSecurityException { log.info("Installing SSL filter for {}", descriptor.getAddress()); SSLConfig sslConfig = descriptor.getSslConfig(); SSLContext sslContext = SSLContextFactory.getInstance(sslConfig); @@ -214,7 +194,7 @@ && getSettings().getBool(sessionID, SSLSupport.SETTING_USE_SSL)) { descriptor.acceptSession(session); allSessions.put(sessionID, session); } - + if (acceptTransportType != ProtocolFactory.SOCKET && getSettings().getBoolOrDefault(sessionID, SSLSupport.SETTING_USE_SSL, false)) { LogUtil.logWarning(sessionID, "SSL is only supported for transport type SOCKET and will not be enabled for transport type=" + acceptTransportType); @@ -227,7 +207,7 @@ private boolean equals(Object object1, Object object2) { private void createSessions(SessionSettings settings, boolean continueInitOnError) throws ConfigError { Map allSessions = new HashMap<>(); - for (Iterator i = settings.sectionIterator(); i.hasNext();) { + for (Iterator i = settings.sectionIterator(); i.hasNext(); ) { SessionID sessionID = i.next(); try { String connectionType = null; @@ -345,9 +325,10 @@ public int getQueueSize() { return ehs == null ? 0 : ehs.getQueueSize(); } - protected abstract EventHandlingStrategy getEventHandlingStrategy() ; + protected abstract EventHandlingStrategy getEventHandlingStrategy(); private class DefaultAcceptorSessionProvider implements AcceptorSessionProvider { + private static class DefaultAcceptorSessionProvider implements AcceptorSessionProvider { private final Map acceptorSessions; diff --git a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java index e276d4b8b..aac309970 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java +++ b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java @@ -23,19 +23,7 @@ import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import quickfix.Application; -import quickfix.ConfigError; -import quickfix.DefaultSessionFactory; -import quickfix.FieldConvertError; -import quickfix.Initiator; -import quickfix.LogFactory; -import quickfix.LogUtil; -import quickfix.MessageFactory; -import quickfix.MessageStoreFactory; -import quickfix.Session; -import quickfix.SessionFactory; -import quickfix.SessionID; -import quickfix.SessionSettings; +import quickfix.*; import quickfix.field.converter.BooleanConverter; import quickfix.mina.EventHandlingStrategy; import quickfix.mina.NetworkingOptions; @@ -45,17 +33,8 @@ import quickfix.mina.ssl.SSLSupport; import java.net.SocketAddress; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.*; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; /** @@ -69,8 +48,8 @@ public abstract class AbstractSocketInitiator extends SessionConnector implement public static final String QFJ_RECONNECT_THREAD_PREFIX = "QFJ Reconnect Thread-"; protected AbstractSocketInitiator(Application application, - MessageStoreFactory messageStoreFactory, SessionSettings settings, - LogFactory logFactory, MessageFactory messageFactory) throws ConfigError { + MessageStoreFactory messageStoreFactory, SessionSettings settings, + LogFactory logFactory, MessageFactory messageFactory) throws ConfigError { this(settings, new DefaultSessionFactory(application, messageStoreFactory, logFactory, messageFactory)); } @@ -81,8 +60,8 @@ protected AbstractSocketInitiator(SessionSettings settings, SessionFactory sessi } protected AbstractSocketInitiator(Application application, - MessageStoreFactory messageStoreFactory, SessionSettings settings, - LogFactory logFactory, MessageFactory messageFactory, int numReconnectThreads) throws ConfigError { + MessageStoreFactory messageStoreFactory, SessionSettings settings, + LogFactory logFactory, MessageFactory messageFactory, int numReconnectThreads) throws ConfigError { this(settings, new DefaultSessionFactory(application, messageStoreFactory, logFactory, messageFactory), numReconnectThreads); } @@ -114,7 +93,7 @@ protected void createSessionInitiators() } private void createInitiator(final Session session, final boolean continueInitOnError) throws ConfigError, FieldConvertError { - + SessionSettings settings = getSettings(); final SessionID sessionID = session.getSessionID(); final int[] reconnectingIntervals = getReconnectIntervalInSeconds(sessionID); @@ -216,7 +195,7 @@ private SocketAddress getLocalAddress(SessionSettings settings, final Session se private void createSessions(boolean continueInitOnError) throws ConfigError, FieldConvertError { final SessionSettings settings = getSettings(); final Map initiatorSessions = new HashMap<>(); - for (final Iterator i = settings.sectionIterator(); i.hasNext();) { + for (final Iterator i = settings.sectionIterator(); i.hasNext(); ) { final SessionID sessionID = i.next(); if (isInitiatorSession(sessionID)) { try { @@ -236,7 +215,7 @@ private void createSessions(boolean continueInitOnError) throws ConfigError, Fie } setSessions(initiatorSessions); } - + public void createDynamicSession(SessionID sessionID) throws ConfigError { try { @@ -263,20 +242,18 @@ private int[] getReconnectIntervalInSeconds(SessionID sessionID) throws ConfigEr throw new ConfigError(e); } } - return new int[] { 30 }; + return new int[]{30}; } private SocketAddress[] getSocketAddresses(SessionID sessionID) throws ConfigError { final SessionSettings settings = getSettings(); final ArrayList addresses = new ArrayList<>(); - for (int index = 0;; index++) { + for (int index = 0; ; index++) { try { - final String protocolKey = Initiator.SETTING_SOCKET_CONNECT_PROTOCOL - + (index == 0 ? "" : Integer.toString(index)); - final String hostKey = Initiator.SETTING_SOCKET_CONNECT_HOST - + (index == 0 ? "" : Integer.toString(index)); - final String portKey = Initiator.SETTING_SOCKET_CONNECT_PORT - + (index == 0 ? "" : Integer.toString(index)); + final String keySuffix = index == 0 ? "" : Integer.toString(index); + final String protocolKey = Initiator.SETTING_SOCKET_CONNECT_PROTOCOL + keySuffix; + final String hostKey = Initiator.SETTING_SOCKET_CONNECT_HOST + keySuffix; + final String portKey = Initiator.SETTING_SOCKET_CONNECT_PORT + keySuffix; int transportType = ProtocolFactory.SOCKET; if (settings.isSetting(sessionID, protocolKey)) { try { @@ -325,7 +302,7 @@ protected void startInitiators() { } protected void stopInitiators() { - for (Iterator iterator = initiators.iterator(); iterator.hasNext();) { + for (Iterator iterator = initiators.iterator(); iterator.hasNext(); ) { iterator.next().stop(); iterator.remove(); } @@ -342,8 +319,8 @@ public int getQueueSize() { } protected abstract EventHandlingStrategy getEventHandlingStrategy(); - - + + private static class QFScheduledReconnectThreadFactory implements ThreadFactory { private static final AtomicInteger COUNTER = new AtomicInteger(1); diff --git a/quickfixj-core/src/main/java/quickfix/mina/ssl/InitiatorSslFilter.java b/quickfixj-core/src/main/java/quickfix/mina/ssl/InitiatorSslFilter.java index 7c4e5b438..d7bf56a7c 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/ssl/InitiatorSslFilter.java +++ b/quickfixj-core/src/main/java/quickfix/mina/ssl/InitiatorSslFilter.java @@ -8,7 +8,7 @@ import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLParameters; import java.net.InetSocketAddress; -import java.util.Arrays; +import java.util.Collections; public final class InitiatorSslFilter extends SslFilter { @@ -53,7 +53,7 @@ protected SSLEngine createEngine(IoSession session, InetSocketAddress addr) { if (sniHostName != null) { SSLParameters sslParameters = sslEngine.getSSLParameters(); - sslParameters.setServerNames(Arrays.asList(new SNIHostName(sniHostName))); + sslParameters.setServerNames(Collections.singletonList(new SNIHostName(sniHostName))); sslEngine.setSSLParameters(sslParameters); } From 3aa2197e6fcc6d18a9b9c24a53280026ec89ebe3 Mon Sep 17 00:00:00 2001 From: Abhishek Raha Date: Fri, 3 Oct 2025 16:23:59 +0530 Subject: [PATCH 2/3] Minor changes to the quickfixj-core module to reduce unnecessary --- .../java/quickfix/mina/acceptor/AbstractSocketAcceptor.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java index 3939670af..1c6269d19 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java +++ b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java @@ -57,8 +57,6 @@ protected AbstractSocketAcceptor(SessionSettings settings, SessionFactory sessio } protected AbstractSocketAcceptor(Application application, - MessageStoreFactory messageStoreFactory, SessionSettings settings, - MessageFactory messageFactory) throws ConfigError { MessageStoreFactory messageStoreFactory, SessionSettings settings, MessageFactory messageFactory) throws ConfigError { this(application, messageStoreFactory, settings, new ScreenLogFactory(settings), @@ -327,7 +325,6 @@ public int getQueueSize() { protected abstract EventHandlingStrategy getEventHandlingStrategy(); - private class DefaultAcceptorSessionProvider implements AcceptorSessionProvider { private static class DefaultAcceptorSessionProvider implements AcceptorSessionProvider { private final Map acceptorSessions; From 08df24911f08c267400c3e67b5d8a2b864119d2a Mon Sep 17 00:00:00 2001 From: Abhishek Raha Date: Sat, 4 Oct 2025 22:33:38 +0530 Subject: [PATCH 3/3] reverted import changes as per review comments --- .../main/java/quickfix/CachedFileStore.java | 22 ++++++++++++-- .../java/quickfix/DefaultSessionFactory.java | 7 ++++- .../src/main/java/quickfix/FileLog.java | 10 +++++-- .../src/main/java/quickfix/FileStore.java | 19 ++++++++++-- .../main/java/quickfix/SleepycatStore.java | 27 +++++++++++------ .../java/quickfix/mina/SessionConnector.java | 30 +++++++++++++++---- .../SingleThreadedEventHandlingStrategy.java | 6 +++- .../mina/acceptor/AbstractSocketAcceptor.java | 28 +++++++++++++++-- .../initiator/AbstractSocketInitiator.java | 27 +++++++++++++++-- 9 files changed, 148 insertions(+), 28 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java index 73167d381..164a14421 100644 --- a/quickfixj-core/src/main/java/quickfix/CachedFileStore.java +++ b/quickfixj-core/src/main/java/quickfix/CachedFileStore.java @@ -24,8 +24,26 @@ import org.slf4j.LoggerFactory; import quickfix.field.converter.UtcTimestampConverter; -import java.io.*; -import java.util.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; /** * File store implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN COMPATIBILITY WITH THE QUICKFIX JNI. IT SHOULD ONLY diff --git a/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java b/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java index 7d826b118..f38d36e11 100644 --- a/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java +++ b/quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java @@ -27,7 +27,12 @@ import quickfix.field.DefaultApplVerID; import java.net.InetAddress; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.List; +import java.util.Properties; +import java.util.Set; /** * Factory for creating sessions. Used by the communications code (acceptors, diff --git a/quickfixj-core/src/main/java/quickfix/FileLog.java b/quickfixj-core/src/main/java/quickfix/FileLog.java index 396069099..41db4c16e 100644 --- a/quickfixj-core/src/main/java/quickfix/FileLog.java +++ b/quickfixj-core/src/main/java/quickfix/FileLog.java @@ -19,10 +19,16 @@ package quickfix; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; + import org.quickfixj.CharsetSupport; -import quickfix.field.converter.UtcTimestampConverter; -import java.io.*; +import quickfix.field.converter.UtcTimestampConverter; /** * File log implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN COMPATIBILITY diff --git a/quickfixj-core/src/main/java/quickfix/FileStore.java b/quickfixj-core/src/main/java/quickfix/FileStore.java index 37e93afd9..808e30b9b 100644 --- a/quickfixj-core/src/main/java/quickfix/FileStore.java +++ b/quickfixj-core/src/main/java/quickfix/FileStore.java @@ -22,8 +22,23 @@ import org.quickfixj.CharsetSupport; import quickfix.field.converter.UtcTimestampConverter; -import java.io.*; -import java.util.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.Closeable; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import java.util.TreeMap; /** * File store implementation. THIS CLASS IS PUBLIC ONLY TO MAINTAIN diff --git a/quickfixj-core/src/main/java/quickfix/SleepycatStore.java b/quickfixj-core/src/main/java/quickfix/SleepycatStore.java index ce307d7b9..f9c0dcf4c 100644 --- a/quickfixj-core/src/main/java/quickfix/SleepycatStore.java +++ b/quickfixj-core/src/main/java/quickfix/SleepycatStore.java @@ -19,21 +19,30 @@ package quickfix; -import com.sleepycat.bind.EntryBinding; -import com.sleepycat.bind.tuple.TupleBinding; -import com.sleepycat.bind.tuple.TupleInput; -import com.sleepycat.bind.tuple.TupleOutput; -import com.sleepycat.je.*; -import org.quickfixj.CharsetSupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Collection; import java.util.Date; +import org.quickfixj.CharsetSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.sleepycat.bind.EntryBinding; +import com.sleepycat.bind.tuple.TupleBinding; +import com.sleepycat.bind.tuple.TupleInput; +import com.sleepycat.bind.tuple.TupleOutput; +import com.sleepycat.je.Cursor; +import com.sleepycat.je.Database; +import com.sleepycat.je.DatabaseConfig; +import com.sleepycat.je.DatabaseEntry; +import com.sleepycat.je.DatabaseException; +import com.sleepycat.je.Environment; +import com.sleepycat.je.EnvironmentConfig; +import com.sleepycat.je.LockMode; +import com.sleepycat.je.OperationStatus; + /** * Sleepycat message and session state storage. This could be creating * using the Sleepycat store factory. diff --git a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java index 670b71e94..bc7a45105 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java +++ b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java @@ -20,19 +20,39 @@ package quickfix.mina; import org.apache.mina.core.filterchain.IoFilterChainBuilder; -import org.apache.mina.core.future.CloseFuture; -import org.apache.mina.core.service.IoService; import org.apache.mina.core.session.IoSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import quickfix.*; +import quickfix.ConfigError; +import quickfix.Connector; +import quickfix.ExecutorFactory; +import quickfix.FieldConvertError; +import quickfix.Session; +import quickfix.SessionFactory; +import quickfix.SessionID; +import quickfix.SessionSettings; import quickfix.field.converter.IntConverter; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.IOException; -import java.util.*; -import java.util.concurrent.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.mina.core.future.CloseFuture; +import org.apache.mina.core.service.IoService; /** * An abstract base class for acceptors and initiators. Provides support for common functionality and also serves as an diff --git a/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java b/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java index 8ddd36a29..9c933d17b 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java +++ b/quickfixj-core/src/main/java/quickfix/mina/SingleThreadedEventHandlingStrategy.java @@ -24,7 +24,11 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.*; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; import static quickfix.mina.QueueTrackers.newDefaultQueueTracker; import static quickfix.mina.QueueTrackers.newMultiSessionWatermarkTracker; diff --git a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java index 1c6269d19..5e094c646 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java +++ b/quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java @@ -24,8 +24,26 @@ import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.ssl.SslFilter; -import quickfix.*; -import quickfix.mina.*; +import quickfix.Acceptor; +import quickfix.Application; +import quickfix.ConfigError; +import quickfix.DefaultSessionFactory; +import quickfix.FieldConvertError; +import quickfix.LogFactory; +import quickfix.LogUtil; +import quickfix.MessageFactory; +import quickfix.MessageStoreFactory; +import quickfix.RuntimeError; +import quickfix.ScreenLogFactory; +import quickfix.Session; +import quickfix.SessionFactory; +import quickfix.SessionID; +import quickfix.SessionSettings; +import quickfix.mina.CompositeIoFilterChainBuilder; +import quickfix.mina.EventHandlingStrategy; +import quickfix.mina.NetworkingOptions; +import quickfix.mina.ProtocolFactory; +import quickfix.mina.SessionConnector; import quickfix.mina.message.FIXProtocolCodecFactory; import quickfix.mina.ssl.SSLConfig; import quickfix.mina.ssl.SSLContextFactory; @@ -35,7 +53,11 @@ import java.io.IOException; import java.net.SocketAddress; import java.security.GeneralSecurityException; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; diff --git a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java index aac309970..96c7975c7 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java +++ b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java @@ -23,7 +23,19 @@ import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import quickfix.*; +import quickfix.Application; +import quickfix.ConfigError; +import quickfix.DefaultSessionFactory; +import quickfix.FieldConvertError; +import quickfix.Initiator; +import quickfix.LogFactory; +import quickfix.LogUtil; +import quickfix.MessageFactory; +import quickfix.MessageStoreFactory; +import quickfix.Session; +import quickfix.SessionFactory; +import quickfix.SessionID; +import quickfix.SessionSettings; import quickfix.field.converter.BooleanConverter; import quickfix.mina.EventHandlingStrategy; import quickfix.mina.NetworkingOptions; @@ -33,8 +45,17 @@ import quickfix.mina.ssl.SSLSupport; import java.net.SocketAddress; -import java.util.*; -import java.util.concurrent.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicInteger; /**