Summary
Starting with version 3.1.0, Marketcetera is offering the full stack as open source, licensed under GPLv2. Previously, some artifacts, most notably the DARE (Deploy Anywhere Routing Engine) and the Marketcetera cluster architecture were held back as private, closed-source. Some components remain closed source, like our market data adapters, due to binding non-disclosure agreements with the providers.
We are in the process of making the source archive that houses the previously closed-source components publicly available. This process involves vetting the code itself for FOSS use and reviewing the components that use external licenses to make sure they are compatible for release as open-source.
Download
Download and build the public components.
Prepare your environment: create or edit your Maven settings.xml
file. In Unix environments, this file will be at ~/.m2/settings.xml
.
In order to run the application from the development environment, you must provide two things in settings.xml
:
- Provide a unique name for
metc.exsim.qf.sender.comp.id
- anything will do. I've used <name>-<project>-<machine> here, but you can use anything you want. - Provide a database environment. I've included the blocks for Derby, Postgres, MySQL, and Oracle here. Postgres is uncommented here, the rest are disabled by comments. You must set up the database and the user/password, which is not covered in this document.
<settings> <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <mvn.build.number>1</mvn.build.number> <!-- Core --> <metc.exsim.qf.sender.comp.id>colin-core-callisto</metc.exsim.qf.sender.comp.id> <!-- Derby --> <!--metc.jdbc.user>metc</metc.jdbc.user> <metc.jdbc.password>pw4metc</metc.jdbc.password> <metc.jdbc.driver>org.apache.derby.jdbc.EmbeddedDriver</metc.jdbc.driver> <metc.jdbc.url>jdbc:derby:target/metc;create=true</metc.jdbc.url> <metc.jdbc.testquery>values 1</metc.jdbc.testquery> <metc.hibernate.dialect>org.hibernate.dialect.DerbyTenSevenDialect</metc.hibernate.dialect--> <!-- Postgres --> <metc.jdbc.user>metc</metc.jdbc.user> <metc.jdbc.password>pw4metc</metc.jdbc.password> <metc.jdbc.driver>org.postgresql.Driver</metc.jdbc.driver> <metc.jdbc.url>jdbc:postgresql://127.0.0.1/metc</metc.jdbc.url> <metc.jdbc.testquery>select 1</metc.jdbc.testquery> <metc.hibernate.dialect>org.hibernate.dialect.PostgreSQLDialect</metc.hibernate.dialect> <!-- MySQL --> <!-- Do not use MySQL < 5.6 - does not support datetimestamp milliseconds --> <!--metc.jdbc.user>metc</metc.jdbc.user> <metc.jdbc.password>pw4metc</metc.jdbc.password> <metc.jdbc.driver>com.mysql.jdbc.Driver</metc.jdbc.driver> <metc.jdbc.url>jdbc:mysql://localhost:3306/metc</metc.jdbc.url> <metc.jdbc.testquery>select 1</metc.jdbc.testquery> <metc.hibernate.dialect>org.marketcetera.persist.MarketceteraMySQL5Dialect</metc.hibernate.dialect --> <!-- Oracle --> <!--metc.jdbc.user>metc</metc.jdbc.user> <metc.jdbc.password>pw4metc</metc.jdbc.password> <metc.jdbc.driver>oracle.jdbc.driver.OracleDriver</metc.jdbc.driver> <metc.jdbc.url>jdbc:oracle:thin:@10.10.25.180:1521:xe</metc.jdbc.url> <metc.jdbc.testquery>select 1 from DUAL</metc.jdbc.testquery> <metc.hibernate.dialect>org.hibernate.dialect.Oracle10gDialect</metc.hibernate.dialect--> </properties> </profile> </profiles> </settings>
Download the newly released components:
$ cd ~/marketcetera/workspaces/base/code $ wget -O private.zip "https://metc-source.s3.amazonaws.com/3.1.0/private.zip?AWSAccessKeyId=0BE1WRCKRJH2ZKPPX0G2&Expires=1570721807&Signature=PVg4Z9LPQ5sVUffQM7KePDLcfqE%3D" $ unzip private.zip $ cd private $ mvn -DskipTests install eclipse:eclipse
Run the application:
$ cd ~/marketcetera/workspaces/base/code/private/source/ors $ mvn -PexecuteDBInit exec:java & $ tail -f target/logs/dare-instance1.log
Look for the following in the log:
10 Oct 2018 08:00:46,298 INFO [hz.matp.event-3] metc.brokers (BrokerServiceImpl.java:1408) - +---------+-----------+ ! Brokers ! host1-1 ! +---------+-----------+ ! exsim ! available ! +---------+-----------+ 10 Oct 2018 08:00:46,300 DEBUG [OrderMessageProcessingQueue-FIXT.1.1:colin-core-callisto->MRKTC-EXCH - FIXT.1.1:colin-core-callisto->MRKTC-EXCH] ors.brokers.Broker (Broker.java:305) - Analyzed QuickFIX/J message: Validation error Invalid MsgType, field=-1 Header BeginString [8] = FIXT.1.1 BodyLength [9] = 97 MsgSeqNum [34] = 1 MsgType [35] = LOGON [A] SenderCompID [49] = MRKTC-EXCH SendingTime [52] = 20181010-15:00:46.342 TargetCompID [56] = colin-core-callisto Body null [98] = 0 null [108] = 30 null [141] = Y null [1,137] = 9 Trailer CheckSum [10] = 003 10 Oct 2018 08:00:46,306 INFO [OrderMessageProcessingQueue-FIXT.1.1:colin-core-callisto->MRKTC-EXCH - FIXT.1.1:colin-core-callisto->MRKTC-EXCH] marketcetera.ors.QuickFIXApplication (QuickFIXApplication.java:1524) - Sending reply 'FIX Response:{BrokerID=exsim,Originator=Broker,Hierarchy=Flat,FIX Message=8=FIXT.1.19=9735=A34=149=MRKTC-EXCH52=20181010-15:00:46.34256=colin-core-callisto98=0108=30141=Y1137=910=003,ActorUserID=null,ViewerUserID=null}' from QuickFIX/J application 10 Oct 2018 08:00:46,330 INFO [QF/J Session dispatcher: FIXT.1.1:colin-core-callisto->MRKTC-EXCH] marketcetera.ors.QuickFIXApplication (QuickFIXApplication.java:1436) - Sending logon status 'true' for broker 'ID 'exsim'; name 'MATP Exchange Simulator'; session 'FIXT.1.1:colin-core-callisto->MRKTC-EXCH'' from QuickFIX/J application 10 Oct 2018 08:00:54,173 INFO [pool-9-thread-1] marketcetera.core.SystemInformationLogger (SystemInformationLogger.java:145) - +---------------------------+ ! Ports in Use ! +---------------------------+ ! Port ! Description ! +------+--------------------+ ! 9000 ! Web Service ! +------+--------------------+ ! 9100 ! DARE RPC Service ! +------+--------------------+ ! 9400 ! Cluster Service ! +------+--------------------+ ! 9500 ! STOMP Service ! +------+--------------------+ ! 9600 ! DARE JMS Service ! +------+--------------------+ ! 9900 ! JMS JMX Service ! +------+--------------------+ ! 9950 ! JMX Remote Service ! +------+--------------------+