enhancement
major
minor
major
minor
defect
With #25881, an annotation was removed that could set "model-annotations" on the table definitions of legacy types. However, the corresponding configurations set in the baseline of the database definition were not removed. Instead, the entire model baseline was reset. As a result, an application running the new software version but using an older data version will no longer boot, and an application that attempts to perform its own (automatic) model migrations alongside the update will be unable to do so.
Caused by: com.top_logic.basic.config.ConfigurationException: List entry elements '[key-attributes, annotation]' expected, but got 'model-annotations' for property 'annotations' (com.top_logic.dob.schema.config.MetaObjectConfig.getAnnotations()) at [no name] line 920 column 28.
at com.top_logic.basic.config.ConfigurationReader$Handler.getElementDescriptor(ConfigurationReader.java:1116)
at com.top_logic.basic.config.ConfigurationReader$Handler.readElementDescriptor(ConfigurationReader.java:1053)
at com.top_logic.basic.config.ConfigurationReader$Handler.readListEntry(ConfigurationReader.java:859)
at com.top_logic.basic.config.ConfigurationReader$Handler.handleCollection(ConfigurationReader.java:727)
at com.top_logic.basic.config.ConfigurationReader$Handler.readElementValue(ConfigurationReader.java:664)
at com.top_logic.basic.config.ConfigurationReader$Handler.readContents(ConfigurationReader.java:522)
at com.top_logic.basic.config.ConfigurationReader$Handler.readNextElement(ConfigurationReader.java:205)
at com.top_logic.basic.config.ConfigurationReader$Handler.readConfigurationItem(ConfigurationReader.java:1317)
at com.top_logic.basic.config.ConfigurationReader$Handler.handleMapAdd(ConfigurationReader.java:1156)
at com.top_logic.basic.config.ConfigurationReader$Handler.readMapEntry(ConfigurationReader.java:802)
at com.top_logic.basic.config.ConfigurationReader$Handler.readContents(ConfigurationReader.java:503)
at com.top_logic.basic.config.ConfigurationReader$Handler.readNextElement(ConfigurationReader.java:205)
at com.top_logic.basic.config.ConfigurationReader$Handler.readConfigurationItem(ConfigurationReader.java:1317)
at com.top_logic.basic.config.ConfigurationReader$Handler.readItemConfig(ConfigurationReader.java:1086)
at com.top_logic.basic.config.ConfigurationReader$Handler.readItemConfig(ConfigurationReader.java:752)
at com.top_logic.basic.config.ConfigurationReader$Handler.readElementValue(ConfigurationReader.java:654)
at com.top_logic.basic.config.ConfigurationReader$Handler.readContents(ConfigurationReader.java:522)
at com.top_logic.basic.config.ConfigurationReader$Handler.readNextElement(ConfigurationReader.java:205)
at com.top_logic.basic.config.ConfigurationReader$Handler.readConfigurationItem(ConfigurationReader.java:1317)
at com.top_logic.basic.config.ConfigurationReader$Handler.parseContents(ConfigurationReader.java:167)
at com.top_logic.basic.config.ConfigurationReader$Handler.parse(ConfigurationReader.java:112)
at com.top_logic.basic.config.ConfigurationReader.parseAndClose(ConfigurationReader.java:2097)
at com.top_logic.basic.config.ConfigurationReader.readInternal(ConfigurationReader.java:2077)
at com.top_logic.basic.config.ConfigurationReader.readInternal(ConfigurationReader.java:2060)
at com.top_logic.basic.config.ConfigurationReader.read(ConfigurationReader.java:2043)
at com.top_logic.basic.config.ConfigurationReader.read(ConfigurationReader.java:2005)
at com.top_logic.basic.config.TypedConfiguration.readConfig(TypedConfiguration.java:723)
at com.top_logic.basic.config.TypedConfiguration.parse(TypedConfiguration.java:679)
at com.top_logic.basic.config.TypedConfiguration.parse(TypedConfiguration.java:655)
at com.top_logic.basic.config.TypedConfiguration.fromString(TypedConfiguration.java:634)
at com.top_logic.knowledge.service.db2.KBSchemaUtil.parseSchema(KBSchemaUtil.java:99)
at com.top_logic.knowledge.service.db2.KBSchemaUtil.loadSchema(KBSchemaUtil.java:72)
... 50 more
The database definition contains constructs as follows:
<metaobject
db_name="PERSON"
object_name="Person"
object_type="MOKnowledgeObject"
super_class="KnowledgeObject"
>
<annotations>
<annotation config:interface="com.top_logic.knowledge.service.xml.annotation.ImplementationBindingAnnotation">
<binding application-type="com.top_logic.knowledge.wrap.person.Person"/>
</annotation>
<model-annotations>
<main-properties properties="_self,name,locale"/>
</model-annotations>
</annotations>
<mo_attribute
att_name="name"
att_type="String"
mandatory="true"
/>
...
Data Migration
Data migration occurs automatically the next time the application is booted with the new software version.
Test
- Set up the application with a 7.4 database and then boot it with the 7.5 software version.
- Test implemented in #26798