In This Section

Compatibility Matrix

Below lists the changes for ADM generated code compatibility. See Adm Compatibility Level documentation for an explanation on ADM generated code compatibility. 

ADM Maven
PluginVersion

ADM Compat
Level

Notes

3.0.503 -> 3.1.103

2.4.0

First 3.0 release

Generated Code can run with 3.0.503 to 3.1.103

3.1.104 -> 3.2.120

3.0.0

Enhancements for detecting incompatible enums required new apis in generated code

Generated Code can run with 3.1.104 to 3.X

3.2.121 -> 3.4.67

3.1.0

Adding support for Field Interest registration for Xbuf

Generated Code can run with 3.2.121 to 3.X

3.4.373 -> 3.5.1263.4.0

Support for Message copy
Support for RepeatedFieldBuffer access in Xbuf.

Generated Code can run with 3.4.373 to 3.X

3.5.127 -> 3.6.X3.4.1

Support for pass-through field preserving entity copy and Message.copyXXXTo(Entity)

Generated Code can run with 3.4.373 to 3.X

(info) These were introduced 3.5.127, 3.6.84 patch releases ... prior 3.5 and 3.6 versions were
at ADM compat level of 3.4.0

3.7.162 -> 3.7.2163.7.0

Changed protobuf message copy() to preserve pass-through fields, changed getXXXTo implementation to use copyInto() for embedded fields.

Changed Xbuf generated entities to use XbufHeuristics class to source deync policy and sparse optimization flags ... requires new platform APIs. 
Change Xbuf generated objects to use XbufHeuristics class to source pooling parameters ... requires new platform APIs.

Generated Code can run with 3.7.162 to 3.X

3.7.217 -> 3.8.633.8.0

Changed Xbuf embedded entity array accessors to allow for reduce memory usage. The changes to the generated code require new platform APIs

Generated Code can run with 3.7.217 to 3.X

3.8.64 -> 3.8.1083.8.1

Changed the ADM generated lendXXX(XString val) method to allow it to accept a null value without throwing a NullPointerException

See XPLATFORM-1823

Generated Code can run with 3.7.217 to 3.X

3.8.126 - 3.8.1583.8.2

Fixes a compiler warning in XBuf generated code relating the deprecated PktBuffer.create method.

See XPLATFORM-1886

Generated Code can run with 3.7.217 to 3.X

3.8.159 -> 3.8.1873.9.0

Changes the code generated by ADM for collection nodes by moving more of the implementation code into the platform collection base classes.

See XPLATFORM-1903

Generated Code can run with 3.8.159 to 3.X

3.8.188 -> 3.8.1933.9.1

Optimizing Xbuf generated messages' <T> getXXXTo(XString.Factory<T> factory) methods for better performance with FrameFields.

See XPLATFORM-1915

Generated Code can run with 3.8.159 to 3.X

3.8.194 ->3.11.03.9.2

New code generator option to generate embedded entities as non final. This change does not other wise change the generated apis.

See XPLATFORM-1445

Generated Code can run with 3.8.159 to 3.X

3.11.55 -> 3.12.x3.10.0

New State Replication Map types and ERogFieldNotWriteable exceptions require new runtime APIs.

See XPLATFORM-2080

Generated Code can run with 3.11.55 to 3.X

3.14.194.0.0

Changed the data type fields ids of generated classes from int to long

See XPLATFORM-2228

Generated Code can run with 3.14.19 to 3.X

3.16.154.1.0

Added support to track and report memory utilization statistics. The changes to the generated code require new platform APIs

See RUMI-107

Generated Code can run with 3.16.14 to 3.X

API Compatibilty Goals

Wire Compatibility

Wire compatibility refers to the ability to be able to deserialize messages and entities off the wire or from disk. 

API Compatibility

API compatibility refers to the compatiblity between code generated by one version of the platform, and its compatiblity at runtime with another version. 

Versioning Recommendations

This section provides recommendations on how to version your projects to ensure that they can use the latest and greatest ADM generated source code for their models.  

Small Projects

For small projects that are not versioned independently, regenerating ADM models with each release is the best way to ensure that your generated models are API compatible with the runtime. 

Large Projects

For larger organizations that have applications that are versioned independently and upgrade X Platform version in a staggered fashion, it can be a challenge if those applications share the same models while on different X versions. There are 2 strategies for handling this situation:

Strategy 1 - Each Project Builds Private Models

If you have relatively few models, having each project generate and build its own private copy of the generated ADM source code is a simple approach to ensure that each project can use ADM code generated with their target platform version. It can break down if your organization has a lot of shared models, and then Strategy 2 may be more appropriate. 

Strategy 2 - Centrally build platform qualified Models

In this approach, ADM models that are shared by multiple projects are built and managed as independently versioned artifacts. The generated ADM source code is generated against each platform version to be used by the organization as a whole. The resulting artifact is qualified with the X Platform version so that the resulting artifact reflects both the model version and the platform version from which it was generated. 

For example, take an ADM Model called common-messages share by Project A and Project B that are both initially using X Platform 3.1.104, but will be independently upgrading to X 3.2.121.

<model namespace="com.example" defaultFactoryId="1">
  <messages>  
    <message name="MyMessage" factoryid="1" id="1">
        <field name="myIntField" type="Integer" doc="A sample integer field"/>
    </messsage>
  </messages>
</model>

And then the model is changed to add a new long field:

<model namespace="com.example" defaultFactoryId="1">
  <messages>  
    <message name="MyMessage" factoryid="1" id="1">
        <field name="myIntField" type="Integer"/>
        <field name="myLongField" type="Long"/>
    </messsage>
  </messages>
</model>

Under this scheme, the common-messages would be built and packages as:

The above packaging allows each project to independently upgrade to either the model version or a compatible X version as appropriate. If Project B upgrades to platform version 3.2.121 it could do the following: