defect
Wenn man ein neues Singleton einführt, wird einem als Datenmigration folgendes vorgeschlagen:
<add-annotations name="my.module">
<annotations>
<singletons>
<singleton name="MY_OBJECT"
type="MyObject"
/>
</singletons>
</annotations>
</add-annotations>
<create-singleton name="MY_OBJECT"
module="my.module"
>
<singleton
table="GenericObject"
type="my.module:MyObject"
/>
</create-singleton>
Wenn man diese durchführt, fährt die Anwendung anschließend jedoch nicht mehr hoch mit folgender Exception:
java.lang.RuntimeException: com.top_logic.basic.module.ModuleException: Unable to start implementation 'com.top_logic.element.model.DynamicModelService@7aa32b52'. at com.top_logic.util.AbstractStartStopListener.contextInitialized(AbstractStartStopListener.java:245) at ... Caused by: com.top_logic.basic.module.ModuleException: Unable to start implementation 'com.top_logic.element.model.DynamicModelService@7aa32b52'. at com.top_logic.basic.module.BasicRuntimeModule.startUpImplementation(BasicRuntimeModule.java:199) at com.top_logic.basic.module.BasicRuntimeModule.startUp(BasicRuntimeModule.java:179) at com.top_logic.basic.module.BasicRuntimeModule.startUp(BasicRuntimeModule.java:152) at com.top_logic.basic.module.ModuleUtil.start(ModuleUtil.java:263) at com.top_logic.basic.module.ModuleUtil.startModuleAndAdd(ModuleUtil.java:768) at com.top_logic.basic.module.ModuleUtil$3.run(ModuleUtil.java:744) at com.top_logic.basic.module.ModuleUtil$3.run(ModuleUtil.java:1) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:404) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:446) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:438) at com.top_logic.basic.module.ModuleUtil.startInThreadContext(ModuleUtil.java:753) at com.top_logic.basic.module.ModuleUtil.startModulesAndAdd(ModuleUtil.java:717) at com.top_logic.basic.module.ModuleUtil.startUp(ModuleUtil.java:243) at com.top_logic.util.AbstractStartStopListener.startTokenSystem(AbstractStartStopListener.java:552) at com.top_logic.util.AbstractStartStopListener$2.run(AbstractStartStopListener.java:260) at com.top_logic.util.AbstractStartStopListener$2.run(AbstractStartStopListener.java:1) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:385) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:446) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:438) at com.top_logic.basic.thread.ThreadContext.inSystemContext(ThreadContext.java:157) at com.top_logic.util.AbstractStartStopListener.boot(AbstractStartStopListener.java:252) at com.top_logic.util.AbstractStartStopListener.contextInitialized(AbstractStartStopListener.java:206) ... 24 more Caused by: java.lang.IllegalStateException: Cannot parse old model configuration, no schema upgrade possible. at com.top_logic.element.model.DynamicModelService.upgradeModel(DynamicModelService.java:422) at com.top_logic.element.model.DynamicModelService.setupModel(DynamicModelService.java:345) at com.top_logic.element.model.DynamicModelService.startUpInContext(DynamicModelService.java:320) at com.top_logic.util.model.ModelService$1.inContext(ModelService.java:224) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:322) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:348) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:341) at com.top_logic.basic.thread.ThreadContext.inSystemContext(ThreadContext.java:176) at com.top_logic.util.model.ModelService.startUp(ModelService.java:220) at com.top_logic.basic.module.ManagedClass.doStart(ManagedClass.java:123) at com.top_logic.basic.module.BasicRuntimeModule.startUpImplementation(BasicRuntimeModule.java:197) ... 45 more Caused by: com.top_logic.basic.config.ConfigurationException: "Errors in context: Invalid indexed property entry for property 'name' (com.top_logic.element.config.SingletonConfig.getName()) at [no name] line 71 column 3695: Multiple entries with key: MY_OBJECT" at com.top_logic.basic.config.InstantiationContextImpl.toConfigurationException(InstantiationContextImpl.java:94) at com.top_logic.basic.config.InstantiationContextImpl.checkErrors(InstantiationContextImpl.java:54) at com.top_logic.basic.config.InstantiationContextAdaptor.checkErrors(InstantiationContextAdaptor.java:60) at com.top_logic.basic.config.AbstractConfigurationReader.checkSuccess(AbstractConfigurationReader.java:237) at com.top_logic.basic.config.AbstractConfigurationReader.read(AbstractConfigurationReader.java:228) at com.top_logic.basic.config.AbstractConfigurationReader.read(AbstractConfigurationReader.java:194) at com.top_logic.basic.config.TypedConfiguration.readConfig(TypedConfiguration.java:732) at com.top_logic.basic.config.TypedConfiguration.parse(TypedConfiguration.java:688) at com.top_logic.basic.config.TypedConfiguration.parse(TypedConfiguration.java:664) at com.top_logic.element.model.DynamicModelService.parseConfig(DynamicModelService.java:491) at com.top_logic.element.model.DynamicModelService.loadTransientModel(DynamicModelService.java:481) at com.top_logic.element.model.DynamicModelService.upgradeModel(DynamicModelService.java:420) ... 55 more
D.h. die Migration legt die Annotation für das Singleton doppelt an. Insbesondere die Klasse com.top_logic.element.model.migration.model.CreateTLSingletonProcessor ruft in Zeile 152 MigrationUtils.modifyTLModel(log, connection, tlModel -> addSingletonDefintion(log, tlModel)); auf, was sie vermutlich nicht tun sollte.