In This Section

Compatibility Matrix

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

Core X 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 -> Latest3.4.0

Support for Message copy
Support for RepeatedFieldBuffer access in Xbuf.

Generated Code can run with 3.4.373 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 then 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 approaches to handling this situation:

Strategy 1 - Each Project Builds Private Models

If you have relatively few models, simply 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 Stategy 2 below 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 and 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. 

Take for example 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: