major
minor
minor
#27027
Declarative forms: SelectField disappears after upload if option list depends on mandatory property
#27042
MaintenanceJspBase should write to the log first, then to the client, instead of the other way around.
defect
minor
#26992
Asynchronous loading of layouts for themes crashes short-running test cases
If you run a test case individually, e.g., /com.top_logic.bpe.app/src/test/java/test/com/top_logic/bpe/app/scripted/formeditor/TestForeignObjects.script.xml, it will run successfully (showing "green"), but the shutdown process crashes because errors are logged:
junit.framework.AssertionFailedError: Errors (2) logged during startup:
com.top_logic.gui.ThemeFactory module not started.
com.top_logic.basic.thread.ThreadContextManager module not started.
at test.com.top_logic.layout.scripting.ApplicationTestSetup.basicRun(ApplicationTestSetup.java:89)
at test.com.top_logic.basic.NamedTestSetup$1.protect(NamedTestSetup.java:35)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at test.com.top_logic.basic.NamedTestSetup.run(NamedTestSetup.java:39)
at test.com.top_logic.basic.NamedTestDecorator.basicRun(NamedTestDecorator.java:40)
at test.com.top_logic.basic.NamedTestSetup$1.protect(NamedTestSetup.java:35)
...
at junit.framework.TestResult.runProtected(TestResult.java:124)
at test.com.top_logic.basic.NamedTestSetup.run(NamedTestSetup.java:39)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.extensions.TestSetup.run(TestSetup.java:25)
at test.com.top_logic.basic.LoggingTestSetup.run(LoggingTestSetup.java:207)
...
Caused by: java.lang.IllegalStateException: com.top_logic.gui.ThemeFactory module not started.
at com.top_logic.basic.module.ModuleUtil.invalidStateNotStarted(ModuleUtil.java:1035)
at com.top_logic.basic.module.BasicRuntimeModule.getImplementationInstance(BasicRuntimeModule.java:90)
at com.top_logic.gui.ThemeFactory.getInstance(ThemeFactory.java:90)
at com.top_logic.gui.ThemeFactory.getTheme(ThemeFactory.java:81)
at com.top_logic.layout.processor.LayoutResolver.newRuntimeResolver(LayoutResolver.java:339)
at com.top_logic.layout.editor.DynamicComponentDefinition.createLayoutResolver(DynamicComponentDefinition.java:261)
at com.top_logic.layout.editor.DynamicComponentDefinition.createTemplateBody(DynamicComponentDefinition.java:253)
at com.top_logic.layout.editor.DynamicComponentDefinition.createComponentConfig(DynamicComponentDefinition.java:330)
at com.top_logic.layout.editor.LayoutTemplateUtils.createUnqualifiedComponentConfig(LayoutTemplateUtils.java:162)
at com.top_logic.layout.editor.LayoutTemplateUtils.getInstantiatedLayoutTemplate(LayoutTemplateUtils.java:139)
at com.top_logic.mig.html.layout.LayoutTemplateCall.createLayoutConfiguration(LayoutTemplateCall.java:43)
at com.top_logic.mig.html.layout.LayoutTemplateCall.<init>(LayoutTemplateCall.java:34)
at com.top_logic.mig.html.layout.ComponentConfigurationBuilder.createTemplateCallLayout(ComponentConfigurationBuilder.java:303)
at com.top_logic.mig.html.layout.ComponentConfigurationBuilder.createLayoutFromTemplate(ComponentConfigurationBuilder.java:187)
at com.top_logic.mig.html.layout.ComponentConfigurationBuilder.createLayout(ComponentConfigurationBuilder.java:133)
at com.top_logic.mig.html.layout.ComponentConfigurationBuilder.build(ComponentConfigurationBuilder.java:123)
at com.top_logic.mig.html.layout.LayoutStorage.createLayout(LayoutStorage.java:503)
at com.top_logic.mig.html.layout.LayoutStorage.installLayout(LayoutStorage.java:454)
at com.top_logic.mig.html.layout.LayoutStorage.installLayout(LayoutStorage.java:436)
at com.top_logic.mig.html.layout.LayoutStorage$1.run(LayoutStorage.java:413)
at com.top_logic.mig.html.layout.LayoutStorage$1.run(LayoutStorage.java:1)
at com.top_logic.gui.MultiThemeFactory.withTheme(MultiThemeFactory.java:237)
at com.top_logic.mig.html.layout.LayoutStorage.fetchAvailableLayouts(LayoutStorage.java:403)
at com.top_logic.mig.html.layout.LayoutStorage.loadLayoutsForNonDefaultThemes(LayoutStorage.java:256)
at com.top_logic.mig.html.layout.LayoutStorage.lambda$2(LayoutStorage.java:240)
at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:312)
at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:346)
at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:339)
at com.top_logic.mig.html.layout.LayoutStorage.lambda$1(LayoutStorage.java:239)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
The problem is that after execution, the test case shuts down the application, but threads that load the layouts in question are still running in the shutting-down application. Although some precautions have already been taken against this in LayoutStorage, they do not work.
Solution
Do not shut down LayoutStorage as long as its thread for loading the layouts is still running.
Test
- No test.