2017-05-17 6 views
1

안녕하세요 여러분은 설정 파일을 무시하기 위해 quickfixj에 대한 자습서를 진행하고 있습니다. 기본적으로 나는 txt 설정 파일을 갖고 싶지 않다. 나는 FIX에 연결하기 전에 내 자신의 설정을 만들고 싶다. 내가하고있는 이유는 사용자가 자신의 SendcompID, TargetCompID, 호스트 주소와 포트 주소를 입력하기를 원한다는 것이다. 로그온을 보내기 전에 GUI에서.설정 파일을 우회하여 프로그래밍 방식으로 수행하는 Quickfixj

나는 따랐다이 여기 tutorial

내 코드

SessionSettings settings = new SessionSettings(); 

     SessionID id1 = new SessionID(new BeginString("FIX.4.4"), new SenderCompID("ManiFX"), new TargetCompID("ALPHA-FIX"), "Session1"); 
     Dictionary d = new Dictionary(); 

     d.setString("ConnectionType", "acceptor"); 
     d.setString("SocketConnectPort", "7403"); 
     d.setString("SocketConnectHost", "185.79.219.199"); 
     d.setString("FileLogPath", "C:/Work/QuickFIXJ/logs"); 
     // d.setString("StartDay", "sunday"); 
     //d.setString("EndDay", "saturday"); 
     d.setString("StartTime", "00:00:00"); 
     d.setString("EndTime", "00:00:00"); 
     d.setString("FileStorePath", "/Users/renan.gado/workspace/QuickFix/src/Sessioninfo"); 
     d.setString("UseDataDictionary", "n"); 
     d.setString("DataDictionary", "FIX44.xml"); 

     settings.set(id1,d); 

     Application application = new QuickFix(); 
     FileStoreFactory storeFactory = new FileStoreFactory(settings); 
     ScreenLogFactory logFactory = new ScreenLogFactory(settings); 
     MessageFactory messageFactory = new DefaultMessageFactory(); 
     SocketInitiator acceptor = new SocketInitiator(application, storeFactory, settings, logFactory, messageFactory); 


     acceptor.start(); 

내가

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException:  java.lang.reflect.InvocationTargetException 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventH andler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManag er.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl .java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8413) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771) 
... 48 more 
Caused by: quickfix.ConfigError: no initiators in settings 
at quickfix.mina.initiator.AbstractSocketInitiator.createSessions(AbstractSocketInitiator.java:202) 
    at quickfix.mina.initiator.AbstractSocketInitiator.createSessionInitiators(AbstractSocketInitiator.java:83) 
    at quickfix.SocketInitiator.initialize(SocketInitiator.java:114) 
    at quickfix.SocketInitiator.start(SocketInitiator.java:89) 
    at controller.Controller.connectButtonAction(Controller.java:174) 
    ... 58 more 

은 누구도 날이 문제를 해결하는 데 도움이 될 수 있습니다 다음과 같은 오류를 얻고있다?

감사합니다.

또한 달성하려는 목표를 달성 할 수있는 더 좋은 방법이 있다면 아이디어를 공유하십시오.

+1

코드에서 하드 코드 구성을 원하는 이유는 무엇입니까? 설정을 변경해야 할 때마다, 코드를 다시 컴파일해야하는데, 이것은 많은 단계에서 잘못되었습니다. 추측 컨대 당신은 1000 명의 거래 상대방에게 연결해야합니다. 왜 당신의 문제를 증가시키고 싶습니까? – DumbCoder

+0

나는 시간에 1 명의 상대방에게만 접속할 것이므로, 내가 매번 연결하려고하는 매개 변수를 전달할 수 있도록 구성을 하드 코드하고 싶습니다. 예 : 호스트 주소, 포트, 대상 comp ID, 보낸 사람 comp ID 및 수정 버전. txt 설정을 사용하여 더 나은 방법이 있다면 –

+0

quickfix가 기본적으로 읽는 Quickfix 설정 파일을 사용하고 싶지 않은 이유가 무엇입니까? – DumbCoder

답변

1

순전히 프로그래밍 방식으로 작업 할 수 있어야하지만 마음에 떠오르는 첫 번째 해결 방법은 QuickFix 구성 파일을 생성하는 코드를 작성하고 일반적인 방식으로 해당 파일에서 다양한 개체를 가리 키도록하는 것입니다.

파일을 작성하는 코드는 매우 간단합니다. 간단한 템플릿을 사용하여 변경하려는 항목을 대체하거나 코드의 모든 파일을 생성하는 일련의 printlns를 사용하십시오.

+0

나는 그것을 할 것입니다, 고맙습니다. –