-
Notifications
You must be signed in to change notification settings - Fork 0
QFJ Dynamic Acceptor Session
Baoying Wang edited this page Nov 23, 2017
·
1 revision
QuickFixJ support dynamic acceptor session, as mentioned: http://www.quickfixj.org/quickfixj/usermanual/1.5.3/usage/acceptor_dynamic.html That means, you can avoid hardcode the session information in the configuration file. Then, you would accept all session logon, and check the Logon based on business requirement.
Have a quick check on this article, and plan the DefaultDynamicSessionQFJServer.java + DefaultDynamicSessionQFJServer.qfj.config.txt directly of my QFJTutorial project.
- setup AcceptorTemplate=Y in your qfj configuration file
AcceptorTemplate=Y
note:you can skip the sender/target comp id e.g.
[session]
AcceptorTemplate=Y
ConnectionType=acceptor
- setup sessionProvider as DynamicAcceptorSeesionProvider on your SocketAcceptor. note: this step is NOT required for non-dynamic acceptor. note: pls set the provider, before connect(). Otherwise, the default provider would be used.
e.g.
log.info("dynamic acceptor is configured");
AcceptorSessionProvider provider = new DynamicAcceptorSessionProvider(_settings, sessionID,
_application, _storeFactory, _logFactory, new DefaultMessageFactory());
// SocketAcceptAddress
// SocketAcceptPort
SocketAddress address = new InetSocketAddress(_settings.getString(sessionID, "SocketAcceptAddress"),
(int) (_settings.getLong(sessionID, "SocketAcceptPort")));
((ThreadedSocketAcceptor ) _connectorAsAcc).setSessionProvider(address, provider);
You could also define your own dynamic session provider, by referring how DynamicAcceptorSeesionProvider, and how it is used.
Please also refer below stack, while implementing your own session provider. Stack Trace of get session
Thread [NioProcessor-2] (Suspended (breakpoint at line 131 in DynamicAcceptorSessionProvider))
owns: DynamicAcceptorSessionProvider (id=59)
DynamicAcceptorSessionProvider.getSession(SessionID, SessionConnector) line: 131
AcceptorIoHandler.findQFSession(IoSession, SessionID) line: 120
AcceptorIoHandler(AbstractIoHandler).messageReceived(IoSession, Object) line: 114
DefaultIoFilterChain$TailFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 854
DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, Object) line: 542
DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, IoSession, Object) line: 48
DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 943
ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(IoFilter$NextFilter, IoSession) line: 405
ProtocolCodecFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 235
DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, Object) line: 542
DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, IoSession, Object) line: 48
DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 943
DefaultIoFilterChain$HeadFilter(IoFilterAdapter).messageReceived(IoFilter$NextFilter, IoSession, Object) line: 109
DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, Object) line: 542
DefaultIoFilterChain.fireMessageReceived(Object) line: 535
NioProcessor(AbstractPollingIoProcessor<S>).read(S) line: 714
NioProcessor(AbstractPollingIoProcessor<S>).process(S) line: 668
NioProcessor(AbstractPollingIoProcessor<S>).process() line: 657
AbstractPollingIoProcessor<S>.access$600(AbstractPollingIoProcessor) line: 67
AbstractPollingIoProcessor$Processor.run() line: 1121
NamePreservingRunnable.run() line: 64
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1142
ThreadPoolExecutor$Worker.run() line: 617
Thread.run() line: 745