|
From: Robert B. <rbr...@me...> - 2007-04-30 18:16:51
|
I'm sorry for the deluge of emails today, I'm "THAT" guy today...I'm
deeply sorry...but I was doing a little more tinkering and I simply
added:
System.out.println("press <enter> to quit");
System.in.read();
initiator.stop();
to my TestInitiator class right after the initiator.start() and now all
library versions work. Why do I have to have a System.in listener in
order for the engine to initialize and function properly in any version
greater than 1.0.3? How can I avoid this?
Thanks for your patience...I'm sorry
Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S=
trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007
From: qui...@li...
[mailto:qui...@li...] On Behalf Of
Robert Brueckmann
Sent: Monday, April 30, 2007 1:53 PM
To: qui...@li...
Subject: [Quickfixj-users] upgrading engine
QuickFIX/J Documentation: http://www.quickfixj.org/documentation/
QuickFIX/J Support: http://www.quickfixj.org/support/
Here's my TestInitiator class:
----
package com.merlin.pb.fix;
import java.io.InputStream;
import quickfix.DefaultMessageFactory;
import quickfix.FileStoreFactory;
import quickfix.Initiator;
import quickfix.LogFactory;
import quickfix.MessageFactory;
import quickfix.MessageStoreFactory;
import quickfix.ScreenLogFactory;
import quickfix.SessionSettings;
import quickfix.ThreadedSocketInitiator;
public class TestInitiator {
private static Initiator initiator =3D null;
public static void main(String args[]) {
try {
System.out.println("running FIX engine...");
=09=20=20=20=20=09
InputStream inputStream =3D
=09
MerlinFIXInitiator.class.getResourceAsStream("initiator.cfg");
=09
SessionSettings settings =3D new
SessionSettings(inputStream);
TestApplication application =3D new TestApplication();
=20=20=20=20=20=20=20=20=20=20=20=20
MessageStoreFactory messageStoreFactory =3D new
FileStoreFactory(settings);
LogFactory logFactory =3D new ScreenLogFactory(true, true,
true, true);
=20=20=20=20=20=20=20=20=20=20=20=20
MessageFactory messageFactory =3D new DefaultMessageFactory();
=20=20=20=20=20=20=20=20=20=20=20=20
System.out.println("beginning initiator...");
initiator =3D new ThreadedSocketInitiator(application,
messageStoreFactory,
settings,
logFactory,
messageFactory);
initiator.start();
} catch(Exception e) {
e.printStackTrace(System.out);
}
}
}
----
Here's my TestApplication class:
----
package com.merlin.pb.fix;
import quickfix.Application;
import quickfix.DoNotSend;
import quickfix.FieldNotFound;
import quickfix.IncorrectDataFormat;
import quickfix.IncorrectTagValue;
import quickfix.Message;
import quickfix.MessageCracker;
import quickfix.RejectLogon;
import quickfix.SessionID;
import quickfix.UnsupportedMessageType;
public class TestApplication extends MessageCracker implements
Application {
public TestApplication() {}
/* (non-Javadoc)
* @see quickfix.Application#fromAdmin(quickfix.Message,
quickfix.SessionID)
*/
public void fromAdmin(Message arg0, SessionID arg1) throws
FieldNotFound,
IncorrectDataFormat, IncorrectTagValue,
RejectLogon {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#fromApp(quickfix.Message,
quickfix.SessionID)
*/
public void fromApp(Message arg0, SessionID arg1) throws
FieldNotFound,
IncorrectDataFormat, IncorrectTagValue,
UnsupportedMessageType {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#onCreate(quickfix.SessionID)
*/
public void onCreate(SessionID arg0) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#onLogon(quickfix.SessionID)
*/
public void onLogon(SessionID arg0) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#onLogout(quickfix.SessionID)
*/
public void onLogout(SessionID arg0) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#toAdmin(quickfix.Message,
quickfix.SessionID)
*/
public void toAdmin(Message arg0, SessionID arg1) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see quickfix.Application#toApp(quickfix.Message,
quickfix.SessionID)
*/
public void toApp(Message arg0, SessionID arg1) throws DoNotSend
{
// TODO Auto-generated method stub
}
}
----
You can clearly see NOTHING is going on...I'm not doing anything with
incoming messages...just testing connectivity pretty much:
Test results:
Using qfj-1.0.3/mina-core-0.9.3/slfj-jdk14-1.0.1:
running FIX engine...
beginning initiator...
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session
FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC)
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session:
FIX.4.2:MERL_DROP->NEOV)
Apr 30, 2007 1:44:59 PM quickfix.mina.initiator.InitiatorIoHandler
sessionCreated
INFO: MINA session created: /10.68.5.33:1550
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, outgoing>
(8=3DFIX.4.2=019=3D69=0135=3DA=0134=3D27=0149=3DMERL_DROP=0152=3D20070430-1=
7:44:59.905=0156=3DNEOV
=0198=3D0=01108=3D30=0110=3D067=01)
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Initiated logon
request)
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, incoming>
(8=3DFIX.4.2=019=3D0065=0135=3DA=0134=3D33=0149=3DNEOV=0156=3DMERL_DROP=015=
2=3D20070430-17:44:59=019
8=3D0=01108=3D30=0110=3D208=01)
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Received logon
response)
<20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, incoming>
(8=3DFIX.4.2=019=3D0053=0135=3D0=0134=3D34=0149=3DNEOV=0156=3DMERL_DROP=015=
2=3D20070430-17:45:29=011
0=3D162=01)
<20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, outgoing>
(8=3DFIX.4.2=019=3D57=0135=3D0=0134=3D28=0149=3DMERL_DROP=0152=3D20070430-1=
7:45:29.936=0156=3DNEOV
=0110=3D025=01)
...and so on and so forth...regular continuous and uninterrupted
heartbeats...
Using qfj-1.0.5/mina-core-1.0.0/slf-jdk14-1.0.1 OR using
qfj-1.0.1/mina-core-1.0.1/mina-sources-1.0.1/slf-api-1.3.0/slf-jdk14-1.3
.0:
running FIX engine...
beginning initiator...
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session
FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC)
<20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session:
FIX.4.2:MERL_DROP->NEOV)
...engine stops. That's it. No message, nothing.
What the heck could I possibly be doing wrong with the code above...it's
empty shell code...why would it work for 1.0.3 and no version greater?
Merlin Securities - #1 Prime Broker North America, #1 Prime Broker
Single Strategy Funds, #1 Prime Broker Funds Under $100M - Global
Custodian 2007
=20
--------------------------------------------------------
This message contains information from Merlin Securities, LLC, or from
one of its affiliates, that may be confidential and privileged. If you
are not an intended recipient, please refrain from any disclosure,
copying, distribution or use of this information and note that such
actions are prohibited. If you have received this transmission in error,
please notify the sender immediately by telephone or by replying to this
transmission.
=20
Merlin Securities, LLC is a registered broker-dealer. Services offered
through Merlin Securities, LLC are not insured by the FDIC or any other
Federal Government Agency, are not deposits of or guaranteed by Merlin
Securities, LLC and may lose value. Nothing in this communication shall
constitute a solicitation or recommendation to buy or sell a particular
security.
------------------------------------------------------------------------
-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Quickfixj-users mailing list
Qui...@li...
https://lists.sourceforge.net/lists/listinfo/quickfixj-users
=20
--------------------------------------------------------
This message contains information from Merlin Securities, LLC, or from one =
of its affiliates, that may be confidential and privileged. If you are not =
an intended recipient, please refrain from any disclosure, copying, distrib=
ution or use of this information and note that such actions are prohibited.=
If you have received this transmission in error, please notify the sender =
immediately by telephone or by replying to this transmission.
=20
Merlin Securities, LLC is a registered broker-dealer. Services offered thro=
ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal=
Government Agency, are not deposits of or guaranteed by Merlin Securities,=
LLC and may lose value. Nothing in this communication shall constitute a s=
olicitation or recommendation to buy or sell a particular security.
|
|
From: Steve B. <st...@te...> - 2007-04-30 19:17:35
|
Hi Robert, This means all the JVM threads are "daemon" threads. That's why I was asking if there was a System.exit call or if the main function was exiting. With a SocketAcceptor, the only QFJ-created threads are timer threads and those are created as daemon threads. If the MINA communication threads are also daemon threads, then main() will exit unless you block the main thread (e.g., with Object.wait() or console input) or create a nondaemon thread. It's possible the MINA thread configuration has changed in the last several versions of the library (maybe they weren't daemon threads in earlier versions of the software). Steve > -----Original Message----- > From: qui...@li... > [mailto:qui...@li...]On Behalf Of > Robert Brueckmann > Sent: Monday, April 30, 2007 2:17 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] upgrading engine > > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > I'm sorry for the deluge of emails today, I'm "THAT" guy today...I'm > deeply sorry...but I was doing a little more tinkering and I simply > added: > > System.out.println("press <enter> to quit"); > System.in.read(); > initiator.stop(); > > to my TestInitiator class right after the initiator.start() and now all > library versions work. Why do I have to have a System.in listener in > order for the engine to initialize and function properly in any version > greater than 1.0.3? How can I avoid this? > > Thanks for your patience...I'm sorry > > > > Merlin Securities - #1 Prime Broker North America, #1 Prime > Broker Single Strategy Funds, #1 Prime Broker Funds Under $100M - > Global Custodian 2007 > > > From: qui...@li... > [mailto:qui...@li...] On Behalf Of > Robert Brueckmann > Sent: Monday, April 30, 2007 1:53 PM > To: qui...@li... > Subject: [Quickfixj-users] upgrading engine > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Here's my TestInitiator class: > > ---- > > package com.merlin.pb.fix; > > import java.io.InputStream; > > import quickfix.DefaultMessageFactory; > import quickfix.FileStoreFactory; > import quickfix.Initiator; > import quickfix.LogFactory; > import quickfix.MessageFactory; > import quickfix.MessageStoreFactory; > import quickfix.ScreenLogFactory; > import quickfix.SessionSettings; > import quickfix.ThreadedSocketInitiator; > > public class TestInitiator { > private static Initiator initiator = null; > > public static void main(String args[]) { > try { > System.out.println("running FIX engine..."); > > InputStream inputStream = > > MerlinFIXInitiator.class.getResourceAsStream("initiator.cfg"); > > SessionSettings settings = new > SessionSettings(inputStream); > TestApplication application = new TestApplication(); > > MessageStoreFactory messageStoreFactory = new > FileStoreFactory(settings); > LogFactory logFactory = new ScreenLogFactory(true, true, > true, true); > > MessageFactory messageFactory = new DefaultMessageFactory(); > > System.out.println("beginning initiator..."); > > initiator = new ThreadedSocketInitiator(application, > messageStoreFactory, > settings, > logFactory, > messageFactory); > > initiator.start(); > } catch(Exception e) { > e.printStackTrace(System.out); > } > } > } > > ---- > > Here's my TestApplication class: > > ---- > > package com.merlin.pb.fix; > > import quickfix.Application; > import quickfix.DoNotSend; > import quickfix.FieldNotFound; > import quickfix.IncorrectDataFormat; > import quickfix.IncorrectTagValue; > import quickfix.Message; > import quickfix.MessageCracker; > import quickfix.RejectLogon; > import quickfix.SessionID; > import quickfix.UnsupportedMessageType; > > public class TestApplication extends MessageCracker implements > Application { > public TestApplication() {} > > /* (non-Javadoc) > * @see quickfix.Application#fromAdmin(quickfix.Message, > quickfix.SessionID) > */ > public void fromAdmin(Message arg0, SessionID arg1) throws > FieldNotFound, > IncorrectDataFormat, IncorrectTagValue, > RejectLogon { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#fromApp(quickfix.Message, > quickfix.SessionID) > */ > public void fromApp(Message arg0, SessionID arg1) throws > FieldNotFound, > IncorrectDataFormat, IncorrectTagValue, > UnsupportedMessageType { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onCreate(quickfix.SessionID) > */ > public void onCreate(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onLogon(quickfix.SessionID) > */ > public void onLogon(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onLogout(quickfix.SessionID) > */ > public void onLogout(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#toAdmin(quickfix.Message, > quickfix.SessionID) > */ > public void toAdmin(Message arg0, SessionID arg1) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#toApp(quickfix.Message, > quickfix.SessionID) > */ > public void toApp(Message arg0, SessionID arg1) throws DoNotSend > { > // TODO Auto-generated method stub > > } > } > > ---- > > You can clearly see NOTHING is going on...I'm not doing anything with > incoming messages...just testing connectivity pretty much: > > Test results: > > Using qfj-1.0.3/mina-core-0.9.3/slfj-jdk14-1.0.1: > > running FIX engine... > beginning initiator... > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session > FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session: > FIX.4.2:MERL_DROP->NEOV) > Apr 30, 2007 1:44:59 PM quickfix.mina.initiator.InitiatorIoHandler > sessionCreated > INFO: MINA session created: /10.68.5.33:1550 > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, outgoing> > (8=FIX.4.29=6935=A34=2749=MERL_DROP52=20070430-17:44:59.90556=NEOV > 98=0108=3010=067) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Initiated logon > request) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, incoming> > (8=FIX.4.29=006535=A34=3349=NEOV56=MERL_DROP52=20070430-17:44:599 > 8=0108=3010=208) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Received logon > response) > <20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, incoming> > (8=FIX.4.29=005335=034=3449=NEOV56=MERL_DROP52=20070430-17:45:291 > 0=162) > <20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, outgoing> > (8=FIX.4.29=5735=034=2849=MERL_DROP52=20070430-17:45:29.93656=NEOV > 10=025) > > ...and so on and so forth...regular continuous and uninterrupted > heartbeats... > > Using qfj-1.0.5/mina-core-1.0.0/slf-jdk14-1.0.1 OR using > qfj-1.0.1/mina-core-1.0.1/mina-sources-1.0.1/slf-api-1.3.0/slf-jdk14-1.3 > .0: > > running FIX engine... > beginning initiator... > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session > FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session: > FIX.4.2:MERL_DROP->NEOV) > > ...engine stops. That's it. No message, nothing. > > What the heck could I possibly be doing wrong with the code above...it's > empty shell code...why would it work for 1.0.3 and no version greater? > > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker > Single Strategy Funds, #1 Prime Broker Funds Under $100M - Global > Custodian 2007 > > > > > -------------------------------------------------------- > > This message contains information from Merlin Securities, LLC, or from > one of its affiliates, that may be confidential and privileged. If you > are not an intended recipient, please refrain from any disclosure, > copying, distribution or use of this information and note that such > actions are prohibited. If you have received this transmission in error, > please notify the sender immediately by telephone or by replying to this > transmission. > > Merlin Securities, LLC is a registered broker-dealer. Services offered > through Merlin Securities, LLC are not insured by the FDIC or any other > Federal Government Agency, are not deposits of or guaranteed by Merlin > Securities, LLC and may lose value. Nothing in this communication shall > constitute a solicitation or recommendation to buy or sell a particular > security. > > > > ------------------------------------------------------------------------ > - > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > > > -------------------------------------------------------- > > This message contains information from Merlin Securities, LLC, or > from one of its affiliates, that may be confidential and > privileged. If you are not an intended recipient, please refrain > from any disclosure, copying, distribution or use of this > information and note that such actions are prohibited. If you > have received this transmission in error, please notify the > sender immediately by telephone or by replying to this transmission. > > Merlin Securities, LLC is a registered broker-dealer. Services > offered through Merlin Securities, LLC are not insured by the > FDIC or any other Federal Government Agency, are not deposits of > or guaranteed by Merlin Securities, LLC and may lose value. > Nothing in this communication shall constitute a solicitation or > recommendation to buy or sell a particular security. > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > |
|
From: Robert B. <rbr...@me...> - 2007-04-30 19:23:40
|
Yeah...since my last post I rewrote my main initiator class and instead of putting everything in the main method, functioned all of it out and I create an instance of my initiator class in the main method and call .wait() on it after starting up the initiator and that got the actual engine up and running. I'm still only able to use the file store for my message logging though...even with the latest release of qf/j, connecting to Oracle for the jdbc store results in the: JdbcLog cannot log SQLException due to recursive log errors! java.sql.SQLException: We are already in the process of making 1 connections and the number of simultaneous builds has been throttled to 0 at org.logicalcobwebs.proxool.Prototyper.checkSimultaneousBuildThrottle(Pro totyper.java:260)...etc. Thanks again for your help and sorry again for all the emails today! Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 From: qui...@li... [mailto:qui...@li...] On Behalf Of Steve Bate Sent: Monday, April 30, 2007 3:18 PM To: qui...@li... Subject: Re: [Quickfixj-users] upgrading engine QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ QuickFIX/J Support: http://www.quickfixj.org/support/ Hi Robert, This means all the JVM threads are "daemon" threads. That's why I was asking if there was a System.exit call or if the main function was exiting. With a SocketAcceptor, the only QFJ-created threads are timer threads and those are created as daemon threads. If the MINA communication threads are also daemon threads, then main() will exit unless you block the main thread (e.g., with Object.wait() or console input) or create a nondaemon thread. It's possible the MINA thread configuration has changed in the last several versions of the library (maybe they weren't daemon threads in earlier versions of the software). Steve > -----Original Message----- > From: qui...@li... > [mailto:qui...@li...]On Behalf Of > Robert Brueckmann > Sent: Monday, April 30, 2007 2:17 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] upgrading engine > > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > I'm sorry for the deluge of emails today, I'm "THAT" guy today...I'm > deeply sorry...but I was doing a little more tinkering and I simply > added: > > System.out.println("press <enter> to quit"); > System.in.read(); > initiator.stop(); > > to my TestInitiator class right after the initiator.start() and now all > library versions work. Why do I have to have a System.in listener in > order for the engine to initialize and function properly in any version > greater than 1.0.3? How can I avoid this? > > Thanks for your patience...I'm sorry > > > > Merlin Securities - #1 Prime Broker North America, #1 Prime > Broker Single Strategy Funds, #1 Prime Broker Funds Under $100M - > Global Custodian 2007 > > > From: qui...@li... > [mailto:qui...@li...] On Behalf Of > Robert Brueckmann > Sent: Monday, April 30, 2007 1:53 PM > To: qui...@li... > Subject: [Quickfixj-users] upgrading engine > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Here's my TestInitiator class: > > ---- > > package com.merlin.pb.fix; > > import java.io.InputStream; > > import quickfix.DefaultMessageFactory; > import quickfix.FileStoreFactory; > import quickfix.Initiator; > import quickfix.LogFactory; > import quickfix.MessageFactory; > import quickfix.MessageStoreFactory; > import quickfix.ScreenLogFactory; > import quickfix.SessionSettings; > import quickfix.ThreadedSocketInitiator; > > public class TestInitiator { > private static Initiator initiator =3D null; > > public static void main(String args[]) { > try { > System.out.println("running FIX engine..."); > > InputStream inputStream =3D > > MerlinFIXInitiator.class.getResourceAsStream("initiator.cfg"); > > SessionSettings settings =3D new > SessionSettings(inputStream); > TestApplication application =3D new TestApplication(); > > MessageStoreFactory messageStoreFactory =3D new > FileStoreFactory(settings); > LogFactory logFactory =3D new ScreenLogFactory(true, true, > true, true); > > MessageFactory messageFactory =3D new DefaultMessageFactory(); > > System.out.println("beginning initiator..."); > > initiator =3D new ThreadedSocketInitiator(application, > messageStoreFactory, > settings, > logFactory, > messageFactory); > > initiator.start(); > } catch(Exception e) { > e.printStackTrace(System.out); > } > } > } > > ---- > > Here's my TestApplication class: > > ---- > > package com.merlin.pb.fix; > > import quickfix.Application; > import quickfix.DoNotSend; > import quickfix.FieldNotFound; > import quickfix.IncorrectDataFormat; > import quickfix.IncorrectTagValue; > import quickfix.Message; > import quickfix.MessageCracker; > import quickfix.RejectLogon; > import quickfix.SessionID; > import quickfix.UnsupportedMessageType; > > public class TestApplication extends MessageCracker implements > Application { > public TestApplication() {} > > /* (non-Javadoc) > * @see quickfix.Application#fromAdmin(quickfix.Message, > quickfix.SessionID) > */ > public void fromAdmin(Message arg0, SessionID arg1) throws > FieldNotFound, > IncorrectDataFormat, IncorrectTagValue, > RejectLogon { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#fromApp(quickfix.Message, > quickfix.SessionID) > */ > public void fromApp(Message arg0, SessionID arg1) throws > FieldNotFound, > IncorrectDataFormat, IncorrectTagValue, > UnsupportedMessageType { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onCreate(quickfix.SessionID) > */ > public void onCreate(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onLogon(quickfix.SessionID) > */ > public void onLogon(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#onLogout(quickfix.SessionID) > */ > public void onLogout(SessionID arg0) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#toAdmin(quickfix.Message, > quickfix.SessionID) > */ > public void toAdmin(Message arg0, SessionID arg1) { > // TODO Auto-generated method stub > > } > > /* (non-Javadoc) > * @see quickfix.Application#toApp(quickfix.Message, > quickfix.SessionID) > */ > public void toApp(Message arg0, SessionID arg1) throws DoNotSend > { > // TODO Auto-generated method stub > > } > } > > ---- > > You can clearly see NOTHING is going on...I'm not doing anything with > incoming messages...just testing connectivity pretty much: > > Test results: > > Using qfj-1.0.3/mina-core-0.9.3/slfj-jdk14-1.0.1: > > running FIX engine... > beginning initiator... > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session > FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session: > FIX.4.2:MERL_DROP->NEOV) > Apr 30, 2007 1:44:59 PM quickfix.mina.initiator.InitiatorIoHandler > sessionCreated > INFO: MINA session created: /10.68.5.33:1550 > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, outgoing> > (8=3DFIX.4.2=019=3D69=0135=3DA=0134=3D27=0149=3DMERL_DROP=0152=3D20070430-1= 7:44:59.905=0156=3DNEOV > =0198=3D0=01108=3D30=0110=3D067=01) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Initiated logon > request) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, incoming> > (8=3DFIX.4.2=019=3D0065=0135=3DA=0134=3D33=0149=3DNEOV=0156=3DMERL_DROP=015= 2=3D20070430-17:44:59=019 > 8=3D0=01108=3D30=0110=3D208=01) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Received logon > response) > <20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, incoming> > (8=3DFIX.4.2=019=3D0053=0135=3D0=0134=3D34=0149=3DNEOV=0156=3DMERL_DROP=015= 2=3D20070430-17:45:29=011 > 0=3D162=01) > <20070430-17:45:29, FIX.4.2:MERL_DROP->NEOV, outgoing> > (8=3DFIX.4.2=019=3D57=0135=3D0=0134=3D28=0149=3DMERL_DROP=0152=3D20070430-1= 7:45:29.936=0156=3DNEOV > =0110=3D025=01) > > ...and so on and so forth...regular continuous and uninterrupted > heartbeats... > > Using qfj-1.0.5/mina-core-1.0.0/slf-jdk14-1.0.1 OR using > qfj-1.0.1/mina-core-1.0.1/mina-sources-1.0.1/slf-api-1.3.0/slf-jdk14-1.3 > .0: > > running FIX engine... > beginning initiator... > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Session > FIX.4.2:MERL_DROP->NEOV schedule is daily, 00:00:00 UTC - 00:00:00 UTC) > <20070430-17:44:59, FIX.4.2:MERL_DROP->NEOV, event> (Created session: > FIX.4.2:MERL_DROP->NEOV) > > ...engine stops. That's it. No message, nothing. > > What the heck could I possibly be doing wrong with the code above...it's > empty shell code...why would it work for 1.0.3 and no version greater? > > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker > Single Strategy Funds, #1 Prime Broker Funds Under $100M - Global > Custodian 2007 > > > > > -------------------------------------------------------- > > This message contains information from Merlin Securities, LLC, or from > one of its affiliates, that may be confidential and privileged. If you > are not an intended recipient, please refrain from any disclosure, > copying, distribution or use of this information and note that such > actions are prohibited. If you have received this transmission in error, > please notify the sender immediately by telephone or by replying to this > transmission. > > Merlin Securities, LLC is a registered broker-dealer. Services offered > through Merlin Securities, LLC are not insured by the FDIC or any other > Federal Government Agency, are not deposits of or guaranteed by Merlin > Securities, LLC and may lose value. Nothing in this communication shall > constitute a solicitation or recommendation to buy or sell a particular > security. > > > > ------------------------------------------------------------------------ > - > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > > > -------------------------------------------------------- > > This message contains information from Merlin Securities, LLC, or > from one of its affiliates, that may be confidential and > privileged. If you are not an intended recipient, please refrain > from any disclosure, copying, distribution or use of this > information and note that such actions are prohibited. If you > have received this transmission in error, please notify the > sender immediately by telephone or by replying to this transmission. > > Merlin Securities, LLC is a registered broker-dealer. Services > offered through Merlin Securities, LLC are not insured by the > FDIC or any other Federal Government Agency, are not deposits of > or guaranteed by Merlin Securities, LLC and may lose value. > Nothing in this communication shall constitute a solicitation or > recommendation to buy or sell a particular security. > > > > ------------------------------------------------------------------------ - > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Quickfixj-users mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfixj-users =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Robert B. <rbr...@me...> - 2007-05-02 17:35:31
|
Toli,
You said in your message below that the recursive error was repaired in
1.1.0 but I cannot for the life of me get the JDBC logging to work
against an Oracle database.
Is anyone out there successfully running JDBC logging against an Oracle
database?
I tried with the included proxool-0.9.0RC2.jar and I even got the latest
version proxool-0.9.0RC3.jar and tried it with those as well. The engine
fires up and this is what I see and then the engine just hangs:
running FIX engine...
beginning initiator...
2007-05-02 13:24:08,821 DEBUG [main] proxool.ShutdownHook
(ShutdownHook.java:73) - Registered shutdownHook
2007-05-02 13:24:08,836 DEBUG [main] proxool.HouseKeeperController
(HouseKeeperController.java:84) - Registering 'quickfixj-1' house keeper
2007-05-02 13:24:08,836 DEBUG [main] proxool.HouseKeeperController
(HouseKeeperController.java:92) - Starting a house keeper thread
2007-05-02 13:24:08,915 DEBUG [main] proxool.ConnectionResetter
(ConnectionResetter.java:168) - Remembering default value: isReadOnly()
=3D false
2007-05-02 13:24:08,930 DEBUG [main] proxool.ConnectionResetter
(ConnectionResetter.java:168) - Remembering default value:
getHoldability() =3D 1
2007-05-02 13:24:08,930 DEBUG [main] proxool.ConnectionResetter
(ConnectionResetter.java:168) - Remembering default value:
getTransactionIsolation() =3D 2
2007-05-02 13:24:08,946 DEBUG [main] proxool.ConnectionResetter
(ConnectionResetter.java:168) - Remembering default value: getTypeMap()
=3D {SYS.XMLTYPE=3Dclass oracle.xdb.XMLTypeFactory}
2007-05-02 13:24:08,946 DEBUG [main] proxool.ConnectionResetter
(ConnectionResetter.java:168) - Remembering default value: getCatalog()
=3D null
2007-05-02 13:24:08,946 INFO [main] proxool.ConnectionPool
(ConnectionPool.java:623) - Proxool statistics legend: "s - r (a/t/o)"
> s=3Dserved, r=3Drefused (only shown if non-zero), a=3Dactive, t=3Dtotal,
o=3Doffline (being tested)
2007-05-02 13:24:08,946 DEBUG [main] proxool.Prototyper
(Prototyper.java:204) - 000000 (01/01/00) - Connection #1 created on
demand =3D ACTIVE
2007-05-02 13:24:09,086 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface java.sql.Connection
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.internal.OracleConnection
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface oracle.sql.ClobDBAccess
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.OracleConnection
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface oracle.sql.BlobDBAccess
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.sql.BfileDBAccess
2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.internal.ClientDataSupport
2007-05-02 13:24:09,680 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
java.sql.PreparedStatement
2007-05-02 13:24:09,680 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface java.sql.Statement
2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.internal.OraclePreparedStatement
2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.OraclePreparedStatement
2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.internal.OracleStatement
2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory
(ProxyFactory.java:171) - Implementing interface
oracle.jdbc.OracleStatement
May 2, 2007 1:24:13 PM quickfix.mina.initiator.InitiatorIoHandler
sessionCreated
INFO: MINA session created: /10.68.5.33:4593
JdbcLog cannot log SQLException due to recursive log errors!
java.sql.SQLException: We are already in the process of making 1
connections and the number of simultaneous builds has been throttled to
0
at
org.logicalcobwebs.proxool.Prototyper.checkSimultaneousBuildThrottle(Pro
totyper.java:260)
at
org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.j
ava:170)
at
org.logicalcobwebs.proxool.ProxoolDataSource.getConnection(ProxoolDataSo
urce.java:97)
at quickfix.JdbcLog.insert(JdbcLog.java:79)
at quickfix.JdbcLog.onEvent(JdbcLog.java:51)
at quickfix.Session.next(Session.java:1247)
at
quickfix.mina.SessionConnector$SessionTimerTask.run(SessionConnector.jav
a:222)
at
edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter
.call(Executors.java:431)
at
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.runAndReset(Fu
tureTask.java:198)
at
edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecut
or$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:189)
at
edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecut
or$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:213)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.runTask(ThreadPoolExecutor.java:650)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:534)
2007-05-02 13:24:15,008 DEBUG [SocketConnectorIoProcessor-0.0]
proxool.Prototyper (Prototyper.java:204) - 000007 (01/02/00) -
Connection #2 created on demand =3D ACTIVE
2007-05-02 13:24:15,118 DEBUG [QF/J Session dispatcher:
FIX.4.2:MERL_DROP->NEOV] fix.Application (Application.java:198) -
logging off...
May 2, 2007 1:24:43 PM quickfix.mina.initiator.InitiatorIoHandler
sessionCreated
INFO: MINA session created: /10.68.5.33:4600
2007-05-02 13:24:45,024 DEBUG [QF/J Session dispatcher:
FIX.4.2:MERL_DROP->NEOV] fix.Application (Application.java:198) -
logging off...
May 2, 2007 1:25:14 PM quickfix.mina.initiator.InitiatorIoHandler
sessionCreated
INFO: MINA session created: /10.68.5.33:4613
Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S=
trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007
From: qui...@li...
[mailto:qui...@li...] On Behalf Of Toli
Kuznets
Sent: Monday, April 30, 2007 11:58 AM
To: qui...@li...
Subject: Re: [Quickfixj-users] jdbc logging
QuickFIX/J Documentation: http://www.quickfixj.org/documentation/
QuickFIX/J Support: http://www.quickfixj.org/support/
Robert,
I believe i know what the problem may be. in QFJ 1.1.0 we fixed a bug
where an error connecting to the Jdbc store caused teh JdbcLog to go
into an infinite recursion and print out the log below:
> java.sql.SQLException: We are already in the process of making 1
connections and the number of simultaneous builds has been throttled to
0
essentially, it catch an exception making the first db entry, then
would try to log the exception, and never stop. you get the idea.
> I'm still baffled though why my FileStoreFactory code (no JDBC
logging) will not work with the 1.1.0 libraries though...
in that case, you are not dealing with JdbcLog so everything worked
fine - your system worked correctly and the above situation didn't
happen.
If you look at the output of QFJ 1.1, you should see somewhere a line
saying something about encountering a "write to Jdbc" failure and
quitting the JdbcLog.
Still not sure why your app will quit completely in case of a JdbcLog
failure - it should just not log, but the app itself should keep
working.
So see if your database is setup correctly, make sure you can log on
to it with the credentials supplied in the SessionSettings, etc.
Also, if you can, try to run it in the debugger and trap all
Errors/Exceptions, maybe for some reason JdbcLog throws some error
that kills your entire app?
------------------------------------------------------------------------
-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Quickfixj-users mailing list
Qui...@li...
https://lists.sourceforge.net/lists/listinfo/quickfixj-users
=20
--------------------------------------------------------
This message contains information from Merlin Securities, LLC, or from one =
of its affiliates, that may be confidential and privileged. If you are not =
an intended recipient, please refrain from any disclosure, copying, distrib=
ution or use of this information and note that such actions are prohibited.=
If you have received this transmission in error, please notify the sender =
immediately by telephone or by replying to this transmission.
=20
Merlin Securities, LLC is a registered broker-dealer. Services offered thro=
ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal=
Government Agency, are not deposits of or guaranteed by Merlin Securities,=
LLC and may lose value. Nothing in this communication shall constitute a s=
olicitation or recommendation to buy or sell a particular security.
|
|
From: Toli K. <to...@ma...> - 2007-05-02 18:36:55
|
Robert, When i said that the JdbcLog was "fixed", I meant that it stopped going into the recursive death spiral of printing stacktraces, so that you get this instead: > JdbcLog cannot log SQLException due to recursive log errors! Truth be told, i'm at a loss what your problem may be. i'm not seeing anything useful in the log. I saw that kind of exception when the QFJ engine couldn't make the connection to the database: it was either not running, the tables were not present, the user/password was incorrect, it didn't have perms to write, etc. In that case, the underlying proxool cashing code would go crazy, trying to keep creating connections. But it doesn't look like that's the case with you. I haven't tried QFJ with Oracle - we don't have it in-house, we use MySQL. I can't remember if you said that it worked for you with 1.0.3, or if it was the other problem (app exiting w/out an explicit wait() call). There are 3 approaches i can suggest: 1. Try something other than Oracle - maybe MySQL. it's fairly easy to setup, and you can see if it's an Oracle or a general Jdbc problem you have. 2. The error comes from Proxool - which is a transparent JDBC pooling framework. If you feel comfortable modifying QFJ, you can check out the source and try to disable Proxool altogether, but changing the quickfix.JdbcUtil.getDataSource() function not create a Proxool pool. Perhaps that'll give you a better error that somehow gets masked by Proxool. 3. Another thing i may suggest for debugging is for you to download our Marketcetera OMS and configure it to point to your Oracle database and see if you get the same problem. If you don't, then you can perhaps isolate the problem to your app setup. Otherwise, we are much more likely seeing a bug in QFJ itself, and then I can work on getting an Oracle setup and trying to reproduce your setup. http://trac.marketcetera.org/trac.fcgi/wiki/Marketcetera/OMSInstallation I'd be happy to walk you through the Marketcetera setup to save you time if you want. Just let me know. I realize that all of these suggestions are a lot of work and may be asking too much. If you can isolate the error to QuickfixJ. then you can post the SQL create scripts for Oracle database, and we'll try to reproduce the problem locally. -- Toli Kuznets http://www.marketcetera.com: Open-Source Trading Platform download.run.trade. |
|
From: Robert B. <rbr...@me...> - 2007-05-02 18:49:57
|
No worries, Toli!=20=20 Thank you so much for the time you spent on that reply...the minute I have a free...uh...minute, I will batten down the hatches and get behind what's going on here. I have a sneaking suspicion the Proxool libraries are the culprit in conjunction with Oracle....hopefully I'll be able to tell you soon. This definitely was not working with 1.0.3...and I migrated to 1.1.0 in the hopes that it was fixed. I have been meaning to install mysql on my machine and attempt to connect to that and see what happens...this email is the kick in the butt I needed. Thanks again for all your help and detailed reply...much appreciated beyond belief! Rob Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 From: qui...@li... [mailto:qui...@li...] On Behalf Of Toli Kuznets Sent: Wednesday, May 02, 2007 2:37 PM To: qui...@li... Subject: Re: [Quickfixj-users] jdbc logging QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ QuickFIX/J Support: http://www.quickfixj.org/support/ Robert, When i said that the JdbcLog was "fixed", I meant that it stopped going into the recursive death spiral of printing stacktraces, so that you get this instead: > JdbcLog cannot log SQLException due to recursive log errors! Truth be told, i'm at a loss what your problem may be. i'm not seeing anything useful in the log. I saw that kind of exception when the QFJ engine couldn't make the connection to the database: it was either not running, the tables were not present, the user/password was incorrect, it didn't have perms to write, etc. In that case, the underlying proxool cashing code would go crazy, trying to keep creating connections. But it doesn't look like that's the case with you. I haven't tried QFJ with Oracle - we don't have it in-house, we use MySQL. I can't remember if you said that it worked for you with 1.0.3, or if it was the other problem (app exiting w/out an explicit wait() call). There are 3 approaches i can suggest: 1. Try something other than Oracle - maybe MySQL. it's fairly easy to setup, and you can see if it's an Oracle or a general Jdbc problem you have. 2. The error comes from Proxool - which is a transparent JDBC pooling framework. If you feel comfortable modifying QFJ, you can check out the source and try to disable Proxool altogether, but changing the quickfix.JdbcUtil.getDataSource() function not create a Proxool pool. Perhaps that'll give you a better error that somehow gets masked by Proxool. 3. Another thing i may suggest for debugging is for you to download our Marketcetera OMS and configure it to point to your Oracle database and see if you get the same problem. If you don't, then you can perhaps isolate the problem to your app setup. Otherwise, we are much more likely seeing a bug in QFJ itself, and then I can work on getting an Oracle setup and trying to reproduce your setup. http://trac.marketcetera.org/trac.fcgi/wiki/Marketcetera/OMSInstallation I'd be happy to walk you through the Marketcetera setup to save you time if you want. Just let me know. I realize that all of these suggestions are a lot of work and may be asking too much. If you can isolate the error to QuickfixJ. then you can post the SQL create scripts for Oracle database, and we'll try to reproduce the problem locally. --=20 Toli Kuznets http://www.marketcetera.com: Open-Source Trading Platform download.run.trade. ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Quickfixj-users mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfixj-users =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Joerg T. <Joe...@ma...> - 2007-05-03 11:10:04
|
Hi Robert, just to recollect: JdbcLogging with QF/J 1.1.0 to Oracle does not work. But does the JdbcStoreFactory work? Which Oracle version do you use and which version of the Oracle JDBC driver? Steve, shall we open a JIRA issue for this? The thread is getting really long now... Thanks, Jörg On 05/02/07 20:49, Robert Brueckmann wrote: > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > No worries, Toli! > > Thank you so much for the time you spent on that reply...the minute I > have a free...uh...minute, I will batten down the hatches and get behind > what's going on here. I have a sneaking suspicion the Proxool libraries > are the culprit in conjunction with Oracle....hopefully I'll be able to > tell you soon. > > This definitely was not working with 1.0.3...and I migrated to 1.1.0 in > the hopes that it was fixed. I have been meaning to install mysql on my > machine and attempt to connect to that and see what happens...this email > is the kick in the butt I needed. > > Thanks again for all your help and detailed reply...much appreciated > beyond belief! > > Rob > > > > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single Strategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 > > > From: qui...@li... > [mailto:qui...@li...] On Behalf Of Toli > Kuznets > Sent: Wednesday, May 02, 2007 2:37 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] jdbc logging > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Robert, > > When i said that the JdbcLog was "fixed", I meant that it stopped > going into the recursive death spiral of printing stacktraces, so that > you get this instead: >> JdbcLog cannot log SQLException due to recursive log errors! > > Truth be told, i'm at a loss what your problem may be. i'm not seeing > anything useful in the log. I saw that kind of exception when the QFJ > engine couldn't make the connection to the database: it was either not > running, the tables were not present, the user/password was incorrect, > it didn't have perms to write, etc. In that case, the underlying > proxool cashing code would go crazy, trying to keep creating > connections. But it doesn't look like that's the case with you. > > I haven't tried QFJ with Oracle - we don't have it in-house, we use > MySQL. > I can't remember if you said that it worked for you with 1.0.3, or if > it was the other problem (app exiting w/out an explicit wait() call). > > There are 3 approaches i can suggest: > 1. Try something other than Oracle - maybe MySQL. it's fairly easy to > setup, and you can see if it's an Oracle or a general Jdbc problem you > have. > > 2. The error comes from Proxool - which is a transparent JDBC pooling > framework. If you feel comfortable modifying QFJ, you can check out > the source and try to disable Proxool altogether, but changing the > quickfix.JdbcUtil.getDataSource() function not create a Proxool pool. > Perhaps that'll give you a better error that somehow gets masked by > Proxool. > > 3. Another thing i may suggest for debugging is for you to download > our Marketcetera OMS and configure it to point to your Oracle database > and see if you get the same problem. > If you don't, then you can perhaps isolate the problem to your app > setup. Otherwise, we are much more likely seeing a bug in QFJ itself, > and then I can work on getting an Oracle setup and trying to reproduce > your setup. > http://trac.marketcetera.org/trac.fcgi/wiki/Marketcetera/OMSInstallation > I'd be happy to walk you through the Marketcetera setup to save you > time if you want. Just let me know. > > I realize that all of these suggestions are a lot of work and may be > asking too much. If you can isolate the error to QuickfixJ. then you > can post the SQL create scripts for Oracle database, and we'll try to > reproduce the problem locally. > -- Joerg Thoennes http://www.macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Geschäftsführer: Roger Macdonald Lothringer Str. 52, D-52070 Aachen Amtsgericht Aachen, HRB 8151, Ust.-Id DE813021663 |
|
From: Robert B. <rbr...@me...> - 2007-05-03 15:55:21
|
J=F6rg, We are using an Oracle 10.2.0.3 in RAC configuration on a RedHat Enterprise= Linux 4 with update 4 server. I'm using the latest ojdbc.jar file to come= with this Oracle installation to connect to this system from my Windows XP= Professional box running the class directly from my Eclipse 3.2 IDE. To further illustrate my conundrum...I tested individual sessions I have se= t up with various vendors...all of my initial testing of the JDBC logging/s= toring had, thus far, been with Neovest, whose development connection I've = been testing with for a few weeks now has been very dependable and trouble-= free...turns out, the day I started testing QuickFIX/j's JDBC logging, Neov= est's test connection was acting up and has been for a few days now...my en= gine would send a logon request and they would immediately reply with a log= out message and the engine would logout...in the midst of all of this, entr= ies would be inserted into the Oracle tables via the logging, but I would c= ontinue to get the recursive errors.=20=20 I switched to mySQL and attempted to connect to the bad connection with Neo= vest and the engine would attempt to login, get the logout response and log= off and then retry again in 30 seconds...no recursive errors and all conne= ction/session creation attempts were logged to mySQL. Seemed the oracle im= plementation of the proxool libraries didn't like the fact that the connect= ion was sending an incorrect response to my logon request I guess. At any rate, I changed my test session to connect to FutureTrade and I have= now been successfully able to connect to Oracle using JDBC logging/store w= ithout any recursive errors! A little disconcerting that a problematic con= nection results in a recursive connection error but hopefully, in productio= n over our dedicated lines we are getting installed, the connections to our= vendors will be mostly trouble-free *na=EFve fingers crossed*...I guess we= 'll just have to watch this. I'll keep you posted as I continue to monitor this. Also to answer your lo= gging/store question, my config file has the jdbcurl, driver, username and = password and my initiator is successfully using both the JdbcLogFactory and= JdbcStoreFactory utilities connected to Oracle now with my valid test conn= ection to FutureTrade...still trouble with the invalid Neovest connection. Thanks so much for your patience and help with all of this... Gratefully, Rob Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 From: qui...@li... [mailto:quickfixj-users= -bo...@li...] On Behalf Of Joerg Thoennes Sent: Thursday, May 03, 2007 7:10 AM To: qui...@li... Subject: Re: [Quickfixj-users] jdbc logging QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ QuickFIX/J Support: http://www.quickfixj.org/support/ Hi Robert, just to recollect: JdbcLogging with QF/J 1.1.0 to Oracle does not work. But does the JdbcStoreFactory work? Which Oracle version do you use and which version of the Oracle JDBC driver? Steve, shall we open a JIRA issue for this? The thread is getting really lo= ng now... Thanks, J=F6rg On 05/02/07 20:49, Robert Brueckmann wrote: > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > No worries, Toli!=20=20 >=20 > Thank you so much for the time you spent on that reply...the minute I > have a free...uh...minute, I will batten down the hatches and get behind > what's going on here. I have a sneaking suspicion the Proxool libraries > are the culprit in conjunction with Oracle....hopefully I'll be able to > tell you soon. >=20 > This definitely was not working with 1.0.3...and I migrated to 1.1.0 in > the hopes that it was fixed. I have been meaning to install mysql on my > machine and attempt to connect to that and see what happens...this email > is the kick in the butt I needed. >=20 > Thanks again for all your help and detailed reply...much appreciated > beyond belief! >=20 > Rob >=20 >=20 >=20 > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single= Strategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 >=20 >=20 > From: qui...@li... > [mailto:qui...@li...] On Behalf Of Toli > Kuznets > Sent: Wednesday, May 02, 2007 2:37 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] jdbc logging >=20 > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Robert, >=20 > When i said that the JdbcLog was "fixed", I meant that it stopped > going into the recursive death spiral of printing stacktraces, so that > you get this instead: >> JdbcLog cannot log SQLException due to recursive log errors! >=20 > Truth be told, i'm at a loss what your problem may be. i'm not seeing > anything useful in the log. I saw that kind of exception when the QFJ > engine couldn't make the connection to the database: it was either not > running, the tables were not present, the user/password was incorrect, > it didn't have perms to write, etc. In that case, the underlying > proxool cashing code would go crazy, trying to keep creating > connections. But it doesn't look like that's the case with you. >=20 > I haven't tried QFJ with Oracle - we don't have it in-house, we use > MySQL. > I can't remember if you said that it worked for you with 1.0.3, or if > it was the other problem (app exiting w/out an explicit wait() call). >=20 > There are 3 approaches i can suggest: > 1. Try something other than Oracle - maybe MySQL. it's fairly easy to > setup, and you can see if it's an Oracle or a general Jdbc problem you > have. >=20 > 2. The error comes from Proxool - which is a transparent JDBC pooling > framework. If you feel comfortable modifying QFJ, you can check out > the source and try to disable Proxool altogether, but changing the > quickfix.JdbcUtil.getDataSource() function not create a Proxool pool. > Perhaps that'll give you a better error that somehow gets masked by > Proxool. >=20 > 3. Another thing i may suggest for debugging is for you to download > our Marketcetera OMS and configure it to point to your Oracle database > and see if you get the same problem. > If you don't, then you can perhaps isolate the problem to your app > setup. Otherwise, we are much more likely seeing a bug in QFJ itself, > and then I can work on getting an Oracle setup and trying to reproduce > your setup. > http://trac.marketcetera.org/trac.fcgi/wiki/Marketcetera/OMSInstallation > I'd be happy to walk you through the Marketcetera setup to save you > time if you want. Just let me know. >=20 > I realize that all of these suggestions are a lot of work and may be > asking too much. If you can isolate the error to QuickfixJ. then you > can post the SQL create scripts for Oracle database, and we'll try to > reproduce the problem locally. >=20 --=20 Joerg Thoennes http://www.macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Gesch=E4ftsf=FChrer: Roger Macdonald Lothringer Str. 52, D-52070 Aachen Amtsgericht Aachen, HRB 8151, Ust.-Id D= E813021663 ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Quickfixj-users mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfixj-users =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Robert B. <rbr...@me...> - 2007-05-18 21:05:57
|
Hey guys, We had to stop our engine mid-day today to do some database maintenance. This is the first time we did this. It properly sent out a logout message to our endpoint and shutdown the engine gracefully. We are using jdbc logging. We fired the engine back up about an hour and a half later and the engine started a new session and started BOTH incoming and outgoing sequence numbers back at 1. This caused our FIX to start a seqnum loop with our endpoint...we would send them 1 and they would send us that we should be sending 905. The next heartbeat would show we sent them 2 and that we should have sent them 905...and so forth. You can see the problem...we'd have to wait 903 more iterations at 30 seconds a pop before the engine would have iterated back up to a sequence number worthy of receiving messages from our endpoint. We looked at the session table from the jdbc looging and the engine does not seem to be updating this table each time the outgoing sequence number, so when we stop and start the engine it starts from 1 every time. We have NOTHING in our configuration file that tells the engine to always start from 1...I know there are config parameters that allow for this...but we are not using any of them...our config file is bare bones...ip, port, start and stop times, sender and target ids, fix version...nothing else aside from the jdbc logging config params also.=20= =20 Why is the sessions table not being updated each time the outgoing seq num is being incremented by the engine? Why is this not being maintained? If we need to stop and start the engine in the middle of the day, we obviously don't want this to happen every time. What can we do? In this instance, we contacted the endpoint and they reset the seq num on their end so we could catch up to a reasonable number and then we captured all missed messages. Is there a bug in the jdbc logging?=20=20 Any thoughts on what we can do to better handle a mid-day shutdown and restart that would allows us to pick back up where we left off with our endpoint? Thanks, rob Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Steve B. <st...@te...> - 2007-05-20 22:00:34
|
> We had to stop our engine mid-day today to do some database > maintenance. ... > > Why is the sessions table not being updated each time the > outgoing seq num is being incremented by the engine? Why is > this not being maintained? I don't know based on the information you've provided. You say you were doing database maintenance. If the engine's database connection was bad it might explain the problem. You'd see information in the log file and/or event log table if this was the cause. This could happen if the database was restarted but the FIX engines were not. Was the outgoing sequence number = 1 in the sessions table? This information won't help to explain the lack of updates, but it will tell me if the session was reset or whether the engine just couldn't read the information from the database. > If we need to stop and start the > engine in the middle of the day, we obviously don't want this > to happen every time. What can we do? I'd be surprised is this was an issue directly related to stopping and starting the engine midday. Set up a client and server test environment using a JDBC message store and try stopping and starting. It should work. I don't personally use the JDBC message store, but there are tests for the implementation and others use it. There are no bug reports related to this type of behavior. > In this instance, we > contacted the endpoint and they reset the seq num on their > end so we could catch up to a reasonable number and then we > captured all missed messages. Is there a bug in the jdbc logging? Based on the information so far, I'd guess not. Check the log files for additional clues. > Any thoughts on what we can do to better handle a mid-day > shutdown and restart that would allows us to pick back up > where we left off with our endpoint? You just be able to restart. If you have any other information, please let us know. Steve |
|
From: Robert B. <rbr...@me...> - 2007-05-21 18:55:48
|
Hey Steve, Thanks for the reply. I did as you said and set up a test environment...I am using JDBC logging against Oracle. I'm the one that had a barrage of emails a few weeks ago about the problems with JDBC logging and Oracle playing nicely together. I'm still intermittently getting the recursive exception about: "JdbcLog cannot log SQLException due to recursive log errors! java.sql.SQLException: We are already in the process of making 1 connections and the number of simultaneous builds has been throttled to 0" Thing is, it IS logging to the database. I get a record inserted in the Sessions table with the initial information, only the incoming AND outgoing seqnums are always set to 1. I then enter an order in the test client the one vendor I'm testing with provided us to buy 500 shares of IBM. The messages come through...all the messages are stored in the database, I let the heartbeat run for a while, then I shut down the engine and start it back up again. Immediately I begin receiving: "Serious Error: Message sequence number: 1 is less than expected sequence number: 28" And then the engine continues to logout and login, each time, internally incrementing that message count, but never once updating the session entry in the SESSIONS table in the database with the newly incremented outgoing sequence number. Currently, the engine is up to 22 and the SESSIONS table record for this engine instance is still showing 1 for both the incoming and outgoing sequence numbers...but internally, it's obviously incrementing the count. Nowhere on the console are there any database exceptions relating to having a problem inserting into the SESSIONS table or updating that table. Every so often I'll get something like this: "2007-05-21 14:44:47,361 DEBUG [HouseKeeper] proxool.ConnectionPool (ConnectionPool.java:447) - 000079 (00/01/00) - #0001 removed because it has been active for too long. 2007-05-21 14:44:47,377 WARN [HouseKeeper] proxool.HouseKeeper (HouseKeeper.java:149) - #0001 was active for 11562 milliseconds and has been removed automaticaly. The Thread responsible was named 'QFJ Timer', but the last SQL it performed is unknown because the trace property is not enabled. JdbcLog cannot log SQLException due to recursive log errors! java.sql.SQLException: We are already in the process of making 1 connections and the number of simultaneous builds has been throttled to 0" I don't know what to do about these exceptions or the one I mentioned above, but messages and the message log tables both seem to be capturing the messages fine and running the engine without shutting it down and restarting for a long period of time, quite a few days in a row...the engine seems to work as does the logging without a hitch...but the minute we shut it down, that internal incrementing is lost and the sessions table sequence numbers are always initiated with 1 and we get stuck in a sequence reset loop until the engine increments to a number the endpoint session can handle, then a successful reset request is handled and things carry on normally. Any thoughts? Should I just give up on JDBC logging in conjunction with an Oracle database?=20=20 Is there a better way to handle fail-over? The reason the IT guys here wanted database logging was so if the FIX engine server went down, we could fire up the fail-over server and it would be able to look at the database logs (which reside on a totally different server) and pick up seamlessly where the initial instance left off. If we use just basic file logging and the entire FIX server crashes and we can't get to the log files, what do we do? Am I completely confused in thinking that the database logging approach would be better for my scenario or are there alternatives? Thanks so much! robert l. brueckmann vice president merlin securities 712 fifth avenue new york, ny 10019 p: 212.822.4821 f: 212.822.4820 Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 From: qui...@li... [mailto:qui...@li...] On Behalf Of Steve Bate Sent: Sunday, May 20, 2007 6:01 PM To: qui...@li... Subject: Re: [Quickfixj-users] outgoing seqnum QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ QuickFIX/J Support: http://www.quickfixj.org/support/ > We had to stop our engine mid-day today to do some database=20 > maintenance. ... > > Why is the sessions table not being updated each time the=20 > outgoing seq num is being incremented by the engine? Why is=20 > this not being maintained?=20=20 I don't know based on the information you've provided. You say you were doing database maintenance. If the engine's database connection was bad it might explain the problem. You'd see information in the log file and/or event log table if this was the cause. This could happen if the database was restarted but the FIX engines were not. Was the outgoing sequence number =3D 1 in the sessions table? This information won't help to explain the lack of updates, but it will tell me if the session was reset or whether the engine just couldn't read the information from the database. > If we need to stop and start the=20 > engine in the middle of the day, we obviously don't want this=20 > to happen every time. What can we do?=20=20 I'd be surprised is this was an issue directly related to stopping and starting the engine midday. Set up a client and server test environment using a JDBC message store and try stopping and starting. It should work. I don't personally use the JDBC message store, but there are tests for the implementation and others use it. There are no bug reports related to this type of behavior. > In this instance, we=20 > contacted the endpoint and they reset the seq num on their=20 > end so we could catch up to a reasonable number and then we=20 > captured all missed messages. Is there a bug in the jdbc logging?=20=20 Based on the information so far, I'd guess not. Check the log files for additional clues.=20 > Any thoughts on what we can do to better handle a mid-day=20 > shutdown and restart that would allows us to pick back up=20 > where we left off with our endpoint? You just be able to restart. If you have any other information, please let us know. Steve ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Quickfixj-users mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfixj-users =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Steve B. <st...@te...> - 2007-05-22 14:24:49
|
> ... the incoming AND outgoing seqnums are always set to 1. Hi Robert, It sounds like you can't write to the session table for some reason. It might be related to the Proxool exceptions you described. That would explain the apparent reset when you restart. It's not really a reset, but the sequence numbers were never incremented. I don't have access to Oracle so I can't try it out myself. A quick Google search didn't find any reported problems that sound similar. You can try modifying the JdbcUtil. getDataSource() method to return an instance of an OracleDataSource instead of using Proxool to wrap and pool Oracle connections. You are right that using JDBC for the quickfix.MessageStore is a more flexible way to support failover. I'd still recommend using files for logging (quickfix.Log) because they it's much faster than JDBC. I will modify the JdbcLogFactory and JdbcStoreFactory in the next version of QFJ so it will be easier to set up your own data source (like I'm suggesting here). Let us know if you learn some more about the problem. Thanks, Steve |
|
From: Joerg T. <Joe...@ma...> - 2007-05-24 10:04:02
|
Hi Robert, we currently use JdbcStore, but not JdbcLog (you sometimes call things "logging" where I would expect the MessageStore; is it possible to you mix logging and saving state?). In our test environment, all works well with JDBC access to PostgreSQL. Our customer uses Oracle 8 with OCI, there are currently installing our new version and maybe I get some feedback soon. If I remember right, you are using Oracle 9? Which JDBC driver -- "thin:" or "oci:"? Please give me some more details here. For the moment, I would recommend to replace the JdbcLog by Log4J logging. This is flexible enough for most purpose. For failover, it is important to keep the JdbcStore. In general, I am very interested in your experiences because our customer also uses Oracle. Cheers, Jörg On 05/21/07 20:55, Robert Brueckmann wrote: > Thanks for the reply. I did as you said and set up a test > environment...I am using JDBC logging against Oracle. I'm the one that > had a barrage of emails a few weeks ago about the problems with JDBC > logging and Oracle playing nicely together. I'm still intermittently > getting the recursive exception about: > > "JdbcLog cannot log SQLException due to recursive log errors! > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0" > > Thing is, it IS logging to the database. I get a record inserted in the > Sessions table with the initial information, only the incoming AND > outgoing seqnums are always set to 1. I then enter an order in the test > client the one vendor I'm testing with provided us to buy 500 shares of > IBM. The messages come through...all the messages are stored in the > database, I let the heartbeat run for a while, then I shut down the > engine and start it back up again. > > Immediately I begin receiving: > > "Serious Error: Message sequence number: 1 is less than expected > sequence number: 28" > > And then the engine continues to logout and login, each time, internally > incrementing that message count, but never once updating the session > entry in the SESSIONS table in the database with the newly incremented > outgoing sequence number. Currently, the engine is up to 22 and the > SESSIONS table record for this engine instance is still showing 1 for > both the incoming and outgoing sequence numbers...but internally, it's > obviously incrementing the count. > > Nowhere on the console are there any database exceptions relating to > having a problem inserting into the SESSIONS table or updating that > table. Every so often I'll get something like this: > > "2007-05-21 14:44:47,361 DEBUG [HouseKeeper] proxool.ConnectionPool > (ConnectionPool.java:447) - 000079 (00/01/00) - #0001 removed because it > has been active for too long. > 2007-05-21 14:44:47,377 WARN [HouseKeeper] proxool.HouseKeeper > (HouseKeeper.java:149) - #0001 was active for 11562 milliseconds and has > been removed automaticaly. The Thread responsible was named 'QFJ Timer', > but the last SQL it performed is unknown because the trace property is > not enabled. > JdbcLog cannot log SQLException due to recursive log errors! > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0" > > I don't know what to do about these exceptions or the one I mentioned > above, but messages and the message log tables both seem to be capturing > the messages fine and running the engine without shutting it down and > restarting for a long period of time, quite a few days in a row...the > engine seems to work as does the logging without a hitch...but the > minute we shut it down, that internal incrementing is lost and the > sessions table sequence numbers are always initiated with 1 and we get > stuck in a sequence reset loop until the engine increments to a number > the endpoint session can handle, then a successful reset request is > handled and things carry on normally. > > Any thoughts? Should I just give up on JDBC logging in conjunction with > an Oracle database? > > Is there a better way to handle fail-over? The reason the IT guys here > wanted database logging was so if the FIX engine server went down, we > could fire up the fail-over server and it would be able to look at the > database logs (which reside on a totally different server) and pick up > seamlessly where the initial instance left off. If we use just basic > file logging and the entire FIX server crashes and we can't get to the > log files, what do we do? Am I completely confused in thinking that the > database logging approach would be better for my scenario or are there > alternatives? > > Thanks so much! > > robert l. brueckmann > vice president > merlin securities > 712 fifth avenue > new york, ny 10019 > p: 212.822.4821 > f: 212.822.4820 > > > > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single Strategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 > > > From: qui...@li... > [mailto:qui...@li...] On Behalf Of > Steve Bate > Sent: Sunday, May 20, 2007 6:01 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] outgoing seqnum > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ >> We had to stop our engine mid-day today to do some database >> maintenance. ... >> >> Why is the sessions table not being updated each time the >> outgoing seq num is being incremented by the engine? Why is >> this not being maintained? > > I don't know based on the information you've provided. You > say you were doing database maintenance. If the engine's > database connection was bad it might explain the problem. > You'd see information in the log file and/or event log > table if this was the cause. This could happen if the > database was restarted but the FIX engines were not. > > Was the outgoing sequence number = 1 in the sessions table? > This information won't help to explain the lack of updates, > but it will tell me if the session was reset or whether the > engine just couldn't read the information from the database. > >> If we need to stop and start the >> engine in the middle of the day, we obviously don't want this >> to happen every time. What can we do? > > I'd be surprised is this was an issue directly related to > stopping and starting the engine midday. Set up a client > and server test environment using a JDBC message store and > try stopping and starting. It should work. I don't personally > use the JDBC message store, but there are tests for the > implementation and others use it. There are no bug reports > related to this type of behavior. > >> In this instance, we >> contacted the endpoint and they reset the seq num on their >> end so we could catch up to a reasonable number and then we >> captured all missed messages. Is there a bug in the jdbc logging? > > Based on the information so far, I'd guess not. Check the log > files for additional clues. > >> Any thoughts on what we can do to better handle a mid-day >> shutdown and restart that would allows us to pick back up >> where we left off with our endpoint? > > You just be able to restart. If you have any other information, > please let us know. > > Steve -- Joerg Thoennes http://www.macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Geschäftsführer: Roger Macdonald Lothringer Str. 52, D-52070 Aachen Amtsgericht Aachen, HRB 8151, Ust.-Id DE813021663 |
|
From: Robert B. <rbr...@me...> - 2007-05-24 12:56:56
|
You're correct Joerg...I have been unclear...I'm using both the jdbc loggin= g AND jdbc store. I finally got the store to work with Oracle yesterday af= ternoon by bypassing the proxool libraries altogether (As per Steve's sugge= stion) and modifying the JdbcUtil class to use OracleConnection and OracleD= ataSource objects directly...I then also had to severely modify the JdbcSt= ore class because we're not using session qualifiers in our config file, so= the session qualifier is an empty string, which in Oracle is NULL...all of= the update, delete and insert statements in the JdbcStore class use prepar= ed statements like "WHERE session_qualifier=3D?" and this is invalid sql fo= r oracle when you have a null/empty string condition...you cannot use "WHER= E session_qualifier =3D null" for a logic check, you either need to leave i= t out of the prepared statement or use "WHERE session_qualifier IS NULL".= =20=20 For all of the update, delete and insert statements I had to create a secon= d version of them and in all of the methods using these, I had to check the= value of the session qualifier and if it was an empty string I have to use= my NULL version of the prepared statements...I also had to add connection.= commit(); to the bottom of every update, insert and delete method in order = for my oracle store to work.=20=20 Today is the first true day we'll be running the engine with my custom libr= ary changes so I'm sure I'll have to iron out some bugs. Luckily we're sti= ll in development phase! When I have some time, I'd like to actually exten= d the existing JdbcUtil, JdbcLog, JdbcStore classes with Oracle-friendly im= plementations and submit it for review to be a part of the actual quickfix/= j library...that's if my testing over the next few days goes well. Thanks! robert l. brueckmann vice president merlin securities 712 fifth avenue new york, ny 10019 p: 212.822.4821 f: 212.822.4820 Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single S= trategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 From: qui...@li... [mailto:quickfixj-users= -bo...@li...] On Behalf Of Joerg Thoennes Sent: Thursday, May 24, 2007 6:04 AM To: qui...@li... Subject: Re: [Quickfixj-users] outgoing seqnum QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ QuickFIX/J Support: http://www.quickfixj.org/support/ Hi Robert, we currently use JdbcStore, but not JdbcLog (you sometimes call things "log= ging" where I would expect the MessageStore; is it possible to you mix logging and saving state= ?). In our test environment, all works well with JDBC access to PostgreSQL. Our= customer uses Oracle 8 with OCI, there are currently installing our new version and maybe I get so= me feedback soon. If I remember right, you are using Oracle 9? Which JDBC driver -- "thin:" o= r "oci:"? Please give me some more details here. For the moment, I would recommend to replace the JdbcLog by Log4J logging. = This is flexible enough for most purpose. For failover, it is important to keep the JdbcStore. In general, I am very interested in your experiences because our customer a= lso uses Oracle. Cheers, J=F6rg On 05/21/07 20:55, Robert Brueckmann wrote: > Thanks for the reply. I did as you said and set up a test > environment...I am using JDBC logging against Oracle. I'm the one that > had a barrage of emails a few weeks ago about the problems with JDBC > logging and Oracle playing nicely together. I'm still intermittently > getting the recursive exception about: >=20 > "JdbcLog cannot log SQLException due to recursive log errors! > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0" >=20 > Thing is, it IS logging to the database. I get a record inserted in the > Sessions table with the initial information, only the incoming AND > outgoing seqnums are always set to 1. I then enter an order in the test > client the one vendor I'm testing with provided us to buy 500 shares of > IBM. The messages come through...all the messages are stored in the > database, I let the heartbeat run for a while, then I shut down the > engine and start it back up again. >=20 > Immediately I begin receiving: >=20 > "Serious Error: Message sequence number: 1 is less than expected > sequence number: 28" >=20 > And then the engine continues to logout and login, each time, internally > incrementing that message count, but never once updating the session > entry in the SESSIONS table in the database with the newly incremented > outgoing sequence number. Currently, the engine is up to 22 and the > SESSIONS table record for this engine instance is still showing 1 for > both the incoming and outgoing sequence numbers...but internally, it's > obviously incrementing the count. >=20 > Nowhere on the console are there any database exceptions relating to > having a problem inserting into the SESSIONS table or updating that > table. Every so often I'll get something like this: >=20 > "2007-05-21 14:44:47,361 DEBUG [HouseKeeper] proxool.ConnectionPool > (ConnectionPool.java:447) - 000079 (00/01/00) - #0001 removed because it > has been active for too long. > 2007-05-21 14:44:47,377 WARN [HouseKeeper] proxool.HouseKeeper > (HouseKeeper.java:149) - #0001 was active for 11562 milliseconds and has > been removed automaticaly. The Thread responsible was named 'QFJ Timer', > but the last SQL it performed is unknown because the trace property is > not enabled. > JdbcLog cannot log SQLException due to recursive log errors! > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0" >=20 > I don't know what to do about these exceptions or the one I mentioned > above, but messages and the message log tables both seem to be capturing > the messages fine and running the engine without shutting it down and > restarting for a long period of time, quite a few days in a row...the > engine seems to work as does the logging without a hitch...but the > minute we shut it down, that internal incrementing is lost and the > sessions table sequence numbers are always initiated with 1 and we get > stuck in a sequence reset loop until the engine increments to a number > the endpoint session can handle, then a successful reset request is > handled and things carry on normally. >=20 > Any thoughts? Should I just give up on JDBC logging in conjunction with > an Oracle database?=20=20 >=20 > Is there a better way to handle fail-over? The reason the IT guys here > wanted database logging was so if the FIX engine server went down, we > could fire up the fail-over server and it would be able to look at the > database logs (which reside on a totally different server) and pick up > seamlessly where the initial instance left off. If we use just basic > file logging and the entire FIX server crashes and we can't get to the > log files, what do we do? Am I completely confused in thinking that the > database logging approach would be better for my scenario or are there > alternatives? >=20 > Thanks so much! >=20 > robert l. brueckmann > vice president > merlin securities > 712 fifth avenue > new york, ny 10019 > p: 212.822.4821 > f: 212.822.4820 >=20 >=20 >=20 > Merlin Securities - #1 Prime Broker North America, #1 Prime Broker Single= Strategy Funds, #1 Prime Broker Funds Under $100M - Global Custodian 2007 >=20 >=20 > From: qui...@li... > [mailto:qui...@li...] On Behalf Of > Steve Bate > Sent: Sunday, May 20, 2007 6:01 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] outgoing seqnum >=20 > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ >> We had to stop our engine mid-day today to do some database=20 >> maintenance. ... >> >> Why is the sessions table not being updated each time the=20 >> outgoing seq num is being incremented by the engine? Why is=20 >> this not being maintained?=20=20 >=20 > I don't know based on the information you've provided. You > say you were doing database maintenance. If the engine's > database connection was bad it might explain the problem. > You'd see information in the log file and/or event log > table if this was the cause. This could happen if the > database was restarted but the FIX engines were not. >=20 > Was the outgoing sequence number =3D 1 in the sessions table? > This information won't help to explain the lack of updates, > but it will tell me if the session was reset or whether the > engine just couldn't read the information from the database. >=20 >> If we need to stop and start the=20 >> engine in the middle of the day, we obviously don't want this=20 >> to happen every time. What can we do?=20=20 >=20 > I'd be surprised is this was an issue directly related to > stopping and starting the engine midday. Set up a client > and server test environment using a JDBC message store and > try stopping and starting. It should work. I don't personally > use the JDBC message store, but there are tests for the > implementation and others use it. There are no bug reports > related to this type of behavior. >=20 >> In this instance, we=20 >> contacted the endpoint and they reset the seq num on their=20 >> end so we could catch up to a reasonable number and then we=20 >> captured all missed messages. Is there a bug in the jdbc logging?=20=20 >=20 > Based on the information so far, I'd guess not. Check the log > files for additional clues.=20 >=20 >> Any thoughts on what we can do to better handle a mid-day=20 >> shutdown and restart that would allows us to pick back up=20 >> where we left off with our endpoint? >=20 > You just be able to restart. If you have any other information, > please let us know. >=20 > Steve --=20 Joerg Thoennes http://www.macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Gesch=E4ftsf=FChrer: Roger Macdonald Lothringer Str. 52, D-52070 Aachen Amtsgericht Aachen, HRB 8151, Ust.-Id D= E813021663 ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Quickfixj-users mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfixj-users =20 -------------------------------------------------------- This message contains information from Merlin Securities, LLC, or from one = of its affiliates, that may be confidential and privileged. If you are not = an intended recipient, please refrain from any disclosure, copying, distrib= ution or use of this information and note that such actions are prohibited.= If you have received this transmission in error, please notify the sender = immediately by telephone or by replying to this transmission. =20 Merlin Securities, LLC is a registered broker-dealer. Services offered thro= ugh Merlin Securities, LLC are not insured by the FDIC or any other Federal= Government Agency, are not deposits of or guaranteed by Merlin Securities,= LLC and may lose value. Nothing in this communication shall constitute a s= olicitation or recommendation to buy or sell a particular security. |
|
From: Steve B. <st...@te...> - 2007-05-02 18:51:09
|
Robert, The message about exceeding the connection "throttling" limit is very strange. This is an internal Proxool message. The Proxool throttle limit default is 10, but the message indicates it is 0 for some reason. It's a configurable parameter, but I don't modify it. I have no idea how it would be set to 0 and nobody else has reported a similar problem. I also can't imagine how it would be related to Oracle specifically. Steve > -----Original Message----- > From: qui...@li... > [mailto:qui...@li...]On Behalf Of > Robert Brueckmann > Sent: Wednesday, May 02, 2007 1:35 PM > To: qui...@li... > Subject: Re: [Quickfixj-users] jdbc logging > > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Toli, > > You said in your message below that the recursive error was repaired in > 1.1.0 but I cannot for the life of me get the JDBC logging to work > against an Oracle database. > > Is anyone out there successfully running JDBC logging against an Oracle > database? > > I tried with the included proxool-0.9.0RC2.jar and I even got the latest > version proxool-0.9.0RC3.jar and tried it with those as well. The engine > fires up and this is what I see and then the engine just hangs: > > running FIX engine... > beginning initiator... > 2007-05-02 13:24:08,821 DEBUG [main] proxool.ShutdownHook > (ShutdownHook.java:73) - Registered shutdownHook > 2007-05-02 13:24:08,836 DEBUG [main] proxool.HouseKeeperController > (HouseKeeperController.java:84) - Registering 'quickfixj-1' house keeper > 2007-05-02 13:24:08,836 DEBUG [main] proxool.HouseKeeperController > (HouseKeeperController.java:92) - Starting a house keeper thread > 2007-05-02 13:24:08,915 DEBUG [main] proxool.ConnectionResetter > (ConnectionResetter.java:168) - Remembering default value: isReadOnly() > = false > 2007-05-02 13:24:08,930 DEBUG [main] proxool.ConnectionResetter > (ConnectionResetter.java:168) - Remembering default value: > getHoldability() = 1 > 2007-05-02 13:24:08,930 DEBUG [main] proxool.ConnectionResetter > (ConnectionResetter.java:168) - Remembering default value: > getTransactionIsolation() = 2 > 2007-05-02 13:24:08,946 DEBUG [main] proxool.ConnectionResetter > (ConnectionResetter.java:168) - Remembering default value: getTypeMap() > = {SYS.XMLTYPE=class oracle.xdb.XMLTypeFactory} > 2007-05-02 13:24:08,946 DEBUG [main] proxool.ConnectionResetter > (ConnectionResetter.java:168) - Remembering default value: getCatalog() > = null > 2007-05-02 13:24:08,946 INFO [main] proxool.ConnectionPool > (ConnectionPool.java:623) - Proxool statistics legend: "s - r (a/t/o)" > > s=served, r=refused (only shown if non-zero), a=active, t=total, > o=offline (being tested) > 2007-05-02 13:24:08,946 DEBUG [main] proxool.Prototyper > (Prototyper.java:204) - 000000 (01/01/00) - Connection #1 created on > demand = ACTIVE > 2007-05-02 13:24:09,086 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface java.sql.Connection > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.internal.OracleConnection > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface oracle.sql.ClobDBAccess > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.OracleConnection > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface oracle.sql.BlobDBAccess > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.sql.BfileDBAccess > 2007-05-02 13:24:09,102 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.internal.ClientDataSupport > 2007-05-02 13:24:09,680 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > java.sql.PreparedStatement > 2007-05-02 13:24:09,680 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface java.sql.Statement > 2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.internal.OraclePreparedStatement > 2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.OraclePreparedStatement > 2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.internal.OracleStatement > 2007-05-02 13:24:09,696 DEBUG [main] proxool.ProxyFactory > (ProxyFactory.java:171) - Implementing interface > oracle.jdbc.OracleStatement > May 2, 2007 1:24:13 PM quickfix.mina.initiator.InitiatorIoHandler > sessionCreated > INFO: MINA session created: /10.68.5.33:4593 > JdbcLog cannot log SQLException due to recursive log errors! > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0 > at > org.logicalcobwebs.proxool.Prototyper.checkSimultaneousBuildThrottle(Pro > totyper.java:260) > at > org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.j > ava:170) > at > org.logicalcobwebs.proxool.ProxoolDataSource.getConnection(ProxoolDataSo > urce.java:97) > at quickfix.JdbcLog.insert(JdbcLog.java:79) > at quickfix.JdbcLog.onEvent(JdbcLog.java:51) > at quickfix.Session.next(Session.java:1247) > at > quickfix.mina.SessionConnector$SessionTimerTask.run(SessionConnector.jav > a:222) > at > edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter > .call(Executors.java:431) > at > edu.emory.mathcs.backport.java.util.concurrent.FutureTask.runAndReset(Fu > tureTask.java:198) > at > edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecut > or$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:189) > at > edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecut > or$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:213) > at > edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker > .runTask(ThreadPoolExecutor.java:650) > at > edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker > .run(ThreadPoolExecutor.java:675) > at java.lang.Thread.run(Thread.java:534) > 2007-05-02 13:24:15,008 DEBUG [SocketConnectorIoProcessor-0.0] > proxool.Prototyper (Prototyper.java:204) - 000007 (01/02/00) - > Connection #2 created on demand = ACTIVE > 2007-05-02 13:24:15,118 DEBUG [QF/J Session dispatcher: > FIX.4.2:MERL_DROP->NEOV] fix.Application (Application.java:198) - > logging off... > May 2, 2007 1:24:43 PM quickfix.mina.initiator.InitiatorIoHandler > sessionCreated > INFO: MINA session created: /10.68.5.33:4600 > 2007-05-02 13:24:45,024 DEBUG [QF/J Session dispatcher: > FIX.4.2:MERL_DROP->NEOV] fix.Application (Application.java:198) - > logging off... > May 2, 2007 1:25:14 PM quickfix.mina.initiator.InitiatorIoHandler > sessionCreated > INFO: MINA session created: /10.68.5.33:4613 > > > > Merlin Securities - #1 Prime Broker North America, #1 Prime > Broker Single Strategy Funds, #1 Prime Broker Funds Under $100M - > Global Custodian 2007 > > > From: qui...@li... > [mailto:qui...@li...] On Behalf Of Toli > Kuznets > Sent: Monday, April 30, 2007 11:58 AM > To: qui...@li... > Subject: Re: [Quickfixj-users] jdbc logging > > QuickFIX/J Documentation: http://www.quickfixj.org/documentation/ > QuickFIX/J Support: http://www.quickfixj.org/support/ > Robert, > > I believe i know what the problem may be. in QFJ 1.1.0 we fixed a bug > where an error connecting to the Jdbc store caused teh JdbcLog to go > into an infinite recursion and print out the log below: > > java.sql.SQLException: We are already in the process of making 1 > connections and the number of simultaneous builds has been throttled to > 0 > > essentially, it catch an exception making the first db entry, then > would try to log the exception, and never stop. you get the idea. > > > I'm still baffled though why my FileStoreFactory code (no JDBC > logging) will not work with the 1.1.0 libraries though... > > in that case, you are not dealing with JdbcLog so everything worked > fine - your system worked correctly and the above situation didn't > happen. > > If you look at the output of QFJ 1.1, you should see somewhere a line > saying something about encountering a "write to Jdbc" failure and > quitting the JdbcLog. > > Still not sure why your app will quit completely in case of a JdbcLog > failure - it should just not log, but the app itself should keep > working. > > So see if your database is setup correctly, make sure you can log on > to it with the credentials supplied in the SessionSettings, etc. > > Also, if you can, try to run it in the debugger and trap all > Errors/Exceptions, maybe for some reason JdbcLog throws some error > that kills your entire app? > > ------------------------------------------------------------------------ > - > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > > > -------------------------------------------------------- > > This message contains information from Merlin Securities, LLC, or > from one of its affiliates, that may be confidential and > privileged. If you are not an intended recipient, please refrain > from any disclosure, copying, distribution or use of this > information and note that such actions are prohibited. If you > have received this transmission in error, please notify the > sender immediately by telephone or by replying to this transmission. > > Merlin Securities, LLC is a registered broker-dealer. Services > offered through Merlin Securities, LLC are not insured by the > FDIC or any other Federal Government Agency, are not deposits of > or guaranteed by Merlin Securities, LLC and may lose value. > Nothing in this communication shall constitute a solicitation or > recommendation to buy or sell a particular security. > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Quickfixj-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfixj-users > |