Skip to content

Commit

Permalink
updated readmes
Browse files Browse the repository at this point in the history
  • Loading branch information
david-gibbs-ig committed Nov 13, 2023
1 parent aa69002 commit 6e5f9d9
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 56 deletions.
48 changes: 26 additions & 22 deletions customising-quickfixj.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ The standard distribution of ```quickfixj-core``` can be used with custom artefa

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/).

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.
This intentionally provides consistency with the prior QuickFIX/J 2 release to ease migration to QuickFIX/J 3.
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.
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.

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

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

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

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.

Expand All @@ -55,7 +55,26 @@ Code generation using ```BigDecimal``` is incompatible at runtime with ```int```
Runtime incompatibilities can be resolved by:
* Amending the QuickFIX Dictionary to coerce the code generation and/or validation
* Changing the ordering of code generation and/or overwrite behaviour of code generation
* Building independent artefacts for conflicting versions and not using them in the same runtime
* Omitting incompatible versions from your customised build
* Building artefacts independently for the conflicting versions and ensuring they are not used them in the same runtime

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

### **Customising the FIX Protocol for specialised Rules of Engagement**

A Rules of Engagement can include customisation Messages, Components and Fields, including User Defined elements.

It is not necessary to maintain a fork of the entire QuickFIX/J project to provide customised QuickFIX Dictionaries and to
generate type-safe libraries that are interoperable with QuickFIX/J.

[FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) is intended for customisation to produce machine-readable Rules of Engagement.

Consider creating a new project (or projects) to build the Messages, Components and Fields as needed for your specific Rules of Engagement.

Edit the QuickFIX Dictionary or FIX Orchestra Repository (Orchestration) as required and
build the Messages, Components and Fields packages using the tools provided by the QuickFIX/J projects.

QuickFIX/J Dictionaries, FIX Orchestra Orchestrations and/or documents can also be generated.

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

Expand All @@ -70,21 +89,6 @@ The following describes how to use ```quickfixj-core``` from QuickFIX/J 3 witho
* 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**
* if you want to use Messages, Components and/or Fields from FIX Latest while preferring legacy constants,
manipulate the order of code generation and/or the over-write behaviour of code behaviour to prefer earlier versions of FIX.
* For example, prevent FIX Latest code generation from over-writing existing generated sources (Fields).

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

### **Customising the FIX Protocol for specialised Rules of Engagement**

A Rules of Engagement can include customisation Messages, Components and Fields, including User Defined elements.

This can be accomplished by creating a new project to build the Messages, Components and Fields as needed for your specific Rules of Engagement.
Edit the QuickFIX Dictionary or FIX Orchestra Repository (Orchestration) as required and
build the Messages, Components and Fields packages using the tools provided by the QuickFIX/J projects.
It is not necessary to maintain a fork of the entire QuickFIX/J project to provide customised QuickFIX Dictionaries and to
generate type-safe libraries that are interoperable with QuickFIX/J.
QuickFIX/J Dictionaries, FIX Orchestra Orchestrations and/or documents can also be generated.

[FIX Orchestra](https://www.fixtrading.org/standards/fix-orchestra/) is intended for customisation to produce machine-readable Rules of Engagement.
For example, generate FIX Latest first and overwrite the generated Field classes by subsequently running code generation for an earlier version.

See [QuickFIX/J Messages](./quickfixj-messages/readme.md) for details of the build and recommendation for **how to implement custom builds.**
6 changes: 2 additions & 4 deletions quickfixj-core/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

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

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``.
The core engine depends on ```quickfixj-base```. A small number of derived Fields are provided by ```quickfixj-base``.

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.
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.

## Developing quickfixj-core

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

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.

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.
Loading

0 comments on commit 6e5f9d9

Please sign in to comment.