quickfix-developers Mailing List for QuickFIX (Page 193)
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: Reiner N. <rei...@ma...> - 2005-07-15 11:04:26
|
> Hi, > > to connect to EMX, I have to use some custom messages and some extra custom > tags in message header and trailer. > The field order must follow an explicitly defined order different from the > default order by QuickFix. > > How can I specify this field order? > Is this managed using the XML specification files? > Also to be mentioned: I am using the Java layer of QuickFix (but not the pure Java version). > Thanks > Reiner Nix > > > ------------------------------------------------------- > SF.Net email is sponsored by: Discover Easy Linux Migration Strategies > from IBM. Find simple to follow Roadmaps, straightforward articles, > informative Webcasts and more! Get everything you need to get up to > speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers -- Reiner B. Nix IT-Architect rei...@ma... http://www.macd.com Tel.: +49 (0)241 44597-23 Macdonald Associates GmbH Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen |
|
From: Reiner N. <rei...@ma...> - 2005-07-15 10:31:12
|
Hi, to connect to EMX, I have to use some custom messages and some extra custom tags in message header and trailer. The field order must follow an explicitly defined order different from the default order by QuickFix. How can I specify this field order? Is this managed using the XML specification files? Thanks Reiner Nix |
|
From: Michael L. <mly...@gm...> - 2005-07-14 12:22:30
|
When trying to compile for GCC 4.0.0 on redhat FC4 i received the
error gcc error
explicit specialization of <function> must be introduced by 'template <>'
for all onRun and setString commands using typedef'ed classes
the fix is putting a "template<>" before each onRun and setString
command that uses a typedef'ed class in the header file in the
MessagesTestCase.cpp file.
for instance
template<>
void LogonParseTestCase::setString::onRun(Logon& object)
{
//code
}
Regards,
--=20
Michael Lyszczek
|
|
From: Caleb E. <cal...@gm...> - 2005-07-13 23:11:29
|
Ok, as threatened, here is the patch.
This patch replaces the underlying implementation of the UtcTimeStamp,
UtcDateOnly and UtcTimeOnly classes with a new class called DateTime.
The impetus for this is to fix potential daylight savings time bugs in
the previous implementation and reduce the dependence on the system
calls mktime() and localtime(), which are real performance pigs on
some platforms (e.g. all versions of SunOS and Solaris prior to
Solaris 9).
The new DateTime class uses two integers to represent a point in time.
One stores a Julian day number and the other stores a number of
milliseconds since midnight. This implementation uses far less memory
than its predecessor (8 bytes instead of 44 for struct tm on Linux),
allows the use of a much wider range of dates (no 2038 problem) and is
faster to boot.
I have tested this patch on Linux only so far, but it passes all user-
and acceptance-tests. I don't have MySQL available to test the
changes to the MySQLStore and MySQLLog classes.
Detailed changes:
Field.h: make getValue and type conversion operators return non-const
values. Returning const temporaries makes no sense.
FieldConvertors.h: use compound getYMD/getHMS to extract values. Use
public methods to initialize Utc{TimeStamp,DateOnly,TimeOnly}, not
static_cast. Don't create default-constructed variables (which hit
the system clock).
FieldTypes.cpp: removed UtcTimeStamp::setTime, ::operator+=3D. Added
DateTime::now here. Because this code is compiled into the library,
HAVE_FTIME no longer needs to be defined to create timestamps with
millisecond resolution (this closes several bugs in the bug tracker).=20
We try to use gettimeofday if HAVE_FTIME is not defined (we should
probably check for gettimeofday first - ftime is deprecated).
FieldTypes.h: added DateTime class. Modified Utc* classes to inherit
from it. Dropped namespace-global constant UTC_DAY. Use enum values
from DateTime instead.
MySQLLog.cpp, MySQLStore.cpp: use public interface to UtcTimeStamp,
not casting. UNTESTED.
tests:
FieldConvertorsTestCase.cpp: use aggregate setYMD/setHMS methods.
getYearDay went away (this is the only place it was ever used)
MessagesTestCase.cpp: 1900-01-00 is not a valid date. Use 1900-01-01.
SessionTestCase.cpp, UtcTimeStampTestCase.cpp: Use DateTime::SECONDS_PER_DA=
Y
--=20
Caleb Epstein
caleb dot epstein at gmail dot com
|
|
From: Alexey Z. <ale...@in...> - 2005-07-13 15:00:46
|
Hi, Regarding QF performance and running several engines in one process. QF performance is pretty good, significantly faster than another proprietary library we use (FixGateWay). Of course, there are things to improve, but in general it looks really good. You can improve your performance also using a different STL port I guess. I have an application (VC6) running an acceptor and an initiator in the same process and it works fine. They are running on separate threads plus I use ThreadedSocketInitiator and ThreadedSocketAcceptor classes. I've seen no problems yet. Regards, Alexey Zubko Infinium Capital Corporation (416) 360-7000 ext. 305 |
|
From: Steve B. <st...@te...> - 2005-07-12 22:50:10
|
> You should be able to run two acceptors by configuring two separate > sessions in the config file. Both acceptors will be sharing the same > "engine". (I haven't tried this but in theory...) It looks like the acceptor reads its port number from the default section of the configuration file. If so, you'd be able to have any number of sessions defined for that acceptor as long as they connect to the same accept port. > What I managed to do was get two complete copies of the quickfix library - > - one statically linked into a DLL and the other statically linked into > the EXE. If you look at Session.h, you'll see lots of static data items. > As one example, two session registries is **NOT** better than one. > > ((I call this the Doubleton pattern -- maybe I'll publish a paper <grin>)) I can see how that might be a problem in C++. :-) Sometimes that's done intentionally in Java programs. For example, applications can be isolated from each other (including "singletons") by using separate class loaders for each application. Steve |
|
From: Dale W. <wil...@oc...> - 2005-07-12 22:26:16
|
Steve Bate wrote: >What happens when you run multiple QF engines in a process? I can >see where someone might want to do that if they want to accept >connections on multiple ports (in the same process) or have both >initiators and acceptors running in the same process (for example, >third party routing hub). > > You should be able to run two acceptors by configuring two separate sessions in the config file. Both acceptors will be sharing the same "engine". (I haven't tried this but in theory...) What I managed to do was get two complete copies of the quickfix library -- one statically linked into a DLL and the other statically linked into the EXE. If you look at Session.h, you'll see lots of static data items. As one example, two session registries is **NOT** better than one. ((I call this the Doubleton pattern -- maybe I'll publish a paper <grin>)) Dale -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Steve B. <st...@te...> - 2005-07-12 21:44:38
|
Hi Dale, > You can't run two quickfix engines in one process[1], but I'm not sure > that makes much difference because a single engine can handle an > aribtrary number of connections. What happens when you run multiple QF engines in a process? I can see where someone might want to do that if they want to accept connections on multiple ports (in the same process) or have both initiators and acceptors running in the same process (for example, third party routing hub). Steve |
|
From: Dale W. <wil...@oc...> - 2005-07-12 20:36:34
|
Barry Marks wrote: >Since the QuickFIX Engine is capable of multithreaded operation, I >would expect dual CPUs to provide increased performance. Even >without multithreaded operation, it seems that one should be able to >run 2 instances of the engine, one on each CPU, to get better >performance. > > Hi Barry, I didn't see any response to this message, so I'll give it a shot. The multithreading in quickfix is basically thread-per-connection. Thus the amount of paralellism is limited to the number of connections (plus 1 for the main thread). This is unlikely to have much impact on overall performance (throughput) bit it may help with response time. For any significant real-world system I would expect he performance to be dominated by application level code, not by the quickfix engine itself. If you have performance conceerns, I suggest you start by profiling your application so you don't end up optimizing in all the wrong places. You can't run two quickfix engines in one process[1], but I'm not sure that makes much difference because a single engine can handle an aribtrary number of connections. Dale [1] At least you aren't supposed to be able to run two engines in one process. I did manage to do that once. The results were not pretty. -- ----------------------------------------------------- Dale Wilson, Senior Software Engineer Object Computing, Inc. (OCI) http://www.ociweb.com/ http://www.theaceorb.com/ ---------------------------------------------------- |
|
From: Caleb E. <cal...@gm...> - 2005-07-12 19:45:42
|
On 7/11/05, Caleb Epstein <cal...@gm...> wrote: > // mktime converts a struct tm (IN LOCAL TIME) to a time_t > time_t t =3D mktime( (tm*)this ); > // Converts a time_t back to a struct tm. Presumably this is done > // for normalization so that a user specifying a date of 31-02-2005 > // will end up with a more correct 02-03-2005? > *static_cast<tm*>(this) =3D time_localtime( &t ); [...] > My impression is that the mktime and localtime calls (the latter of > which is redundant - POSIX mktime modifies the passed-in struct tm in > place so you don't need to call localtime at all) are used only to > normalize values that might be specified incorrectly by the user (e.g. > February 30th or the like) Well, my impression was wrong :-) There is code in SessionTime which uses the tm_wday (via getWeekDay) so the call to mktime is necessary to populate this field, otherwise a couple of tests in SessionTimeTest.cpp suite fail. > But, because of their localtime semantics and the way that QuickFIX > populates the structures with GMT values, they actually cause breakage > in certain edge situations. These functions are also performance pigs > on some platforms (notably Solaris before Solaris 9) where I've seen > QuickFIX spend ~50% of its runtime in mktime calls. >=20 > For these reasons, I'm going to submit a patch that drops the > mktime/localtime usage (and some unncessary setCurrent calls) from the > UtcTimeStamp class which should end up giving a small performance > boost. Can anyone see a flaw in this analysis? My approach now is to completely replace the underpinnings of UtcTimeStamp and the related classes so they don't use "struct tm" at all, but instead store a double representing the Julian day number and the fractional portion of a day. This eliminates the need for a lot of the time-related system calls and static_cast<tm*> weirdness in many places. I'll send along the patch once I can get the code to stop failing the bulk of the tests :-) --=20 Caleb Epstein caleb dot epstein at gmail dot com |
|
From: Oren M. <or...@qu...> - 2005-07-12 16:19:45
|
I would be interested in seeing the patch. I've never been comfortable with the current implementation. --oren ----- Original Message ----- From: "Caleb Epstein" <cal...@gm...> To: <qui...@li...> Sent: Monday, July 11, 2005 5:38 PM Subject: [Quickfix-developers] UtcTimeStamp implementation bugs QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ QuickFIX Support: http://www.quickfixengine.org/services.html Internally the FIX::UtcTimeStamp class is a "struct tm", a structure that is generally intended to store times specified in your local timezone. By this I mean that if the structure has tm_hour = 10, thats 10 AM in your local timezone, not in GMT. Because FIX uses UTC time for everything, QuickFIX populates the members of these structure with their UTC values, so tm_hour = 10 means 10 AM in UTC. This is all well and good, but will break on daylight savings time boundaries when coded as it is below (see my comments): UtcTimeStamp( int hour, int minute, int second, int date, int month, int year ) { // This is redundant and should be removed for efficiency setCurrent(); setHour( hour ); setMinute( minute ); setSecond( second ); setMillisecond( 0 ); setDate( date ); setMonth( month ); setYear( year ); // mktime converts a struct tm (IN LOCAL TIME) to a time_t time_t t = mktime( (tm*)this ); // Converts a time_t back to a struct tm. Presumably this is done // for normalization so that a user specifying a date of 31-02-2005 // will end up with a more correct 02-03-2005? *static_cast<tm*>(this) = time_localtime( &t ); tm_isdst = -1; } Where this code breaks is when you pass in a time that falls precisely on a daylight savings time change-over. For example, if you take the *UTC* time 2005-04-03 2:00 AM and run it through this transformation, here's what you get: 1. Intiialize struct tm: tm_year = 105, tm_mon = 3, tm_mday = 3, tm_hour = 2, tm_min = 0, tm_sec = 0, tm_isdst = -1 2. Call mktime, yielding result = 1112511600 (given my local US/Eastern time) 3. Call localtime on this value, yielding: tm_year = 105, tm_mon = 3, tm_mday = 3, tm_hour = *3*, tm_min = 0, tm_sec = 0, tm_isdst = 1 So we've actually turned 2 AM into 3 AM and we can't reverse this. My impression is that the mktime and localtime calls (the latter of which is redundant - POSIX mktime modifies the passed-in struct tm in place so you don't need to call localtime at all) are used only to normalize values that might be specified incorrectly by the user (e.g. February 30th or the like) But, because of their localtime semantics and the way that QuickFIX populates the structures with GMT values, they actually cause breakage in certain edge situations. These functions are also performance pigs on some platforms (notably Solaris before Solaris 9) where I've seen QuickFIX spend ~50% of its runtime in mktime calls. For these reasons, I'm going to submit a patch that drops the mktime/localtime usage (and some unncessary setCurrent calls) from the UtcTimeStamp class which should end up giving a small performance boost. Can anyone see a flaw in this analysis? -- Caleb Epstein caleb dot epstein at gmail dot com ------------------------------------------------------- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar _______________________________________________ Quickfix-developers mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfix-developers |
|
From: Oren M. <or...@qu...> - 2005-07-12 16:16:59
|
It looks like FIX43.xml and FIX44.xml do have them, so I don't see a problem with adding them to the earlier versions. You can however always get those names from the Message element regardless. --oren ----- Original Message ----- From: "Steve Bate" <st...@te...> To: <qui...@li...> Sent: Friday, July 08, 2005 11:26 AM Subject: [Quickfix-developers] MsgType field values in DD XML? > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ > QuickFIX Support: http://www.quickfixengine.org/services.html > > Hi, > > Is it intentional that the MsgType field doesn't > have field values specified in the DD XML? I'm working on a > tool where I'd like to display user-friendly names for the > MsgType as I noticed there's no field values for that field. > > Steve > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by the 'Do More With Dual!' webinar > happening > July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual > core and dual graphics technology at this free one hour event hosted by > HP, > AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers > |
|
From: Caleb E. <cal...@gm...> - 2005-07-12 16:08:08
|
On 7/5/05, Scott D Johnson <sc...@co...> wrote: > For example:=20 > =20 > BeginString (8)=3DFIX.4.2=01BodyLength(9)=3D67=01MsgType(35)=3DA...=20 > =20 > Instead of:=20 > =20 > 8=3DFIX.4.2=019=3D67=0135=3DA...=20 You can implement your own logging class derived from FileLog that does this. You'd just need to override the onIncoming and onOutgoing methods to write the messages in this more verbose form. With a little help from DataDictionary it shouldn't be too hard. --=20 Caleb Epstein caleb dot epstein at gmail dot com |
|
From: Caleb E. <cal...@gm...> - 2005-07-11 22:38:41
|
Internally the FIX::UtcTimeStamp class is a "struct tm", a structure
that is generally intended to store times specified in your local
timezone. By this I mean that if the structure has tm_hour =3D 10,
thats 10 AM in your local timezone, not in GMT.
Because FIX uses UTC time for everything, QuickFIX populates the
members of these structure with their UTC values, so tm_hour =3D 10
means 10 AM in UTC. This is all well and good, but will break on
daylight savings time boundaries when coded as it is below (see my
comments):
UtcTimeStamp( int hour, int minute, int second,
int date, int month, int year )
{
// This is redundant and should be removed for efficiency
setCurrent(); =20
setHour( hour );
setMinute( minute );
setSecond( second );
setMillisecond( 0 );
setDate( date );
setMonth( month );
setYear( year );
// mktime converts a struct tm (IN LOCAL TIME) to a time_t
time_t t =3D mktime( (tm*)this );
// Converts a time_t back to a struct tm. Presumably this is done
// for normalization so that a user specifying a date of 31-02-2005
// will end up with a more correct 02-03-2005?=20
*static_cast<tm*>(this) =3D time_localtime( &t );
tm_isdst =3D -1;
}
Where this code breaks is when you pass in a time that falls precisely
on a daylight savings time change-over. For example, if you take the
*UTC* time 2005-04-03 2:00 AM and run it through this transformation,
here's what you get:
1. Intiialize struct tm: tm_year =3D 105, tm_mon =3D 3, tm_mday =3D 3,
tm_hour =3D 2, tm_min =3D 0, tm_sec =3D 0, tm_isdst =3D -1
2. Call mktime, yielding result =3D 1112511600 (given my local US/Eastern t=
ime)
3. Call localtime on this value, yielding: tm_year =3D 105, tm_mon =3D 3,
tm_mday =3D 3, tm_hour =3D *3*, tm_min =3D 0, tm_sec =3D 0, tm_isdst =3D 1
So we've actually turned 2 AM into 3 AM and we can't reverse this.
My impression is that the mktime and localtime calls (the latter of
which is redundant - POSIX mktime modifies the passed-in struct tm in
place so you don't need to call localtime at all) are used only to
normalize values that might be specified incorrectly by the user (e.g.
February 30th or the like)
But, because of their localtime semantics and the way that QuickFIX
populates the structures with GMT values, they actually cause breakage
in certain edge situations. These functions are also performance pigs
on some platforms (notably Solaris before Solaris 9) where I've seen
QuickFIX spend ~50% of its runtime in mktime calls.
For these reasons, I'm going to submit a patch that drops the
mktime/localtime usage (and some unncessary setCurrent calls) from the
UtcTimeStamp class which should end up giving a small performance
boost. Can anyone see a flaw in this analysis?
--=20
Caleb Epstein
caleb dot epstein at gmail dot com
|
|
From: Steve B. <st...@te...> - 2005-07-08 16:24:40
|
Hi, Is it intentional that the MsgType field doesn't have field values specified in the DD XML? I'm working on a tool where I'd like to display user-friendly names for the MsgType as I noticed there's no field values for that field. Steve |
|
From: Joerg T. <Joe...@ma...> - 2005-07-08 14:38:26
|
Steve Bate wrote: > I vote this approach as the default behavior, possibly with a > configuration option for the other behaviors. So do I. NoTagValue exception is the best way to handle. An optional parameter to the set() method sounds like a good idea. Cheers, Jörg >>-----Original Message----- >>From: qui...@li... [mailto:quickfix- >>dev...@li...] On Behalf Of Brian Erst >>Sent: Tuesday, July 05, 2005 9:46 AM >>To: Oren Miller; Alvin Wang >>Cc: qui...@li...; quickfix-developers- >>ad...@li... >>Subject: Re: [Quickfix-developers] Re: empty tag >> >>QuickFIX Documentation: >>http://www.quickfixengine.org/quickfix/doc/html/index.html >>QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ >>QuickFIX Support: http://www.quickfixengine.org/services.html >> >>Oren - >> >>I'd definitely go with the NoTagValue exception method rather than >>attempting to guess what the developer "really" wants. >> >>You have the removeField method for the case of needing to strip a >>field out of a message, so providing a backdoor way of doing that via >>adding a "blank" value is redundant. It also isn't obvious that "blank" >>= "delete". >> >>Considering how many FIX engines choke on a missing tag value, I think >>it's a good idea to default to not allowing it. I'd rather add a new >>method (addBlankField or some such) or optional parameter (e.g., >>message.set(value, allowBlanks)) on the off chance that some weird FIX >>implementation out there requires the existence of a tag even if there >>is no value for it than allow what is normally considered "bad" FIX to >>go out by default. >> >>- Brian Erst >>Thynk Software, Inc. >> >>--- Oren Miller <or...@qu...> wrote: >> >> >>>My concern is how to handle the situation where the field already >>>exists. If field 58 is set in the message, and I set it again with a >>>field that has an empty tag, what does this mean? Does it mean that >>>I ignore the new field and retain the old value? Or do I remove the >>>old field from the message completely. In which case setting a field >>>with an empty tag is the same behavior as calling removeField. Both >>>of these behaviors feel a little surprising to me. I'd be interested >>>in hearing other opinions on this. >>> >>>--oren >>> ----- Original Message ----- >>> From: Alvin Wang >>> To: Oren Miller >>> Cc: qui...@li... ; >>>qui...@li... >>> Sent: Tuesday, July 05, 2005 9:40 PM >>> Subject: [Quickfix-developers] Re: empty tag >>> >>> >>> >>> Oren, I can understand where you are coming from. It makes total >>>sense if QF throws NoTagValue exception in this case. However, I just >>>feel it will add workload to the developers and the production may >>>become disruptive. >>> >>> Thanks >>> Alvin >>> >>> >>> >>> >>> "Oren Miller" <or...@qu...> >>> 07/05/2005 10:00 AM >>> >>> >>> To: >>><qui...@li...>, >>><qui...@li...>, "Alvin Wang" >>><AW...@FF...> >>> cc: >>> bcc: >>> Subject: Re: empty tag >>> >>> >>> >>> We could, although more likely I would throw a NoTagValue >>>exception. I don't much like the idea of having QF silently ignoring >>>a field that the developer would be expecting to go out in the >>>message (much like I don't like the current behavior). I can imagine >>>the head scratching that would go on if they added a field and then >>>found it mysteriously absent in the logs. >>> >>> In either case if you have a field that might contain a blank >>>value, I would suggest checking it before adding it to a message. >>> >>> --oren >>> ----- Original Message ----- >>> From: Alvin Wang >>> To: qui...@li... ; >>>qui...@li... >>> Cc: Oren Miller >>> Sent: Tuesday, July 05, 2005 9:10 PM >>> Subject: empty tag >>> >>> >>> HI >>> >>> If I set a tag as below: >>> message.set(new Text(text)); >>> and if the variable "text" is null. QF will include an empty tag >>>58. As a result, some FIX engine (such as QF itself) on the other end >>>will reject the message. Can QF skip including empty tag? >>> >>> Thanks >>> Alvin -- Joerg Thoennes http://macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen |
|
From: Caleb E. <cal...@gm...> - 2005-07-08 13:52:46
|
On 7/6/05, Alvin Wang <AW...@ff...> wrote: > I use the same code base to deal with multiple counterpaties. We want to > demoralize some fields and save them in our tables for future use. That > means I only need to retrieve the values and save to DB. So sometimes I d= o > not really care if it is Null or not for most of tags=20 Then use the FieldMap::isSetField method to check if the field is populated before trying to fetch it. --=20 Caleb Epstein caleb dot epstein at gmail dot com |
|
From: Joerg T. <Joe...@ma...> - 2005-07-06 20:48:45
|
Alvin Wang wrote:
> When / how is a session disabled? Between endtime and starttime? Thanks
A session is disabled:
* between endtime and starttime
* if you call session.logout()
Maybe I miss something...
Cheers, Jörg
--
Joerg Thoennes
http://macd.com
Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH
Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen
|
|
From: Steve B. <st...@te...> - 2005-07-06 17:15:13
|
Hi Alvin,
We'll be announcing the first QuickFIX/J beta release soon. We have added
quite a bit
of content to the Javadoc documentation. We'll improve it over time, but
hopefully that
will help a little. The documentation should be accurate for the QuickFIX
JNI implementation
as well.
Regards,
Steve Bate
_____
From: qui...@li...
[mailto:qui...@li...] On Behalf Of Alvin
Wang
Sent: Thursday, July 07, 2005 12:48 AM
To: Oren Miller
Cc: qui...@li...;
qui...@li...
Subject: [Quickfix-developers] Re: session.sendToTarget method and
SessionNotFound exception
Thanks for the reply!
BTW, what is the usage of session.isEnabled()? Does IsLoggedOn==true imply
isEnabled==true?
It would be much nicer if we can have a better java doc...
Thanks
Alvin
Oren Miller <or...@qu...>
07/06/2005 12:20 PM
To: Alvin Wang <AW...@FF...>
cc: qui...@li...,
qui...@li...
bcc:
Subject: Re: session.sendToTarget method and SessionNotFound
exception
All implementations of sendToTarget are static (in C++ static methods
can look like members due to how they can be invoked), but rest
assured both signatures you are using are static. My guess is that
your session has a qualifier which you are not supplying. The
qualifier is not contained within the message, so if you are not
passing in a sessionId, you must specify the qualifier yourself.
receivedLogon indicates the session has received a logon message.
IsLoggedOn indicates that both receivedLogon and sentLogon are true.
Realistically these would be the same value.
--oren
On Jul 6, 2005, at 10:56 PM, Alvin Wang wrote:
>
> Hi
>
> I use Session.lookupSession(sessionId) method to get a Session
> object s, and s.isEnabled() && s.isLoggedOn() && s.receivedLogon()
> == true. However, when I try to send a message using
> s.sendToTarget(msg), I got a SessionNotFound exception. However, if
> I use the static method of Session.sendToTarget(msg, sessionId), I
> can send out the message. Do I miss anything here?
>
> BTW, what is the difference between the usages of isLoggedOn() and
> receivedLogon() in session object?
>
> 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-07-06 17:07:52
|
When / how is a session disabled? Between endtime and starttime? Thanks
Oren Miller <or...@qu...>
07/06/2005 12:53 PM
To: Alvin Wang <AW...@FF...>
cc: qui...@li...,
qui...@li...
bcc:
Subject: Re: [Quickfix-developers] Re: session.sendToTarget method and
SessionNotFound exception
Not necessarily. When is session is disabled, it will attempt to go
through the logout process. So there can be some lag time between
disabling a session and logging out.
--oren
On Jul 7, 2005, at 12:48 AM, Alvin Wang wrote:
>
> Thanks for the reply!
>
> BTW, what is the usage of session.isEnabled()? Does
> IsLoggedOn==true imply isEnabled==true?
>
> It would be much nicer if we can have a better java doc...
>
> Thanks
> Alvin
>
>
>
>
> Oren Miller <or...@qu...>
> 07/06/2005 12:20 PM
>
>
> To: Alvin Wang <AW...@FF...>
> cc: qui...@li...,
> qui...@li...
> bcc:
> Subject: Re: session.sendToTarget method and
> SessionNotFound exception
>
>
>
> All implementations of sendToTarget are static (in C++ static methods
> can look like members due to how they can be invoked), but rest
> assured both signatures you are using are static. My guess is that
> your session has a qualifier which you are not supplying. The
> qualifier is not contained within the message, so if you are not
> passing in a sessionId, you must specify the qualifier yourself.
>
> receivedLogon indicates the session has received a logon message.
> IsLoggedOn indicates that both receivedLogon and sentLogon are true.
> Realistically these would be the same value.
>
> --oren
>
> On Jul 6, 2005, at 10:56 PM, Alvin Wang wrote:
>
> >
> > Hi
> >
> > I use Session.lookupSession(sessionId) method to get a Session
> > object s, and s.isEnabled() && s.isLoggedOn() && s.receivedLogon()
> > == true. However, when I try to send a message using
> > s.sendToTarget(msg), I got a SessionNotFound exception. However, if
> > I use the static method of Session.sendToTarget(msg, sessionId), I
> > can send out the message. Do I miss anything here?
> >
> > BTW, what is the difference between the usages of isLoggedOn() and
> > receivedLogon() in session object?
> >
> > 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-07-06 16:53:16
|
Not necessarily. When is session is disabled, it will attempt to go through the logout process. So there can be some lag time between disabling a session and logging out. --oren On Jul 7, 2005, at 12:48 AM, Alvin Wang wrote: > > Thanks for the reply! > > BTW, what is the usage of session.isEnabled()? Does > IsLoggedOn==true imply isEnabled==true? > > It would be much nicer if we can have a better java doc... > > Thanks > Alvin > > > > > Oren Miller <or...@qu...> > 07/06/2005 12:20 PM > > > To: Alvin Wang <AW...@FF...> > cc: qui...@li..., > qui...@li... > bcc: > Subject: Re: session.sendToTarget method and > SessionNotFound exception > > > > All implementations of sendToTarget are static (in C++ static methods > can look like members due to how they can be invoked), but rest > assured both signatures you are using are static. My guess is that > your session has a qualifier which you are not supplying. The > qualifier is not contained within the message, so if you are not > passing in a sessionId, you must specify the qualifier yourself. > > receivedLogon indicates the session has received a logon message. > IsLoggedOn indicates that both receivedLogon and sentLogon are true. > Realistically these would be the same value. > > --oren > > On Jul 6, 2005, at 10:56 PM, Alvin Wang wrote: > > > > > Hi > > > > I use Session.lookupSession(sessionId) method to get a Session > > object s, and s.isEnabled() && s.isLoggedOn() && s.receivedLogon() > > == true. However, when I try to send a message using > > s.sendToTarget(msg), I got a SessionNotFound exception. However, if > > I use the static method of Session.sendToTarget(msg, sessionId), I > > can send out the message. Do I miss anything here? > > > > BTW, what is the difference between the usages of isLoggedOn() and > > receivedLogon() in session object? > > > > 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-07-06 16:38:51
|
Thanks for the reply!
BTW, what is the usage of session.isEnabled()? Does IsLoggedOn==true imply isEnabled==true?
It would be much nicer if we can have a better java doc...
Thanks
Alvin
Oren Miller <or...@qu...>
07/06/2005 12:20 PM
To: Alvin Wang <AW...@FF...>
cc: qui...@li...,
qui...@li...
bcc:
Subject: Re: session.sendToTarget method and SessionNotFound exception
All implementations of sendToTarget are static (in C++ static methods
can look like members due to how they can be invoked), but rest
assured both signatures you are using are static. My guess is that
your session has a qualifier which you are not supplying. The
qualifier is not contained within the message, so if you are not
passing in a sessionId, you must specify the qualifier yourself.
receivedLogon indicates the session has received a logon message.
IsLoggedOn indicates that both receivedLogon and sentLogon are true.
Realistically these would be the same value.
--oren
On Jul 6, 2005, at 10:56 PM, Alvin Wang wrote:
>
> Hi
>
> I use Session.lookupSession(sessionId) method to get a Session
> object s, and s.isEnabled() && s.isLoggedOn() && s.receivedLogon()
> == true. However, when I try to send a message using
> s.sendToTarget(msg), I got a SessionNotFound exception. However, if
> I use the static method of Session.sendToTarget(msg, sessionId), I
> can send out the message. Do I miss anything here?
>
> BTW, what is the difference between the usages of isLoggedOn() and
> receivedLogon() in session object?
>
> 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-07-06 16:20:55
|
All implementations of sendToTarget are static (in C++ static methods can look like members due to how they can be invoked), but rest assured both signatures you are using are static. My guess is that your session has a qualifier which you are not supplying. The qualifier is not contained within the message, so if you are not passing in a sessionId, you must specify the qualifier yourself. receivedLogon indicates the session has received a logon message. IsLoggedOn indicates that both receivedLogon and sentLogon are true. Realistically these would be the same value. --oren On Jul 6, 2005, at 10:56 PM, Alvin Wang wrote: > > Hi > > I use Session.lookupSession(sessionId) method to get a Session > object s, and s.isEnabled() && s.isLoggedOn() && s.receivedLogon() > == true. However, when I try to send a message using > s.sendToTarget(msg), I got a SessionNotFound exception. However, if > I use the static method of Session.sendToTarget(msg, sessionId), I > can send out the message. Do I miss anything here? > > BTW, what is the difference between the usages of isLoggedOn() and > receivedLogon() in session object? > > 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-07-06 14:51:36
|
Hi
I use Session.lookupSession(sessionId) method to get a Session object s,
and s.isEnabled() && s.isLoggedOn() && s.receivedLogon() == true. However,
when I try to send a message using
s.sendToTarget(msg), I got a SessionNotFound exception. However, if I use
the static method of Session.sendToTarget(msg, sessionId), I can send out
the message. Do I miss anything here?
BTW, what is the difference between the usages of isLoggedOn() and
receivedLogon() in session object?
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: Joerg T. <Joe...@ma...> - 2005-07-06 09:22:44
|
Hi all,
some suggestions to use the bug tracker:
1. For every issue (bug or enhancement) please file a bug report.
2. Initial status is Unconfirmed, New means that the bug has been accepted.
3. If you feel the bug is important, you could put Oren (or Steve Bates or me) on the
cc:. In this way they get immediately informed about any updates.
4. If you find some bug/feature which matches your issue, you may add yourself on the
cc: to get any updates. If you have patches or additional information, please add
to the bug.
5. If the bug is fixed, the status gets "Resolved". Maybe "To be closed in: " should be
set here.
6. The bug is finally "Closed" if it gets part of a release.
Oren, could we post bug reports automatically the lists, at least the newly added to limit
the volume? Alternatively, we could have a non-archived quickfix-bugtracker list.
Cheers, Jörg
--
Joerg Thoennes
http://macd.com
Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH
Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen
|