Child pages
  • Using Custom Settings
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

It's possible to write programs that use extra customized settings from standard QuickFIX/J settings file. For example, let's say you want to limit the trade amount (price times quantity) for individual trades. You could place this parameter in the QuickFIX/J settings file.


Your application class could be defined with a constructor taking the settings file and calculate if the session constraint was violated. The settings object could also be obtained in the onCreate() application callback by calling getSessionSettings() on the supplied Session object.

public class MyApplication extends MessageCracker {
    private final SessionSettings settings;
    private final static String MAX_ORDER_AMOUNT_KEY = "MaxOrderAmount";

    public MyApplication(SessionSettings settings) {
        this.settings = settings;

    public void onMessage(NewOrderSingle order, SessionID sessionID) {
        try {
            if (orderAmount(order) > maxTradeAmount(sessionID)) {
                sendBusinessReject("Trade amount too large.");
            } else {
        } catch (Throwable e) {
            handleException(sessionID, e);

    private double maxTradeAmount(SessionID sessionID) throws ConfigError, FieldConvertError {
        // This could be cached for performance, if needed
        return settings.getDouble(sessionID, MAX_ORDER_AMOUNT_KEY);

    // ... other methods

If you are writing your own QuickFIX/J main function you can use similar techniques to define your initiator or acceptor application, message store factory, and log factory classes. Put the class name in the settings file and use Java reflection to create the appropriate class for your application.

If you want different factories for each session (e.g., a file log for one session and a JDBC log for another) then you'll need to modify the acceptor or initiator implementation to support this functionality (a topic of a future tip).

  • No labels