public static void main(final String[] args) {
    MamaTransport transport = null;
    MamaTransport mDictTransport = null;
    MamaDictionary dictionary = null;
    CommandLineProcessor options = new CommandLineProcessor(args);

    Level level = options.getLogLevel();
    if (level != null) {
      theLogger.setLevel(level);
      Mama.enableLogging(level);
    }
    theLogger.info("Source: " + options.getSource());

    try {
      // Initialize MAMDA
      mBridge = options.getBridge();
      Mama.open();
      transport = new MamaTransport();
      transport.create(options.getTransport(), mBridge);

      mDictTransportName = options.getDictTransport();

      if (mDictTransportName != null) {
        mDictTransport = new MamaTransport();
        mDictTransport.create(mDictTransportName, mBridge);
      } else {
        mDictTransport = transport;
      }

      // Get the Data dictionary.....
      dictionary = buildDataDictionary(mDictTransport, options.getDictSource());

      MamdaFundamentalFields.setDictionary(dictionary, null);
      MamdaCommonFields.setDictionary(dictionary, null);

      for (Iterator iterator = options.getSymbolList().iterator(); iterator.hasNext(); ) {
        final String symbol = (String) iterator.next();
        MamdaSubscription aSubscription = new MamdaSubscription();
        MamdaFundamentalListener aFundamentalListener = new MamdaFundamentalListener();
        FundamentalTicker aTicker = new FundamentalTicker();

        aFundamentalListener.addHandler(aTicker);
        aSubscription.addMsgListener(aFundamentalListener);
        aSubscription.addStaleListener(aTicker);
        aSubscription.addErrorListener(aTicker);

        aSubscription.create(
            transport, Mama.getDefaultQueue(mBridge), options.getSource(), symbol, null);

        theLogger.fine("Subscribed to: " + symbol);
      }

      Mama.start(mBridge);
      Thread.currentThread().join();
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
  /** Reset the dictionary for security status update fields. */
  public static void reset() {
    if (MamdaCommonFields.isSet()) {
      MamdaCommonFields.reset();
    }
    SRC_TIME = null;
    ACTIVITY_TIME = null;
    SEND_TIME = null;
    LINE_TIME = null;
    SECURITY_STATUS = null;
    SECURITY_STATUS_QUAL = null;
    SECURITY_STATUS_TIME = null;
    SECURITY_STATUS_ORIG = null;
    SHORT_SALE_CIRCUIT_BREAKER = null;
    SEQNUM = null;
    PART_ID = null;
    SYMBOL = null;
    ISSUE_SYMBOL = null;
    REASON = null;
    LULDINDICATOR = null;
    LULDTIME = null;

    MAX_FID = 0;
    initialised = false;
  }