public void createFIXInitiator(String fixEPR,
AxisService service,
SessionID sessionID) throws AxisFault {
if (log.isDebugEnabled()) {
log.debug("Initializing a new FIX initiator for the service " + service.getName());
}
SessionSettings settings;
InputStream fixConfigStream = getFIXConfigAsStream(service, false);
if (fixConfigStream == null) {
settings = new SessionSettings();
settings.setLong(sessionID, FIXConstants.HEART_BY_INT, FIXConstants.DEFAULT_HEART_BT_INT_VALUE);
settings.setString(sessionID, FIXConstants.START_TIME, FIXConstants.DEFAULT_START_TIME_VALUE);
settings.setString(sessionID, FIXConstants.END_TIME, FIXConstants.DEFAULT_END_TIME_VALUE);
} else {
try {
settings = new SessionSettings(fixConfigStream);
} catch (ConfigError e) {
throw new AxisFault("Error in the specified FIX configuration. Unable to initialize a " +
"FIX session for the service " + service.getName(), e);
}
}
Hashtable< String,String > properties = FIXUtils.getProperties(fixEPR);
Iterator< String > keys = properties.keySet().iterator();
while (keys.hasNext()) {
String currentKey = keys.next();
settings.setString(sessionID, currentKey, properties.get(currentKey));
}
String[] socketAddressElements = FIXUtils.getSocketAddressElements(fixEPR);
settings.setString(sessionID, FIXConstants.CONNECTION_TYPE, FIXConstants.FIX_INITIATOR);
settings.setString(sessionID, FIXConstants.SOCKET_CONNECT_HOST, socketAddressElements[0]);
settings.setString(sessionID, FIXConstants.SOCKET_CONNECT_PORT, socketAddressElements[1]);
quickfix.LogFactory logFactory = getLogFactory(service, settings, false);
MessageStoreFactory storeFactory = getMessageStoreFactory(service, settings, false);
MessageFactory messageFactory = new DefaultMessageFactory();
//Get a new FIX application
Application messageHandler = applicationFactory.getFIXApplication(service, false);
try {
//Create a new FIX initiator
Initiator initiator = new SocketInitiator(
messageHandler,
storeFactory,
settings,
logFactory,
messageFactory);
initiatorStore.put(fixEPR, initiator);
applicationStore.put(fixEPR, messageHandler);
initiator.start();
FIXIncomingMessageHandler fixMessageHandler = (FIXIncomingMessageHandler) messageHandler;
log.info("Waiting for logon procedure to complete...");
fixMessageHandler.acquire();
} catch (ConfigError e) {
throw new AxisFault("Error in the specified FIX configuration. Unable to initialize a " +
"FIX initiator.", e);
} catch (InterruptedException ignore) { }
}
Extract the parameters embedded in the given EPR and initialize a new FIX session.
Create a new FIX initiator and a new FIX Application.Put the initiator into the
initiatorStore keyed by the EPR and start the initiator. |