quickfix-developers Mailing List for QuickFIX (Page 180)
Brought to you by:
orenmnero
You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
|
Feb
(5) |
Mar
(16) |
Apr
(15) |
May
(17) |
Jun
(33) |
Jul
(35) |
Aug
(34) |
Sep
(19) |
Oct
(40) |
Nov
(51) |
Dec
(43) |
| 2003 |
Jan
(45) |
Feb
(79) |
Mar
(124) |
Apr
(121) |
May
(132) |
Jun
(77) |
Jul
(110) |
Aug
(57) |
Sep
(48) |
Oct
(83) |
Nov
(60) |
Dec
(40) |
| 2004 |
Jan
(67) |
Feb
(72) |
Mar
(74) |
Apr
(87) |
May
(70) |
Jun
(96) |
Jul
(75) |
Aug
(147) |
Sep
(128) |
Oct
(83) |
Nov
(67) |
Dec
(42) |
| 2005 |
Jan
(110) |
Feb
(84) |
Mar
(68) |
Apr
(55) |
May
(51) |
Jun
(192) |
Jul
(111) |
Aug
(100) |
Sep
(79) |
Oct
(127) |
Nov
(73) |
Dec
(112) |
| 2006 |
Jan
(95) |
Feb
(120) |
Mar
(138) |
Apr
(127) |
May
(124) |
Jun
(97) |
Jul
(103) |
Aug
(88) |
Sep
(138) |
Oct
(91) |
Nov
(112) |
Dec
(57) |
| 2007 |
Jan
(55) |
Feb
(35) |
Mar
(56) |
Apr
(16) |
May
(20) |
Jun
(77) |
Jul
(43) |
Aug
(47) |
Sep
(29) |
Oct
(54) |
Nov
(39) |
Dec
(40) |
| 2008 |
Jan
(69) |
Feb
(79) |
Mar
(122) |
Apr
(106) |
May
(114) |
Jun
(76) |
Jul
(83) |
Aug
(71) |
Sep
(53) |
Oct
(75) |
Nov
(54) |
Dec
(43) |
| 2009 |
Jan
(32) |
Feb
(31) |
Mar
(64) |
Apr
(48) |
May
(38) |
Jun
(43) |
Jul
(35) |
Aug
(15) |
Sep
(52) |
Oct
(62) |
Nov
(62) |
Dec
(21) |
| 2010 |
Jan
(44) |
Feb
(10) |
Mar
(47) |
Apr
(22) |
May
(5) |
Jun
(54) |
Jul
(19) |
Aug
(54) |
Sep
(16) |
Oct
(15) |
Nov
(7) |
Dec
(8) |
| 2011 |
Jan
(18) |
Feb
(9) |
Mar
(5) |
Apr
(5) |
May
(41) |
Jun
(40) |
Jul
(29) |
Aug
(17) |
Sep
(12) |
Oct
(23) |
Nov
(22) |
Dec
(11) |
| 2012 |
Jan
(8) |
Feb
(24) |
Mar
(5) |
Apr
(5) |
May
(6) |
Jun
(5) |
Jul
(5) |
Aug
(5) |
Sep
(2) |
Oct
(9) |
Nov
(2) |
Dec
(18) |
| 2013 |
Jan
(25) |
Feb
(16) |
Mar
(8) |
Apr
(2) |
May
(16) |
Jun
(17) |
Jul
(2) |
Aug
(13) |
Sep
(3) |
Oct
(4) |
Nov
(1) |
Dec
|
| 2014 |
Jan
(2) |
Feb
|
Mar
(22) |
Apr
(9) |
May
(3) |
Jun
(1) |
Jul
(5) |
Aug
(11) |
Sep
(18) |
Oct
(4) |
Nov
(4) |
Dec
(3) |
| 2015 |
Jan
(2) |
Feb
|
Mar
|
Apr
(3) |
May
(4) |
Jun
(37) |
Jul
|
Aug
(4) |
Sep
(6) |
Oct
(1) |
Nov
(4) |
Dec
(2) |
| 2016 |
Jan
(9) |
Feb
(3) |
Mar
(7) |
Apr
(1) |
May
(8) |
Jun
|
Jul
|
Aug
|
Sep
(7) |
Oct
(3) |
Nov
(16) |
Dec
|
| 2017 |
Jan
(1) |
Feb
(15) |
Mar
(2) |
Apr
(12) |
May
(4) |
Jun
(7) |
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
(23) |
Dec
(8) |
| 2018 |
Jan
(2) |
Feb
(4) |
Mar
(2) |
Apr
(8) |
May
(3) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
(5) |
Nov
(3) |
Dec
|
| 2020 |
Jan
|
Feb
(4) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
(12) |
Aug
(5) |
Sep
(3) |
Oct
(1) |
Nov
|
Dec
(1) |
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2022 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2026 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Martin T. <mta...@ho...> - 2005-10-19 12:20:30
|
Hi, In my initiator file I have this session detailed with all its needed tag. [SESSION] HeartBtInt=30 BeginString=FIX.4.2 SenderSubID=abcd SenderCompID=efgh TargetCompID=ijkl RawData=abcd SocketConnectHost=x.x.x.x SocketConnectPort=1000 When my application try to connect to the host, the TAGs SenderSubID and RawData are not in the header of the logon message, but my host require them to allow the connection. How to make them part of the logon message? Thanks Martin |
|
From: Caleb E. <cal...@gm...> - 2005-10-18 22:23:45
|
I have spent the past couple of days torture-testing a QuickFIX C++ application with some simple test harnesses that bombard it with messages. In the processes of this testing, I noticed that my application was using a ridiculous amount of memory, many times larger than would be expected by th= e size of the test data. So I ran everything through valgrind (not much help = - no leaks detected), and eventually came upon Google's excellent "tcmalloc" library (see http://goog-perftools.sourceforge.net/), which can be used to dump statistics about heap usage. It turned out that 95% of the memory was taken up by the memory allocations done by ThreadedSocketConnection::read! The overall design of the ThreadedSocketConnection class is relatively simple, and on paper looks like it should work correctly. There are two threads for each Session: one which reads from a socket into a new'd char buffer and then pushes the buffer + size onto a queue; the other thread pop= s elements off of this queue, adds this data to the Parser's buffer, calls th= e Parser class to process its buffer, and finally delete[]'s the buffer it first got from the queue. The code appears to be correct, and doesn't leak memory in the purest sense, but the real-world behavior when incoming traffic is high is not good. When a counterparty sends data faster than your application can process it, the "read" thread in the ThreadedSocketConnection will do a fine job keepin= g up with the socket I/O, but the queue in between these two threads will end up growing very large, containing all of the data that has been read from the socket but which has yet to be processed by the Parser and Session. In = a perfect world, this memory usage would be identical to the size of the messages that have been recv'd, but memory allocators are inefficient and what ends up happening is that the application ends up using perhaps 10-20x more memory than this! My application, which should have used perhaps 125 M= B of memory (most of it due to a mmap'ed transaction log file) had ballooned up to 775 MB! As a comparison, the FIX incoming log file is only 38 MB in size. Thankfully, there is a simple fix to this problem, and it actually simplifies the code and eliminates one thread per session. Here's my versio= n of ThreadedSocketConnection::read: ---8<--- bool ThreadedSocketConnection::read() { QF_STACK_PUSH(ThreadedSocketConnection::read) int bytes =3D 0; char buffer[BUFSIZ]; try { if ( !socket_isValid( m_socket ) ) return false; socket_fionread( m_socket, bytes ); if (!bytes) bytes =3D sizeof (buffer); int result =3D recv( m_socket, buffer, bytes, 0 ); if ( result <=3D 0 ) { throw SocketRecvFailed(); } m_parser.addToStream (buffer, result); processStream (); return true; } catch ( SocketRecvFailed& e ) { if (m_pSession) m_pSession->getLog()->onEvent( e.what() ); return false; } QF_STACK_POP } ---8<--- Compared to the current QF version, this function: - Uses a single fixed buffer for all reads, keeping memory usage more or less constant regardless of incoming data rates - Doesn't spawn an extra thread for parsing/application callbacks - Causes the counterparty to block when the QuickFIX application can't keep up with incoming data I think all of these are benefits, though some might argue the last point i= s not and that the current read-as-fast-as-possible behavior is desireable. Perhaps this could be made configurable on a per-Session basis if folks wan= t the old behavior, but I personally much prefer this approach where the sender is blocked if we can't handle their flow fast enough. Thoughts? Opinions? -- Caleb Epstein caleb dot epstein at gmail dot com |
|
From: Rick L. <ri...@IT...> - 2005-10-18 03:51:26
|
Hi QuickFix developers, Just wanted to introduce myself. Frankly, I'm surprised it's taken me this long to loop around and find you guys. Well, better late than never! We are working up a non-profit, add-free site for Investment and Trading System Documentation that is geared to Open Source, Freely Licensed code projects such as QuickFix! Check out Http://ITSdoc.org I've been posting a LOT on ISO standards and its taken a while for me to circle around and hone in on FIX as a very viable long term standards group. In fact, FIX appears to be one of the few standards in the capital markets area that isn't run by a propriety trade group with substantial licensing fees! That makes FIX in general, and QuickFix in specific, very logical partners with us. We are promoting free, open standards too. All our stuff is free under the GPL for documentation. The site is new but here are a few sample pages: Standards http://www.itsdoc.org/tiki/tiki-index.php?page=Standards Algorithmic Trading http://www.itsdoc.org/tiki/tiki-index.php?page=Algorithmic%20Trading ISO 19312 http://www.itsdoc.org/tiki/tiki-index.php?page=ISO+19312 I'll apologize in advance that FIX has not yet been covered. I started with ISO and am working my way down. What I'm finding is a lot of stodgy bankers and international hot air. When I got down to FIX we are finally at the level of something useful! Basically we want to provide a high exposure for QuickFix and hope ITSdoc.org will merit a link back from your site to us. In the weeks ahead I want to learn a whole lot more about FIX and QuickFix and hear any other ideas how we can cooperate, co-promote and illuminate the path to better open standards. Other topics: 1. We are also very interested in http://www.fixprotocol.org/documents/1751/LondonFOW_FASTProtocol_v4.ppt 2. We are seeking low cost FIX brokers. One broker we know charges a minimum of $1200/year in commissions for FIX connectivity, which seems a bit pricy. Any other low cost alternatives??? Rick ri...@IT... |
|
From: Dale W. <wil...@oc...> - 2005-10-17 17:53:03
|
Hi Andrei, Andrei Goldchleger wrote: >QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html >QuickFIX Support: http://www.quickfixengine.org/services.html > >Hi there, > >Is it possible to build QuickFIX as a dynamic library for using it >with C++ (Win32 unmanaged) applications? > > It is possible, but non-trivial. QuickFIX does not export its symbols, and there are link-time and run-time issues related to the use of Singletons from a DLL (all of the session management stuff is handled as a Singleton) We have done it here at OCI for a customer who needed to use QuickFIX from a DLL, but the work is target specifically at his application. The general approach was to create another layer wrapped around QuickFIX that was DLL-aware and force all interaction with QuickFIX to occur through that layer. This layer added other value to the system, so it was worth doing. <plug> If you're interested in what it would take for OCI to do something similar for you (that's what we do for a living), please contact Malcolm Spence spe...@oc... We could also discuss having you sponsor us to make the QuickFIX itself DLL friendly with the goal of contributing that back to the open source library. </plug> Dale >Thanks, > >Andrei > > >------------------------------------------------------- >This SF.Net email is sponsored by: >Power Architecture Resource Center: Free content, downloads, discussions, >and more. http://solutions.newsforge.com/ibmarch.tmpl >_______________________________________________ >Quickfix-developers mailing list >Qui...@li... >https://lists.sourceforge.net/lists/listinfo/quickfix-developers > > -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Andrei G. <an...@gm...> - 2005-10-17 17:36:54
|
Hi there, Is it possible to build QuickFIX as a dynamic library for using it=20 with C++ (Win32 unmanaged) applications? Thanks, Andrei |
|
From: <Fra...@mp...> - 2005-10-13 12:56:10
|
Hello there, I have to build an application that connects to the counterpart using a= n internet connection; I have to pass through a proxy, but in the configuration file I see no entry for another IP address. Any ideas? Thanx, regards. Francesco Pispola -------------------------------------------------- Francesco Pispola Central Solution Centre EDS Italia S.p.A. Via Banchi di Sopra 31, Siena (SI) - ITALY Tel.: +39-577-22491 Office: +39-577-20-9186/9187 fra...@mp... fra...@ed... -------------------------------------------------- http://www.mpsfinance.it - - - - - - - - - - - - - - - - - - - - - - - - - - - - Le informazioni contenute nel presente e-mail e nei documenti eventualm= ente allegati sono confidenziali e sono comunque riservate al destinatario d= elle stesse. La loro diffusione, distribuzione e/o copia da parte di ter= zi =E8 proibita e pu=F2 costituire violazione della normativa che tutela il d= iritto alla privacy. Se avete ricevuto questa comunicazione per errore= , Vi preghiamo di informare immediatamente il mittente del messaggio = e di distruggere questo e-mail. - - - - - - - - - - - - - - - - - - - - - - - - - - - - This e-mail is confidential and it is legally privileged. If you have received it in error, please notify us immediately by reply e-mail and = then delete this message from your system. Please do not copy it or use it f= or any purposes, or disclose its contents to any other person. Mind that t= o do so could be a breach of Italian privacy Law. Thank you for your co-operation. = |
|
From: Max K. <ma...@vi...> - 2005-10-12 22:02:10
|
Hi, I am try to automate some acceptance tests using JUnit. I am using JUnit as a client on one side to pump orders using different scenarios through my system and to an exchange simulator on the other side. For example, one test will cover order placement, the other order execution, yet another order cancellation and so on. The problem arises when I set up and tear down my tests. Ideally, I want to call initiator.start() in the setup() and call initiator.stop() in teardown(), however, that allows me to run only one test since the session is dropped in initiator.stop() after JUnit calls teardown() for the first time. Has anyone done this before? Can anybody suggest a better scenario? Thanks, Max Khaskin ********************************************************************** Email notices. For more info please visit http://www.viewtrade.com/emaildisclaimer ********************************************************************** This email message has been swept by MIMEsweeper for the presence of any viruses. www.mimesweeper.com ********************************************************************** |
|
From: <ec...@fi...> - 2005-10-12 21:42:28
|
Please post the below in the quickfix engine developers newsgroup. Thanks! =20 All, =20 I am having a problem when calling initiator.stop(). My application simply hangs. This tends to occur when I attempt to stop my application after a call to Session.sendToTarget(msg, sessionid) returns with a SessionNotFound exception. I am not sure why the session cannot be found, as I am not logging out of it or otherwise doing anything intentional. I can handle this exception and recover; my big concern is the hanging call to initiator.stop(). I have seen previous posts about this, but no real solution. This has occurred with a couple of different builds - 1.9.4 and 1.10.2. I have both built the .dlls and use the binaries from the quickfixengine.org site. My application is in C#. Any patches, fixes, or workarounds would be greatly appreciated. Thanks! =20 Everett Conrad =20 |
|
From: Martin T. <mta...@ho...> - 2005-10-12 19:27:45
|
Hi Oren, I found this message when looking for a solution at my issue. Displayed below, is a reply that you sent to Eric. My issue is very similar to his. Initially I call initiator.start(). When I want it to disconnect, I call initiator.stop(), then, as described by Eric, it hang somewhere indefinitely. I have to kill my app. I know that I can stop any session by calling session.logout(). So, what I would like to know is the good way of connecting and disconnecting. Is it throught the initiator.start and initiator.stop ? In this case, what could make my initiator hang forever? Or to do a initiator.start initially, and then proceeding per session logout/logon ? Thank you! Martin >Why is the initiator thread being terminated? All you need to do is call >logout when you want to disconnect, and call logon when you want to >reconnect. Nothing here should affect your Initiator thread. Is something >else going on? Did you call stop on the Initiator? > >--oren > >On Jul 7, 2004, at 4:44 PM, Eric Ginder wrote: > > > I"m having trouble with reconnecting after I disconnect a session. > >I"m using Session::logout() to kill the session and I see the logout > >message coming back from the targetcomp. The initiator thread that is > >supposed to terminate at this point is hanging somewhere and when I > try >to reconnect, it fails because the socket initiator is still > waiting for >the variable m_stop to turn to true. > > > Does anyone else have this problem or is there a better way to > >disconnect? > > > Thanks, > > > Eric Ginder > > Last Atlantis Capital > > ^ |
|
From: Shankar K. <skr...@jw...> - 2005-10-12 15:08:15
|
Hi, The onLogon and onCreate methods have the sessionID parameter. In these functions I just do the following myForm.lblMsg..text = sessionID.toString(); for now, just to see what gets written. Currently, I donot see anything written, even though I have initiated a connection. How do you use implement these functions using sessionID only. Thanks |
|
From: Tarandeep S. <tar...@ef...> - 2005-10-12 09:39:58
|
Hi, I am running my application (ConnectionType=initiator) on Aix 5.2. I am using FIX::Session::send(Message&) to send fix msg's to remote server. If I am sending messages at the rate of around 10 messages per sec everything works fine but if the message sending rate is increased to around 20 messages per sec quickfix library hangs. The application works fine on Linux. This problem is occuring on both Aix 5.1 and 5.2. On attaching gdb to the hanged process I received following output: 0xd005c114 in _usched_dispatch_front () from /usr/lib/libpthreads.a(shr_xpg5.o) (gdb)bt #0 0xd005c114 in _usched_dispatch_front () from /usr/lib/libpthreads.a(shr_xpg5.o) gdbtypes.c:533: internal-error: Assertion `TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type) || TYPE_STUB (*typeptr)' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Any ideas as to why its happening and how to rectify this? Thanks and regards, Tarandeep Singh |
|
From: James R. <jam...@gm...> - 2005-10-11 18:37:39
|
Hello, We are currently using an Acceptor that is configured for ~40 sessions. Our clients that connect to it are also QuickFIX based. We have seen some odd behaviour once in a while (1 day per 20 days of running without problems, the Acceptor is restarted everyday) which occurs with one or more of the configured sessions. So far we have not noticed any errors (no sequence problems, nothing) in the incoming/outgoing logs for the clients or the Acceptor besides what is listed below. We are using the latest release of QuickFIX (1.10.2), but we have seen this behaviour in the past two version of QuickFIX as well. Any ideas as to what could be going on here? Thanks. An example of the Acceptor's log: 20051011-11:01:55 : Created session 20051011-11:53:58 : Received logon request 20051011-11:53:58 : Responding to logon request 20051011-11:53:58 : Initiated logout request 20051011-11:53:59 : Socket Error: Connection reset by peer. 20051011-11:53:59 : Disconnecting 20051011-11:53:59 : Received logout request 20051011-11:53:59 : Sending logout response 20051011-11:54:03 : Received logon request 20051011-11:54:03 : Responding to logon request 20051011-11:54:03 : Initiated logout request 20051011-11:54:03 : Socket Error: Connection reset by peer. 20051011-11:54:03 : Disconnecting 20051011-11:54:03 : Logon state is not valid for message ...message sequence repeats... The Initiator log: 20051011-11:53:57 : Created session 20051011-11:53:57 : Connecting to [hostname] on port 3651 20051011-11:53:57 : Connection succeeded 20051011-11:53:58 : Initiated logon request 20051011-11:53:58 : Received logon response 20051011-11:53:59 : Received logout request 20051011-11:53:59 : Sending logout response 20051011-11:53:59 : Disconnecting 20051011-11:54:03 : Connecting to [hostname] on port 3651 20051011-11:54:03 : Connection succeeded 20051011-11:54:03 : Initiated logon request 20051011-11:54:03 : Received logon response 20051011-11:54:03 : Received logout request 20051011-11:54:03 : Sending logout response 20051011-11:54:03 : Disconnecting ...message sequence repeats... |
|
From: Shankar K. <skr...@jw...> - 2005-10-11 18:17:22
|
Hi, I have a front end to me FIX based app, I have added references to the 2 dlls' that are available for .Net I have a MyApplication class added thru add-> add new item where I implement the QuickFix.Application Interface. When I build my app, I gets Application does not contain a definition for 'Run' !, the executor example app Is a console based app, hence the problem did not arise, am I doing something fundamentally wrong while Using the quickfix interface, Thanks |
|
From: Brian E. <azz...@ya...> - 2005-10-11 14:40:41
|
Alvin -
The setGroup method appears to only be supported by the C++ and Python
APIs. It does not appear in the .NET or Java (native or JNI) versions.
I don't think setGroup would provide the functionality you require
anyway. setGroup appears to be primarily a string parsing routine - if
you have a string representation of a group, you can ADD that to a
message via setGroup (in a somewhat complicated way). It really is a
support routine for setString (a FIX string parsing routine that takes
a string and populates a FIX message).
Modifying an existing group appears to be impossible with the current
implementation. What you'd really have to do is get copies/clones of
all the group elements via getGroup(), modify each element via
group.setXXX(), delete the existing group (via the patch that I sent
yesterday) and reinsert the group elements via addGroup(). Not exactly
pretty, but it would work.
You should probably add a bug to the tracker asking for better group
manipulation routines - the addition of removeGroup (both the entire
group and single elements of the group) and updateGroup (probably just
at the group element level) would probably be enough.
- Brian Erst
Thynk Software, Inc.
--- Alvin Wang <AW...@FF...> wrote:
> Oren, I am not sure if you are talking about C++ API. But there is no
>
> message.setGroup method in Java API. Pls clarify.
>
> Thanks
> Alvin
>
>
>
>
>
>
> "Oren Miller" <or...@qu...>
> Sent by: qui...@li...
> 10/10/2005 06:16 PM
>
>
> To: <azz...@ya...>, "Alvin Wang"
> <AW...@FF...>
> cc: "Caleb Epstein" <cal...@gm...>,
> <qui...@li...>,
> <qui...@li...>
> bcc:
> Subject: [Quickfix-developers] Re: more
> message.getGroup questions.
>
>
> You are actually getting a clone of the group, you will need to call
> setGroup with the modified group.
>
> --oren
> ----- Original Message -----
> From: Alvin Wang
> To: azz...@ya...
> Cc: Caleb Epstein ; Oren Miller ;
> qui...@li... ;
> qui...@li...
> Sent: Tuesday, October 11, 2005 12:18 AM
> Subject: more message.getGroup questions.
>
>
> OK, now I am doing something like this:
>
> Group group = new Group(NoAllocs.FIELD,
> AllocAccount.FIELD);
> allocationInstruction.getGroup(1, group);
> group.setDouble(9047, 100);//add a custom tag 9047 to the
> group
> //Then send out allocationInstruction
>
> However, tag 9047 will not show up in the Allocation Message I
> created.
> Why?
>
>
> Also, I wrote my own removeGroup mehtod as below:
>
> public static void removeGroups(Message message, int noField, int
>
> delimField)
> throws Exception
> {
> for (int i = 1; i <= message.getInt(noField); i++)
> {
> Group group = new Group(noField, delimField);
> message.getGroup(i, group);
> for (Iterator it = group.iterator(); it.hasNext();)
> {
> Field field = (Field)it.next();
> group.removeField(field.getField());
> }
> }
>
> message.removeField(noField);
> }
>
> But after running it, I found the group is still there. Can anyone
> explain
> for me what is going on here? It seems that the group in
> message.getGroup(i, group) method is a "cloned" copy of the original.
> So changing it will not change
> the original. So how to change the original? What about the returned
> value
> of message.getGroup method?
>
> Thanks a lot!
> Also Brian, thanks so much for your help.
> Alvin
>
>
>
>
>
> Brian Erst <azz...@ya...>
> 10/10/2005 02:47 PM
> Please respond to azzipsderf-quickfix
>
> To: Alvin Wang <AW...@FF...>,
> qui...@li...,
> qui...@li...,
> azz...@ya...
> cc: Caleb Epstein <cal...@gm...>, Oren
> Miller
> <or...@qu...>
> bcc:
> Subject: Re: [Quickfix-developers] getGroup
>
>
>
> Alvin -
>
> I don't know the Java side very well (I've coded to the C++ and .NET
> versions), but the getGroup function is pretty simple.
>
> First, you need to know the name of the field that acts as the
> group's
> enumerator/designator. These almost always start with "No" (as in
> "number"). You should check for the existence of that field - if it
> isn't there, there won't be any group members either.
>
> One example of this is the Legs group in NewOrderMultileg. This group
> begins with a "NoLegs" field (defined as an IntField) that contains
> the
> number of legs.
>
> In C++ -
>
> FIX::NoLegs noLegs;
> if (message.isSetField(noLegs))
> {
> message.getField(noLegs);
> for (int i=0; i<noLegs.getValue(); i++)
> ...
>
>
> In C#, we'd use the built-in field getters -
>
> if (message.isSetNoLegs())
> {
> for (int i=0; i<message.getNoLegs().getValue(); i++)
> ...
>
> Second, you need to create a group object of the type you wish to
> extract. In the C++ and .NET versions, these are defined as
> sub-classes
> of the parent message type with a class name that is the same as the
> field name of the enumeration field mentioned above.
>
> In C++ -
>
> FIX::NewOrderMultileg::NoLegs leg;
>
> In C# -
>
> QuickFix43.NewOrderMultileg.NoLegs leg = new
> QuickFix43.NewOrderMultileg.NoLegs();
>
>
> Third, you use the "getGroup" method of the Message object to
> retrieve
> a single element of the repeating group list. These elements are
> indexed starting at "1", not "0".
>
> In C++ -
>
> message.getGroup(1, leg);
>
> In C# -
>
> message.getGroup(1, leg);
>
>
> Full example, C++:
>
> FIX::NoLegs noLegs;
> if (message.isSetField(noLegs))
> {
> FIX::NewOrderMultileg::NoLegs leg;
> FIX::LegSide legSide;
>
> message.getField(noLegs);
> for (int i=0; i<noLegs.getValue(); i++)
> {
> message.getGroup(i+1, leg);
> leg.get(legSide);
> if (legSide.getValue() == FIX::Side_BUY)
> ...
> }
> }
>
> Full example, C#:
>
> if (message.isSetNoLegs())
> {
> QuickFix43.NewOrderMultileg.NoLegs leg = new
> QuickFix43.NewOrderMultileg.NoLegs();
>
> for (int i=0; i<message.getNoLegs().getValue(); i++)
> {
> message.getGroup(i+1, leg);
> if (leg.getLegSide().getValue() == QuickFix.Side.BUY)
>
=== message truncated ===
|
|
From: Alvin W. <AW...@FF...> - 2005-10-11 13:37:13
|
Oren, I am not sure if you are talking about C++ API. But there is no
message.setGroup method in Java API. Pls clarify.
Thanks
Alvin
"Oren Miller" <or...@qu...>
Sent by: qui...@li...
10/10/2005 06:16 PM
To: <azz...@ya...>, "Alvin Wang" <AW...@FF...>
cc: "Caleb Epstein" <cal...@gm...>,
<qui...@li...>,
<qui...@li...>
bcc:
Subject: [Quickfix-developers] Re: more message.getGroup questions.
You are actually getting a clone of the group, you will need to call
setGroup with the modified group.
--oren
----- Original Message -----
From: Alvin Wang
To: azz...@ya...
Cc: Caleb Epstein ; Oren Miller ; qui...@li... ; qui...@li...
Sent: Tuesday, October 11, 2005 12:18 AM
Subject: more message.getGroup questions.
OK, now I am doing something like this:
Group group = new Group(NoAllocs.FIELD,
AllocAccount.FIELD);
allocationInstruction.getGroup(1, group);
group.setDouble(9047, 100);//add a custom tag 9047 to the group
//Then send out allocationInstruction
However, tag 9047 will not show up in the Allocation Message I created.
Why?
Also, I wrote my own removeGroup mehtod as below:
public static void removeGroups(Message message, int noField, int
delimField)
throws Exception
{
for (int i = 1; i <= message.getInt(noField); i++)
{
Group group = new Group(noField, delimField);
message.getGroup(i, group);
for (Iterator it = group.iterator(); it.hasNext();)
{
Field field = (Field)it.next();
group.removeField(field.getField());
}
}
message.removeField(noField);
}
But after running it, I found the group is still there. Can anyone explain
for me what is going on here? It seems that the group in message.getGroup(i, group) method is a "cloned" copy of the original. So changing it will not change
the original. So how to change the original? What about the returned value
of message.getGroup method?
Thanks a lot!
Also Brian, thanks so much for your help.
Alvin
Brian Erst <azz...@ya...>
10/10/2005 02:47 PM
Please respond to azzipsderf-quickfix
To: Alvin Wang <AW...@FF...>,
qui...@li...,
qui...@li...,
azz...@ya...
cc: Caleb Epstein <cal...@gm...>, Oren Miller
<or...@qu...>
bcc:
Subject: Re: [Quickfix-developers] getGroup
Alvin -
I don't know the Java side very well (I've coded to the C++ and .NET
versions), but the getGroup function is pretty simple.
First, you need to know the name of the field that acts as the group's
enumerator/designator. These almost always start with "No" (as in
"number"). You should check for the existence of that field - if it
isn't there, there won't be any group members either.
One example of this is the Legs group in NewOrderMultileg. This group
begins with a "NoLegs" field (defined as an IntField) that contains the
number of legs.
In C++ -
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
...
In C#, we'd use the built-in field getters -
if (message.isSetNoLegs())
{
for (int i=0; i<message.getNoLegs().getValue(); i++)
...
Second, you need to create a group object of the type you wish to
extract. In the C++ and .NET versions, these are defined as sub-classes
of the parent message type with a class name that is the same as the
field name of the enumeration field mentioned above.
In C++ -
FIX::NewOrderMultileg::NoLegs leg;
In C# -
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
Third, you use the "getGroup" method of the Message object to retrieve
a single element of the repeating group list. These elements are
indexed starting at "1", not "0".
In C++ -
message.getGroup(1, leg);
In C# -
message.getGroup(1, leg);
Full example, C++:
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
FIX::NewOrderMultileg::NoLegs leg;
FIX::LegSide legSide;
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
{
message.getGroup(i+1, leg);
leg.get(legSide);
if (legSide.getValue() == FIX::Side_BUY)
...
}
}
Full example, C#:
if (message.isSetNoLegs())
{
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
for (int i=0; i<message.getNoLegs().getValue(); i++)
{
message.getGroup(i+1, leg);
if (leg.getLegSide().getValue() == QuickFix.Side.BUY)
...
}
}
Hope this helps.
- Brian Erst
Thynk Software, Inc.
--- Alvin Wang <AW...@FF...> wrote:
> public native Group getGroup(int int0, Group group) throws
> FieldNotFound;
>
> Hi, Can anyone tell me how to use the getGroup method in Message
> class?
> What are the 2 parameters? what does it return?
>
> BTW, quickfix is wonderful. Hopefully its document is as good as it.
>
> Thanks
> Alvin
>
>
>
>
>
>
>
**********************************************************************
> This e-mail message is intended solely for the use of the addressee.
> The message may contain information that is privileged and
> confidential.
> Disclosure to anyone other than the intended recipient is
> prohibited. If you are not the intended recipient, please do not
> disseminate, distribute or copy this communication, by e-mail or
> otherwise. Instead, please notify us immediately by return e-mail
> (including the original message with your reply) and then delete
> and discard all copies of the message. We have taken precautions to
> minimize the risk of transmitting software viruses but nevertheless
> advise you to carry out your own virus checks on any attachment to
> this message. We accept no liability for any loss or damage caused
> by software viruses.
>
**********************************************************************
>
>
|
|
From: Oren M. <or...@qu...> - 2005-10-10 22:16:47
|
You are actually getting a clone of the group, you will need to call =
setGroup with the modified group.
--oren
----- Original Message -----=20
From: Alvin Wang=20
To: azz...@ya...=20
Cc: Caleb Epstein ; Oren Miller ; =
qui...@li... ; =
qui...@li...=20
Sent: Tuesday, October 11, 2005 12:18 AM
Subject: more message.getGroup questions.
OK, now I am doing something like this:=20
Group group =3D new Group(NoAllocs.FIELD, =
AllocAccount.FIELD);=20
allocationInstruction.getGroup(1, group);=20
group.setDouble(9047, 100);//add a custom tag 9047 to the =
group=20
//Then send out allocationInstruction=20
However, tag 9047 will not show up in the Allocation Message I =
created. Why?=20
Also, I wrote my own removeGroup mehtod as below:=20
public static void removeGroups(Message message, int noField, int =
delimField)=20
throws Exception=20
{=20
for (int i =3D 1; i <=3D message.getInt(noField); i++)=20
{=20
Group group =3D new Group(noField, delimField);=20
message.getGroup(i, group);=20
for (Iterator it =3D group.iterator(); it.hasNext();)=20
{=20
Field field =3D (Field)it.next();=20
group.removeField(field.getField());=20
}=20
}=20
=20
message.removeField(noField); =20
} =20
But after running it, I found the group is still there. Can anyone =
explain for me what is going on here? It seems that the group in =
message.getGroup(i, group) method is a "cloned" copy of the original. So =
changing it will not change the original. So how to change the original? =
What about the returned value of message.getGroup method?=20
Thanks a lot!=20
Also Brian, thanks so much for your help.=20
Alvin=20
Brian Erst <azz...@ya...>=20
10/10/2005 02:47 PM=20
Please respond to azzipsderf-quickfix=20
=20
To: Alvin Wang <AW...@FF...>, =
qui...@li..., =
qui...@li..., =
azz...@ya...=20
cc: Caleb Epstein <cal...@gm...>, Oren =
Miller <or...@qu...>=20
bcc: =20
Subject: Re: [Quickfix-developers] getGroup=20
Alvin -
I don't know the Java side very well (I've coded to the C++ and .NET
versions), but the getGroup function is pretty simple.
First, you need to know the name of the field that acts as the group's
enumerator/designator. These almost always start with "No" (as in
"number"). You should check for the existence of that field - if it
isn't there, there won't be any group members either.
One example of this is the Legs group in NewOrderMultileg. This group
begins with a "NoLegs" field (defined as an IntField) that contains =
the
number of legs.=20
In C++ -=20
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
message.getField(noLegs);
for (int i=3D0; i<noLegs.getValue(); i++)
...
=20
In C#, we'd use the built-in field getters -
if (message.isSetNoLegs())
{
for (int i=3D0; i<message.getNoLegs().getValue(); i++)
...
Second, you need to create a group object of the type you wish to
extract. In the C++ and .NET versions, these are defined as =
sub-classes
of the parent message type with a class name that is the same as the
field name of the enumeration field mentioned above.=20
In C++ -
FIX::NewOrderMultileg::NoLegs leg;
In C# -
QuickFix43.NewOrderMultileg.NoLegs leg =3D new
QuickFix43.NewOrderMultileg.NoLegs();
Third, you use the "getGroup" method of the Message object to retrieve
a single element of the repeating group list. These elements are
indexed starting at "1", not "0".
In C++ -
message.getGroup(1, leg);
In C# -
message.getGroup(1, leg);
Full example, C++:
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
FIX::NewOrderMultileg::NoLegs leg;
FIX::LegSide legSide;
=20
message.getField(noLegs);
for (int i=3D0; i<noLegs.getValue(); i++)
{
message.getGroup(i+1, leg);
leg.get(legSide);
if (legSide.getValue() =3D=3D FIX::Side_BUY)
...=20
}
}
Full example, C#:
if (message.isSetNoLegs())
{
QuickFix43.NewOrderMultileg.NoLegs leg =3D new
QuickFix43.NewOrderMultileg.NoLegs();
for (int i=3D0; i<message.getNoLegs().getValue(); i++)
{
message.getGroup(i+1, leg);
if (leg.getLegSide().getValue() =3D=3D QuickFix.Side.BUY)
...=20
}
}
Hope this helps.
- Brian Erst
Thynk Software, Inc.
=20
--- Alvin Wang <AW...@FF...> wrote:
> public native Group getGroup(int int0, Group group) throws
> FieldNotFound;
>=20
> Hi, Can anyone tell me how to use the getGroup method in Message
> class?=20
> What are the 2 parameters? what does it return?=20
>=20
> BTW, quickfix is wonderful. Hopefully its document is as good as it.
>=20
> Thanks
> Alvin
>=20
> =
> =
> =
> =
> =20
>
**********************************************************************
> This e-mail message is intended solely for the use of the addressee.
> The message may contain information that is privileged and
> confidential. =20
> Disclosure to anyone other than the intended recipient is
> prohibited. If you are not the intended recipient, please do not
> disseminate, distribute or copy this communication, by e-mail or
> otherwise. Instead, please notify us immediately by return e-mail
> (including the original message with your reply) and then delete
> and discard all copies of the message. We have taken precautions to
> minimize the risk of transmitting software viruses but nevertheless
> advise you to carry out your own virus checks on any attachment to
> this message. We accept no liability for any loss or damage caused
> by software viruses.
>
**********************************************************************
>=20
>=20
|
|
From: Alvin W. <AW...@FF...> - 2005-10-10 21:06:59
|
OK, now I am doing something like this:
Group group = new Group(NoAllocs.FIELD,
AllocAccount.FIELD);
allocationInstruction.getGroup(1, group);
group.setDouble(9047, 100);//add a custom tag 9047 to the group
//Then send out allocationInstruction
However, tag 9047 will not show up in the Allocation Message I created.
Why?
Also, I wrote my own removeGroup mehtod as below:
public static void removeGroups(Message message, int noField, int
delimField)
throws Exception
{
for (int i = 1; i <= message.getInt(noField); i++)
{
Group group = new Group(noField, delimField);
message.getGroup(i, group);
for (Iterator it = group.iterator(); it.hasNext();)
{
Field field = (Field)it.next();
group.removeField(field.getField());
}
}
message.removeField(noField);
}
But after running it, I found the group is still there. Can anyone explain
for me what is going on here? It seems that the group in message.getGroup(i, group) method is a "cloned" copy of the original. So changing it will not change
the original. So how to change the original? What about the returned value
of message.getGroup method?
Thanks a lot!
Also Brian, thanks so much for your help.
Alvin
Brian Erst <azz...@ya...>
10/10/2005 02:47 PM
Please respond to azzipsderf-quickfix
To: Alvin Wang <AW...@FF...>, qui...@li...,
qui...@li...,
azz...@ya...
cc: Caleb Epstein <cal...@gm...>, Oren Miller
<or...@qu...>
bcc:
Subject: Re: [Quickfix-developers] getGroup
Alvin -
I don't know the Java side very well (I've coded to the C++ and .NET
versions), but the getGroup function is pretty simple.
First, you need to know the name of the field that acts as the group's
enumerator/designator. These almost always start with "No" (as in
"number"). You should check for the existence of that field - if it
isn't there, there won't be any group members either.
One example of this is the Legs group in NewOrderMultileg. This group
begins with a "NoLegs" field (defined as an IntField) that contains the
number of legs.
In C++ -
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
...
In C#, we'd use the built-in field getters -
if (message.isSetNoLegs())
{
for (int i=0; i<message.getNoLegs().getValue(); i++)
...
Second, you need to create a group object of the type you wish to
extract. In the C++ and .NET versions, these are defined as sub-classes
of the parent message type with a class name that is the same as the
field name of the enumeration field mentioned above.
In C++ -
FIX::NewOrderMultileg::NoLegs leg;
In C# -
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
Third, you use the "getGroup" method of the Message object to retrieve
a single element of the repeating group list. These elements are
indexed starting at "1", not "0".
In C++ -
message.getGroup(1, leg);
In C# -
message.getGroup(1, leg);
Full example, C++:
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
FIX::NewOrderMultileg::NoLegs leg;
FIX::LegSide legSide;
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
{
message.getGroup(i+1, leg);
leg.get(legSide);
if (legSide.getValue() == FIX::Side_BUY)
...
}
}
Full example, C#:
if (message.isSetNoLegs())
{
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
for (int i=0; i<message.getNoLegs().getValue(); i++)
{
message.getGroup(i+1, leg);
if (leg.getLegSide().getValue() == QuickFix.Side.BUY)
...
}
}
Hope this helps.
- Brian Erst
Thynk Software, Inc.
--- Alvin Wang <AW...@FF...> wrote:
> public native Group getGroup(int int0, Group group) throws
> FieldNotFound;
>
> Hi, Can anyone tell me how to use the getGroup method in Message
> class?
> What are the 2 parameters? what does it return?
>
> BTW, quickfix is wonderful. Hopefully its document is as good as it.
>
> Thanks
> Alvin
>
>
>
>
>
>
>
**********************************************************************
> This e-mail message is intended solely for the use of the addressee.
> The message may contain information that is privileged and
> confidential.
> Disclosure to anyone other than the intended recipient is
> prohibited. If you are not the intended recipient, please do not
> disseminate, distribute or copy this communication, by e-mail or
> otherwise. Instead, please notify us immediately by return e-mail
> (including the original message with your reply) and then delete
> and discard all copies of the message. We have taken precautions to
> minimize the risk of transmitting software viruses but nevertheless
> advise you to carry out your own virus checks on any attachment to
> this message. We accept no liability for any loss or damage caused
> by software viruses.
>
**********************************************************************
>
>
|
|
From: Brian E. <azz...@ya...> - 2005-10-10 18:47:08
|
Alvin -
I don't know the Java side very well (I've coded to the C++ and .NET
versions), but the getGroup function is pretty simple.
First, you need to know the name of the field that acts as the group's
enumerator/designator. These almost always start with "No" (as in
"number"). You should check for the existence of that field - if it
isn't there, there won't be any group members either.
One example of this is the Legs group in NewOrderMultileg. This group
begins with a "NoLegs" field (defined as an IntField) that contains the
number of legs.
In C++ -
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
...
In C#, we'd use the built-in field getters -
if (message.isSetNoLegs())
{
for (int i=0; i<message.getNoLegs().getValue(); i++)
...
Second, you need to create a group object of the type you wish to
extract. In the C++ and .NET versions, these are defined as sub-classes
of the parent message type with a class name that is the same as the
field name of the enumeration field mentioned above.
In C++ -
FIX::NewOrderMultileg::NoLegs leg;
In C# -
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
Third, you use the "getGroup" method of the Message object to retrieve
a single element of the repeating group list. These elements are
indexed starting at "1", not "0".
In C++ -
message.getGroup(1, leg);
In C# -
message.getGroup(1, leg);
Full example, C++:
FIX::NoLegs noLegs;
if (message.isSetField(noLegs))
{
FIX::NewOrderMultileg::NoLegs leg;
FIX::LegSide legSide;
message.getField(noLegs);
for (int i=0; i<noLegs.getValue(); i++)
{
message.getGroup(i+1, leg);
leg.get(legSide);
if (legSide.getValue() == FIX::Side_BUY)
...
}
}
Full example, C#:
if (message.isSetNoLegs())
{
QuickFix43.NewOrderMultileg.NoLegs leg = new
QuickFix43.NewOrderMultileg.NoLegs();
for (int i=0; i<message.getNoLegs().getValue(); i++)
{
message.getGroup(i+1, leg);
if (leg.getLegSide().getValue() == QuickFix.Side.BUY)
...
}
}
Hope this helps.
- Brian Erst
Thynk Software, Inc.
--- Alvin Wang <AW...@FF...> wrote:
> public native Group getGroup(int int0, Group group) throws
> FieldNotFound;
>
> Hi, Can anyone tell me how to use the getGroup method in Message
> class?
> What are the 2 parameters? what does it return?
>
> BTW, quickfix is wonderful. Hopefully its document is as good as it.
>
> Thanks
> Alvin
>
>
>
>
>
>
>
**********************************************************************
> This e-mail message is intended solely for the use of the addressee.
> The message may contain information that is privileged and
> confidential.
> Disclosure to anyone other than the intended recipient is
> prohibited. If you are not the intended recipient, please do not
> disseminate, distribute or copy this communication, by e-mail or
> otherwise. Instead, please notify us immediately by return e-mail
> (including the original message with your reply) and then delete
> and discard all copies of the message. We have taken precautions to
> minimize the risk of transmitting software viruses but nevertheless
> advise you to carry out your own virus checks on any attachment to
> this message. We accept no liability for any loss or damage caused
> by software viruses.
>
**********************************************************************
>
>
|
|
From: Alvin W. <AW...@FF...> - 2005-10-10 18:10:54
|
public native Group getGroup(int int0, Group group) throws FieldNotFound;
Hi, Can anyone tell me how to use the getGroup method in Message class?
What are the 2 parameters? what does it return?
BTW, quickfix is wonderful. Hopefully its document is as good as it.
Thanks
Alvin
**********************************************************************
This e-mail message is intended solely for the use of the addressee.
The message may contain information that is privileged and confidential.
Disclosure to anyone other than the intended recipient is
prohibited. If you are not the intended recipient, please do not
disseminate, distribute or copy this communication, by e-mail or
otherwise. Instead, please notify us immediately by return e-mail
(including the original message with your reply) and then delete
and discard all copies of the message. We have taken precautions to
minimize the risk of transmitting software viruses but nevertheless
advise you to carry out your own virus checks on any attachment to
this message. We accept no liability for any loss or damage caused
by software viruses.
**********************************************************************
|
|
From: Brian E. <azz...@ya...> - 2005-10-10 15:39:13
|
The following patches to the 1.10.2 codebase should, in theory, add the
ability to remove groups from a QuickFIX message.
Add to FieldMap.h, line 133:
/// Remove a group. If group is not present, this is a no-op.
void removeGroup( int field );
Add to FieldMap.cpp, line 87:
void FieldMap::removeGroup( int field )
{ QF_STACK_PUSH(FieldMap::removeGroup)
Groups::iterator i = m_groups.find( field );
if ( i != m_groups.end() )
{
m_groups.erase( i );
removeField( field );
}
QF_STACK_POP
}
Add to Message.h, line 101:
void removeGroup( Group& group )
{ FieldMap::removeGroup( group.field() ); }
I have not tested these patches, so use at your own risk.
- Brian Erst
Thynk Software, Inc.
--- Caleb Epstein <cal...@gm...> wrote:
> On 10/10/05, Alvin Wang <AW...@ff...> wrote:
> >
> >
> > HI, how can I remove a group from a FIX message (java API)? I can
> only
> > find removeField(int) method.
>
>
> There don't appear to be any methods provided in the C++ API to do
> this, so
> I presume they are missing from the Java API as well. Perhaps this is
> worthy
> of a bug report.
>
> --
> Caleb Epstein
> caleb dot epstein at gmail dot com
>
|
|
From: Caleb E. <cal...@gm...> - 2005-10-10 15:18:25
|
On 10/10/05, Alvin Wang <AW...@ff...> wrote: > > > HI, how can I remove a group from a FIX message (java API)? I can only > find removeField(int) method. There don't appear to be any methods provided in the C++ API to do this, so I presume they are missing from the Java API as well. Perhaps this is worth= y of a bug report. -- Caleb Epstein caleb dot epstein at gmail dot com |
|
From: Alvin W. <AW...@FF...> - 2005-10-10 14:42:05
|
HI, how can I remove a group from a FIX message (java API)? I can only
find removeField(int) method.
thanks
Alvin
**********************************************************************
This e-mail message is intended solely for the use of the addressee.
The message may contain information that is privileged and confidential.
Disclosure to anyone other than the intended recipient is
prohibited. If you are not the intended recipient, please do not
disseminate, distribute or copy this communication, by e-mail or
otherwise. Instead, please notify us immediately by return e-mail
(including the original message with your reply) and then delete
and discard all copies of the message. We have taken precautions to
minimize the risk of transmitting software viruses but nevertheless
advise you to carry out your own virus checks on any attachment to
this message. We accept no liability for any loss or damage caused
by software viruses.
**********************************************************************
|
|
From: udai b. <pv...@ya...> - 2005-10-10 13:39:37
|
Thank you Alexey. I took the same approach as yours. Thanks for the tip! regards, udai. --- Alexey Zubko <ale...@gm...> wrote: > Hi, > > I have a similar one (Win32 C++). > One application, two threads. > One thread runs QF server to accept clients > (ThreadedSocketAcceptor), > another thread is a QF client to connect to exchange > (SocketInitiator). > Two configuration files - for the acceptor and for > the initiator. > It works fine. There is an issue when I close the > application, but > overall it's good. > Be careful - sessions list is static :-( . The rest > is really trivial. > > -- > Regards, > Alexey Zubko > > __________________________________ Yahoo! Music Unlimited Access over 1 million songs. Try it free. http://music.yahoo.com/unlimited/ |
|
From: Alexey Z. <ale...@gm...> - 2005-10-07 19:53:41
|
Oren, Unfortunately I have no numbers and in our current computer configuration it's not possible to measure correctly. We just noted that file access to the computer became slower when we started to use more QF applications. I wrote a small application saving messages (FileStore::set() calls) with and without flushing. There was no big difference when you run one process, but when I ran 10 ones the situation has changed. And as bigger the output files were the bigger were the difference. I don't know a solution for a hardware crash. If you got it I don't believe you can restart you application soon. At least my computer is protected by UPS, so I have a chance to stop my application before the reboot. Ok. I'm going to try this change for non-critical logs tomorrow. Will see if it really helps. Thanks for your reply. Oren Miller wrote: > You are not going to get better performace out of a database than the > flat file logs. With a database you still need to do disk writes (and > the database will definately err on the side of caution and make sure > the buffer gets flushed with each transaction). You also have socket > communication plus managing indexes on top of it. Assuming your > database is on another machine, there is also network communication > overhead. > > The performance test runner (pt.exe in the bin directory), indicates I > can store about 125,000 basic NewOrderSingle messages into a file on > my laptop. Surely not a great harddrive. This seems to scale up > pretty well (I got the pretty eqivalent numbers storing 5,000, 50,000, > and 500,000 messages into a single file). I doubt you will get nearly > as good performance out of a relational database on any hardware. > > Caleb has contributed an implementation for BerkelyDB (which has > unfortunately not been integrated into a release yet), but even that > will be slightly slower than the file logger. > > If you are going to rely on the logs to analyze problems that result > in a crash of the application, you will probably find that disabling > the flush will essentially make the logs useless as it will be very > likely that you are missing the most recent data, particularly > the message that caused the crash. > > You mentioned that the I/O is really heavy, but you have not mentioned > how this is affecting your latency. Have you measured this? > > --oren > > ----- Original Message ----- > > *From:* Alexey Zubko <mailto:ale...@gm...> > *To:* Caleb Epstein <mailto:cal...@gm...> > *Cc:* qui...@li... > <mailto:qui...@li...> > *Sent:* Friday, October 07, 2005 1:20 PM > *Subject:* Re: [Quickfix-developers] FileLog, FileStore flush > > Caleb, > > Incoming and outgoing logs are important to control the main > application. > Plus if something unusual happened how it's possible to analyze > the situation without these logs? > I was thinking of using a database to store logs because it might > be faster and the disk is not as fragmented as when you write into > a file. > > It would be nice to hear some feedbacks from guys using databases. > Are there any problems? > We have some problems of using MS SQL (not with QF) - particularly > it's fast growing log file. > I'm not sure that MySQL will be much better. > > > > Caleb Epstein wrote: > >> On 10/7/05, *Alexey Zubko* <ale...@gm... >> <mailto:ale...@gm...>> wrote: >> >> Unfortunately speeding is the highest priority for us and >> hardware upgrade may not to help much. >> >> I added disabling of the flushing for the FileLog class >> because these files are the biggest. >> If your are interesting in these changes I'll send them. >> >> >> If you're concerned about speed and the size of these files, >> don't use any log at all (you can use the ScreenLog or derive >> your own LogFactory to do this). Only the MessageStore is >> required for operation. The incoming/outgoing logs are only for >> informational purposes and aren't used by QuickFIX once they are >> written. >> >> -- >> Caleb Epstein >> caleb dot epstein at gmail dot com > > >-- >Regards, > Alexey Zubko > > -- Regards, Alexey Zubko |
|
From: Shankar K. <skr...@jw...> - 2005-10-07 19:35:16
|
Thanks for your time. Thanks fixed my problem. I had a question what does it mean to send and Instance of the QuickFix.Application class in the SocketInitiator() To me a socket connection just establishes a connection to another socket, why is an instance of QuickFix.Application being sent, I looked up the fix protocol docs, found no mention there. Thanks _____ From: Oren Miller [mailto:or...@qu...] Sent: Friday, October 07, 2005 2:56 PM To: Shankar Krishnan; qui...@li... Subject: Re: [Quickfix-developers] Error on running app It's not complaining about your configuration file, it is complaining about your xml data dictionary. --oren ----- Original Message ----- From: Shankar Krishnan <mailto:skr...@jw...> To: Shankar Krishnan <mailto:skr...@jw...> ; qui...@li... <mailto:qui...@li...> Sent: Friday, October 07, 2005 1:51 PM Subject: RE: [Quickfix-developers] Error on running app Apologies for the earlier email, Tracked down the real problem to ConfigError: Could not parse data dictionary file at SocketInitiator, looking at source code points to the settings file, The file is just key/value pairs, I am not sure what is incorrect, are there any strict formatting rules. QuickFix.ConfigError: Configuration failed: FIX40.xml: Could not pa ionary file at QuickFix.SocketInitiator..ctor(Application application, Messa y factory, SessionSettings settings, MessageFactory messageFactory) uickfix\source\quickfix\src\.net\socketinitiator.h:line 55 at BarCapFill.Class1.Main(String[] args) in c:\documents and set a\my documents\visual studio projects\barcapfill\class1.cs:line 31 Thanks _____ From: Shankar Krishnan [mailto:skr...@jw...] Sent: Friday, October 07, 2005 2:20 PM To: qui...@li... Subject: [Quickfix-developers] Error on running app I have set the configuration files as needed, I get the following exception, any help appreciated. |