I was digging through some of the Essbase Java API internals the other day, trying to work around an issue I was encountering with Vess, my Essbase JDBC driver. Along the way I came across a constants file with a fun history (of sorts) of Essbase versions.
Complex software packages will often track their version somehow. This is for many reasons, but a very common one is so the software has a way to gracefully handle version discrepancies. For example, some client software (perhaps the latest version of Smart View) may be working with an older version of the Essbase server. If there was some feature that came out that Smart View supports but isn’t available in the older version of Essbase that it’s connecting to, it might find this out by asking the server for its version. The client can then hide/disable the feature as needed.
That said, the Essbase Java API has a file that tracks various versions of Essbase. This shouldn’t necessarily be interpreted as a full version history, but when the Essbase developers need to make a change that could affect version compatibility, it will often result in a change to the internal version matrix.
In any case, the constants in the file tell kind of an interesting story. We can see a handful of code names in the variables, such as Gemini, Orion, Levi, Sunspot, Eclipse, Cromwell, and Beckett.
Other versions are just designated by a major/minor/patch/build combination, such as Essbase 6.2, 6.5, 6.5.1 (this is the version of Essbase I cut my teeth on!), 7.0.0, 7.1, 9.0.1, 9.2.0.2, 9.2.0.3, 9.2.1, 9.3.1 (one of my favorite versions), and 9.3.1.4.
Then the jump to version 11 happens, where we can see 11.1.1, 11.1.1.2.1, 11.1.1.3, 11.1.2, 11.1.2.1, 11.1.2.2, 11.1.2.2.1, 11.1.2.2.5, and 11.1.2.3.
Curiously in the 11.x series, at some point there was an introduction of a seemingly separate series of variables, for editions 11.1.2.2.1 PV0, 11.1.2.3 PV0, and 11.1.2.3 PV1. I’m not totally clear what the PV is meant to indicate (patch version?).
Lastly, at some point someone introduced a set of three variables to track the release/revision/patch that would apparently always be the current version of the API, but it was only ever set with major version 6, minor version 5, and patch 0. I think someone decided that the variable structure, while seemingly clean/useful, was untenable in the long haul.
Lastly, there are a couple of “versions” that coincide with specific features that came out or were otherwise necessitated by testing: ECLIPSE_ALPHA, ECLIPSE_ALPHA_II, Hybrid Analysis (HYBRIDANALYSIS), non-unique names (NONUNIQUENAME), UNICODE, and some sort of “parity” (PARITY) marker that has the same version as 11.1.2.1. Un unqualified version variable seems to match up with the version of the library itself (I took this from an 11.1.2.3 JAR file, hence it matches the entry for 11.1.2.3).
I remember an Oracle product manager at some time indicating that the code names for Essbase versions were authors – hence Beckett and Cromwell – but I also distinctly remember hearing that one of these versions was codenamed “Tallyrand”, which isn’t reflected in the code names for this list. I’d be curious what some of the other code names were along the way, so if anyone out there knows, please send me an email and I can post them here for posterity (if nothing else).
Here’s the full list from the file from 11.1.2.3 for those that are curious:
public static final int ESS_API_VERSION = 725552; public static final int ESS_API_VERSION_11_1_2_3 = 725552; public static final int ESS_API_VERSION_11_1_2_2_5 = 725541; public static final int ESS_API_VERSION_11_1_2_2_1 = 725537; public static final int ESS_API_VERSION_11_1_2_2 = 725536; public static final int ESS_API_VERSION_PARITY = 725520; public static final int ESS_API_VERSION_11_1_2_1 = 725520; public static final int ESS_API_VERSION_11_1_2 = 725504; public static final int ESS_API_VERSION_11_1_1_3 = 725296; public static final int ESS_API_VERSION_11_1_1_2_1 = 725281; public static final int ESS_API_VERSION_11_1_1 = 725248; public static final int ESS_API_VERSION_9314 = 602432; public static final int ESS_API_VERSION_931 = 602368; public static final int ESS_API_VERSION_BECKETT = 602112; public static final int ESS_API_VERSION_921 = 598272; public static final int ESS_API_VERSION_9203 = 598064; public static final int ESS_API_VERSION_9202 = 598048; public static final int ESS_API_VERSION_901 = 590080; public static final int ESS_API_VERSION_NONUNIQUENAME = 589824; public static final int ESS_API_VERSION_CROMWELL = 463360; public static final int ESS_API_VERSION_71 = 462848; public static final int ESS_API_VERSION_UNICODE = 458752; public static final int ESS_API_VERSION_700 = 458752; public static final int ESS_API_VERSION_651 = 413952; public static final int ESS_API_VERSION_65 = 413696; public static final int ESS_API_VERSION_HYBRIDANALYSIS = 413696; public static final int ESS_API_VERSION_62 = 401408; public static final int ESS_API_VERSION_ECLIPSE = 329472; public static final int ESS_API_VERSION_ECLIPSE_ALPHA_II = 329216; public static final int ESS_API_VERSION_ECLIPSE_ALPHA = 328960; public static final int ESS_API_VERSION_SUNSPOT = 328192; public static final int ESS_API_VERSION_LEVI = 327936; public static final int ESS_API_VERSION_ORION = 327680; public static final int ESS_API_VERSION_GEMINI = 262144; public static final short ESS_API_RELEASE = 6; public static final short ESS_API_REVISION = 5; public static final short ESS_API_PATCH = 0; public static final long ESS_API_VERSION_11_1_2_3_PV1 = 3116222111612928L; public static final long ESS_API_VERSION_11_1_2_3_PV0 = 3116222111547392L; public static final long ESS_API_VERSION_11_1_2_2_1_PV0 = 3116157687037952L;