Verbesserung
Top-Thema
Detail
Wichtig
Detail
Detail
#25976
Test Fehler bei TL-Script in Executability-Rules in der Anwendungskonfiguration
wir haben eine Anwendungskonfiguration erweitert um eine geskriptete ExecutabilityRule:
<config service-class="com.top_logic.tool.execution.ExecutabilityRuleManager"> <instance class="com.top_logic.tool.execution.ExecutabilityRuleManager"> <definitions> <definition id="ImportedObjectDisabled"> <executability> <rule-by-expression> <decision>x -> if($x.get(`library.common:ImportedObject#imported`) == false, true,#"library.common.ImportedObjectDisabled")</decision> <show-disabled>true</show-disabled> </rule-by-expression> </executability> </definition> </definitions> </instance> </config>
Die Regel wird dann in diversen *layout.xml referenziert, z.B.
<editExecutability> <reference rule-id="ImportedObjectDisabled"/> </editExecutability>
Soweit sogut. Die Anwendung startet ohne Fehler im Log, die Regel wird geladen und ausgewertet, geskriptete Tests sind sowohl manuell wie im Build grün.
Durch die Änderung schlägt der Test testComponentConfigurations fehl mit folgendem Stack:
java.lang.AssertionError: Setup failed for test 'Test suite: test.com.top_logic.layout.component.TestComponentConfiguration'. Cause: Unable to instantiate service 'com.top_logic.tool.execution.ExecutabilityRuleManager'. at test.com.top_logic.basic.NestableTestSetup.setUp(NestableTestSetup.java:146) … at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210) Caused by: com.top_logic.basic.module.ModuleException: Unable to instantiate service 'com.top_logic.tool.execution.ExecutabilityRuleManager'. at com.top_logic.basic.module.TypedRuntimeModule.newImplementationInstance(TypedRuntimeModule.java:508) ... 46 more Caused by: com.top_logic.basic.AbortExecutionException: Aborting execution due to previous errors at com.top_logic.basic.LogProtocol.createAbort(LogProtocol.java:92) ... 62 more Caused by: com.top_logic.basic.config.ConfigurationException: Instantiation of configured class 'com.top_logic.model.search.providers.ExecutabilityByExpression' failed: file:D:/Development/GIT/de.ascon_systems.dreso/de.ascon_systems.dreso.common/webapp/WEB-INF/conf/dreso-common.conf.config.xml line 20 column 28 at com.top_logic.basic.config.DefaultConfigConstructorScheme.toConfigurationException(DefaultConfigConstructorScheme.java:1179) at com.top_logic.basic.module.TypedRuntimeModule.newImplementationInstance(TypedRuntimeModule.java:502) ... 62 more Caused by: java.lang.IllegalStateException: com.top_logic.knowledge.service.PersistencyLayer module not started. at com.top_logic.basic.module.ModuleUtil.invalidStateNotStarted(ModuleUtil.java:1899) at com.top_logic.basic.config.DefaultConfigConstructorScheme$ConfiguredObjectFactory.createInstance(DefaultConfigConstructorScheme.java:1142) ... 85 more
Ich fürchte, über den TL-Script-Aufruf ist der ExecutabilityManager jetzt implizit abhängig vom PersistencyLayer und ggf. anderen Modellservices. Zur „normalen“ Laufzeit fällt das vermutlich nicht auf, weil die Services schon andersweitig vor dem ExecutabilityRuleManager gestartet wurden.
Andererseits gibt es in TestComponentConfiguration#suite() einen eindeutigen Kommentar, dass persistente Objekte nicht in der Konfig angegeben werden dürfen. Heißt, dass, die o.g. Anwendung von TL-Script im ExecutabilityRuleManager bzw. in der Anwendungskonfiguration allgemein ist nicht erlaubt?
Lösung
TL-Skript wird nur übersetzt, wenn der Model-Service und die Persistentschicht aktiv sind. Ansonsten wird nur geparst und bei der ersten Benutzung übersetzt.
Test
- /com.top_logic.demo/src/test/com/top_logic/demo/scripted/layout/executability/TestCommandApprovalService.script.xml - some rules are now registered in the application configuration.