Skip to content

Commit d97fdd1

Browse files
committed
Merge branch 'fix-orchestra-with-updated-project-structure' of https://github.com/david-gibbs-ig/quickfixj into fix-orchestra-with-updated-project-structure
2 parents fcc76bf + 6e5f9d9 commit d97fdd1

File tree

7 files changed

+88
-60
lines changed

7 files changed

+88
-60
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ target/
1212
# ignore NetBeans configuration
1313
nb-configuration.xml
1414
*.bak
15+
.mvn/
16+
mvn*

customising-quickfixj.md

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ The standard distribution of ```quickfixj-core``` can be used with custom artefa
1111

1212
To build custom artefacts it's helpful to understand how QuickFIX/J builds the Field, Component and Message classes from the QuickFIX/J dictionaries and from [FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/).
1313

14-
QuickFIX/J reference implementations for FIX versions FIX4.0 to FIX5.0sp2 and for FIXT1.1 are generated from the QuickFIX dictionaries for the specific version. The dictionaries are located in the ```src/main/resources``` directory of the respective modules of the ```quickfixj-messages``` module.
15-
This intentionally provides consistency with the prior QuickFIX/J 2 release to ease migration to QuickFIX/J 3.
14+
The QuickFIX/J reference implementations for FIX versions FIX4.0 to FIX5.0sp2 and for FIXT1.1 are generated from the QuickFIX dictionaries for the specific version. The dictionaries are located in the ```src/main/resources``` directory of the respective modules of the ```quickfixj-messages``` module.
15+
Maintaining the FIX4.0 to FIX5.0sp2 builds intentionally provides consistency with the prior QuickFIX/J 2 release in order to ease migration to QuickFIX/J 3.
1616

17-
The QuickFIX/J reference implementation for FIX Latest is generated from a [FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) repository file.
18-
An implementation derived from the standard FIX Orchestra repository is known as an "_orchestration_".
17+
The most recent standard is defined as [FIX Latest](https://www.fixtrading.org/online-specification/). The QuickFIX/J reference implementation for FIX Latest is generated from a [FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) repository file.
18+
An implementation or customisation of the FIX Standars derived from the FIX Orchestra repository is known as an "_orchestration_".
1919
The standard FIX Orchestra repository requires some modification to work well with QuickFIX/J.
2020
This is done by the ```quickfixj-orchestration``` module.
2121
The ```quickfixj-orchestration``` module publishes a modified Orchestra artefact which can then be the basis of a custom FIX Latest build using QuickFIX/J .
@@ -28,7 +28,7 @@ Please see [QuickFIX/J Orchestration](./quickfixj-orchestration/readme.md) for d
2828

2929
### **Enable the use of ```BigDecimal``` for FIX Decimal Data Types**
3030

31-
This behaviour is controlled by the ```${generator.decimal}``` build property. It is "false" by default to avoid surprising side effects of Incompatible Data Types.
31+
This behaviour is controlled by the ```${generator.decimal}``` build property. It is "false" by default to avoid surprising side effects of incompatible data types.
3232

3333
To enable the use of ```BigDecimal``` in code generation, set the ```${generator.decimal}``` property to "true" in [quickfixj-messages](./quickfixj-messages/readme.md) and build the message artefacts.
3434

@@ -55,7 +55,26 @@ Code generation using ```BigDecimal``` is incompatible at runtime with ```int```
5555
Runtime incompatibilities can be resolved by:
5656
* Amending the QuickFIX Dictionary to coerce the code generation and/or validation
5757
* Changing the ordering of code generation and/or overwrite behaviour of code generation
58-
* Building independent artefacts for conflicting versions and not using them in the same runtime
58+
* Omitting incompatible versions from your customised build
59+
* Building artefacts independently for the conflicting versions and ensuring they are not used them in the same runtime
60+
61+
See [QuickFIX/J Messages](./quickfixj-messages/readme.md) for details of the build and recommendation for **how to implement custom builds.**
62+
63+
### **Customising the FIX Protocol for specialised Rules of Engagement**
64+
65+
A Rules of Engagement can include customisation Messages, Components and Fields, including User Defined elements.
66+
67+
It is not necessary to maintain a fork of the entire QuickFIX/J project to provide customised QuickFIX Dictionaries and to
68+
generate type-safe libraries that are interoperable with QuickFIX/J.
69+
70+
[FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) is intended for customisation to produce machine-readable Rules of Engagement.
71+
72+
Consider creating a new project (or projects) to build the Messages, Components and Fields as needed for your specific Rules of Engagement.
73+
74+
Edit the QuickFIX Dictionary or FIX Orchestra Repository (Orchestration) as required and
75+
build the Messages, Components and Fields packages using the tools provided by the QuickFIX/J projects.
76+
77+
QuickFIX/J Dictionaries, FIX Orchestra Orchestrations and/or documents can also be generated.
5978

6079
See [QuickFIX/J Messages](./quickfixj-messages/readme.md) for details of the build and recommendation for **how to implement custom builds.**
6180

@@ -70,21 +89,6 @@ The following describes how to use ```quickfixj-core``` from QuickFIX/J 3 witho
7089
* build the required Message artefacts without the FIX Latest code generation. The Fields will then be generated only from legacy FIX Protocol Versions as they were prior to QuickFIX/J 3.0.0 - **or**
7190
* if you want to use Messages, Components and/or Fields from FIX Latest while preferring legacy constants,
7291
manipulate the order of code generation and/or the over-write behaviour of code behaviour to prefer earlier versions of FIX.
73-
* For example, prevent FIX Latest code generation from over-writing existing generated sources (Fields).
74-
75-
See [QuickFIX/J Messages](./quickfixj-messages/readme.md) for details of the build and recommendation for **how to implement custom builds.**
76-
77-
### **Customising the FIX Protocol for specialised Rules of Engagement**
78-
79-
A Rules of Engagement can include customisation Messages, Components and Fields, including User Defined elements.
80-
81-
This can be accomplished by creating a new project to build the Messages, Components and Fields as needed for your specific Rules of Engagement.
82-
Edit the QuickFIX Dictionary or FIX Orchestra Repository (Orchestration) as required and
83-
build the Messages, Components and Fields packages using the tools provided by the QuickFIX/J projects.
84-
It is not necessary to maintain a fork of the entire QuickFIX/J project to provide customised QuickFIX Dictionaries and to
85-
generate type-safe libraries that are interoperable with QuickFIX/J.
86-
QuickFIX/J Dictionaries, FIX Orchestra Orchestrations and/or documents can also be generated.
87-
88-
[FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) is intended for customisation to produce machine-readable Rules of Engagement.
92+
For example, generate FIX Latest first and overwrite the generated Field classes by subsequently running code generation for an earlier version.
8993

9094
See [QuickFIX/J Messages](./quickfixj-messages/readme.md) for details of the build and recommendation for **how to implement custom builds.**

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
<commons.io.version>2.11.0</commons.io.version>
106106
<guava.version>32.0.0-jre</guava.version>
107107
<orchestra.file>OrchestraFIXLatest.xml</orchestra.file>
108-
<org.quickfixj.orchestra.tools.version>1.0.1</org.quickfixj.orchestra.tools.version>
108+
<org.quickfixj.orchestra.tools.version>1.0.2</org.quickfixj.orchestra.tools.version>
109109
<proxool.version>0.9.1</proxool.version>
110110
<jaxen.version>2.0.0</jaxen.version>
111111
</properties>

quickfixj-core/readme.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
This module builds the QuickFIX/J FIX "engine" including supporting capabilities.
44

5-
The core engine depends on ```quickfixj-base``` and does not have compile time dependency on the Field, Component and Messages classes derived from base classes in ```quickfixj-base```. A small number of derived Fields are provided by ```quickfixj-base``.
5+
The core engine depends on ```quickfixj-base```. A small number of derived Fields are provided by ```quickfixj-base``.
66

7-
This module does have <u>**test**</u> dependency on generated message classes. The distinction of <u>*test*</u> dependency is significant as it allows easier [customisation](../customising-quickfixj.md) of QuickFIX/J deployments.
7+
This module has <u>**test**</u> dependency on generated message classes. The distinction of <u>*test*</u> dependency is significant as it allows easier [customisation](../customising-quickfixj.md) of QuickFIX/J deployments.
88

99
## Developing quickfixj-core
1010

1111
To develop this module build ```quickfixj-base``` and ```quickfixj-messages``` first, or build the whole project.
1212

1313
Full ```quickfixj-messages``` build times can be long. See [the ```quickfixj-messages``` readme](../quickfixj-messages/readme.md) for how to do a minimal development build of the messages. Once these dependencies are built then ```quickfixj-core``` can be built and tested independently for higher productivity.
14-
15-
If and when you import the project into an IDE it can be better to exclude or close the ```quickfixj-messages``` module(s) to reduce the memory and computation overheads of importing these large packages.

quickfixj-messages/quickfixj-messages-all/src/main/xsl/minimiseOrchestra.xsl

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
</xsl:template>
1616

1717
<!-- filter out fields that are not used in QFJ tests -->
18+
<!-- Field 1492 ComplexEventStartDate is included to prove successful compilation of a field extending UTCDateOnly -->
1819
<xsl:template
1920
match="fixr:fields/fixr:field[not(
2021
@id = '6' or
@@ -124,6 +125,10 @@
124125
@id = '1402' or
125126
@id = '1403' or
126127
@id = '1404' or
128+
@id = '1483' or
129+
@id = '1484' or
130+
@id = '1491' or
131+
@id = '1492' or
127132
@id = '1779' or
128133
@id = '321007')]"/>
129134

@@ -143,7 +148,9 @@
143148
@id = '2045' or
144149
@id = '2046' or
145150
@id = '2059' or
146-
@id = '2085')]"/>
151+
@id = '2085' or
152+
@id = '2145' or
153+
@id = '2146' )]"/>
147154

148155
<!-- filter out messages that are not used in QFJ tests -->
149156
<xsl:template
@@ -184,7 +191,7 @@
184191
<xsl:template
185192
match="fixr:components/fixr:component[(@id='1003')]/fixr:componentRef" />
186193
<xsl:template
187-
match="fixr:components/fixr:component[(@id='1003')]/fixr:groupRef" />
194+
match="fixr:components/fixr:component[(@id='1003')]/fixr:groupRef[not(@id='2145')]" />
188195

189196
<!-- InstrumentLeg -->
190197
<xsl:template
@@ -261,7 +268,23 @@
261268
match="fixr:groups/fixr:group[(@id='2059')]/fixr:fieldRef[not(@id='54' or
262269
@id='11')]" />
263270

264-
<!-- HopGrp 2085 ______________ -->
271+
<!-- Complex Events -->
272+
<xsl:template
273+
match="fixr:groups/fixr:group[(@id='2145')]/fixr:componentRef" />
274+
<xsl:template
275+
match="fixr:groups/fixr:group[(@id='2145')]/fixr:fieldRef[not(@id='1484')]" />
276+
<xsl:template
277+
match="fixr:groups/fixr:group[(@id='2145')]/fixr:groupRef[not(@id='2146')]" />
278+
279+
<!-- Complex Event Dates -->
280+
<xsl:template
281+
match="fixr:groups/fixr:group[(@id='2146')]/fixr:componentRef" />
282+
<xsl:template
283+
match="fixr:groups/fixr:group[(@id='2146')]/fixr:groupRef" />
284+
<xsl:template
285+
match="fixr:groups/fixr:group[(@id='2146')]/fixr:fieldRef[not(@id='1492')]" />
286+
287+
<!-- HopGrp 2085 ______________ -->
265288
<!-- include everything -->
266289

267290
<!-- ******************************** -->

0 commit comments

Comments
 (0)