Here is a possible solution to the versioned message id problem:
o The message resolver needs two pieces of information from its callers:
1) the actual message ID, 2) the derby version that its caller was
compiled at.
o The names of built message files need to encode the derby version
number. Then the message resolver can look up a version-specific string
corresponding to the message id.
In practice this would mean the following:
o All calls to the message resolver can be rototilled with an extra
argument which holds a constant, DERBY_VERSION. The value of this
constant can be bumped with each release.
o The Derby build can create message files whose names contain the
current value of DERBY_VERSION.
So, for example, the build would create m17_en.1012.properties instead
of m17_en.properties.
And code would throw exceptions like this:
throw StandardException.newException(SQLState.DERBY_VERSION,
SQLState.LANG_SYNTAX_ERROR, feature);
rather than
throw StandardException.newException(SQLState.LANG_SYNTAX_ERROR,
feature);