Verbesserung
Wichtig
Detail
Fehlerbehebung
Wichtig
Detail
#27393
Baum - Tabellen: Selektion von mehrfach vorkommenden Zeilenobjekten expandiert Teilbäume / wählt falsche Zeile
#27424
"Container" für neue Grid-Zeile nicht mandatory, aber versteckte NPE, wenn Wert gelöscht wird
Fehlerbehebung
Detail
#27364
Scheduler: Task-Ausführung schlägt bei längeren Ergebnissen fehl
Tasks können Ergebnisse liefern, die in der Task-Anzeige angezeigt werden. Allerdings sind die Zeichen im Ergebnis auf 255 beschränkt, und ein Großteil wird schon durch den Internationalisierungsschlüssel eingenommen, der mitgespeichert wird.
Der Effekt ist, dass der Task fehlschlägt und sein Ergebnis nicht speichern kann:
First Exception: com.top_logic.knowledge.service.KnowledgeBaseException at com.top_logic.basic.ExceptionUtil.createException(ExceptionUtil.java:76) at com.top_logic.util.sched.task.log.TaskLogWrapper.commitTaskEnded(TaskLogWrapper.java:1218) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEnded(TaskLogWrapper.java:277) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEnded(TaskLogWrapper.java:270) at com.top_logic.model.search.providers.ScriptTask.lambda$run$0(ScriptTask.java:67) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:788) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:798) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:231) at com.top_logic.basic.thread.ThreadContext.inSystemContext(ThreadContext.java:175) at com.top_logic.model.search.providers.ScriptTask.run(ScriptTask.java:54) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: com.top_logic.knowledge.service.KnowledgeBaseException: Database operation failed. at com.top_logic.knowledge.service.db2.DefaultDBContext.commitTransaction(DefaultDBContext.java:2827) at com.top_logic.knowledge.service.db2.TransactionImpl.internalCommit(TransactionImpl.java:418) at com.top_logic.knowledge.service.AbstractTransaction.commit(AbstractTransaction.java:71) at com.top_logic.util.sched.task.log.TaskLogWrapper.taskEndedInternal(TaskLogWrapper.java:1245) at com.top_logic.util.sched.task.log.TaskLogWrapper.lambda$commitTaskEnded$2(TaskLogWrapper.java:1214) at com.top_logic.basic.util.retry.Retry.run(Retry.java:85) at com.top_logic.basic.util.retry.Retry.retry(Retry.java:47) at com.top_logic.util.sched.task.log.TaskLogWrapper.commitTaskEnded(TaskLogWrapper.java:1213) ... 9 more Caused by: java.sql.SQLException: Value too long for column "MESSAGE VARCHAR_IGNORECASE(250)": "'class.com.top_logic.model.search.providers.I18NConstants.TASK_MESSAGE__VALUE/sP... (256)"; SQL statement: INSERT INTO "TASK_RESULT" ("BRANCH","IDENTIFIER","REV_MAX","REV_MIN","REV_CREATE","PHYSICAL_RESOURCE","TASK_NAME","MESSAGE","START","END","EXCEPTION_DUMP","WARNINGS","LOG_FILE","RESULT_TYPE","CLUSTER_NAME","CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-214]: INSERT INTO "TASK_RESULT" ("BRANCH","IDENTIFIER","REV_MAX","REV_MIN","REV_CREATE","PHYSICAL_RESOURCE","TASK_NAME","MESSAGE","START","END","EXCEPTION_DUMP","WARNINGS","LOG_FILE","RESULT_TYPE","CLUSTER_NAME","CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) at com.top_logic.basic.sql.SQLH.enhanceMessage(SQLH.java:514) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.enhanceMessage(PrepStmtBasedCompiledStatement.java:207) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.executeUpdate(PrepStmtBasedCompiledStatement.java:64) at com.top_logic.knowledge.service.db2.DefaultDBAccess.insert(DefaultDBAccess.java:982) at com.top_logic.knowledge.service.db2.DefaultDBAccess.insert(DefaultDBAccess.java:961) at com.top_logic.knowledge.service.db2.VersionedDBAccess.store(VersionedDBAccess.java:1084) at com.top_logic.knowledge.service.db2.VersionedDBAccess.update(VersionedDBAccess.java:1040) at com.top_logic.knowledge.service.db2.VersionedDBAccess.updateAll(VersionedDBAccess.java:1001) at com.top_logic.knowledge.service.db2.DefaultDBContext.commitChanged(DefaultDBContext.java:2560) at com.top_logic.knowledge.service.db2.DefaultDBContext.commitTransaction(DefaultDBContext.java:2755) ... 16 more Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column "MESSAGE VARCHAR_IGNORECASE(250)": "'class.com.top_logic.model.search.providers.I18NConstants.TASK_MESSAGE__VALUE/sP... (256)"; SQL statement: INSERT INTO "TASK_RESULT" ("BRANCH","IDENTIFIER","REV_MAX","REV_MIN","REV_CREATE","PHYSICAL_RESOURCE","TASK_NAME","MESSAGE","START","END","EXCEPTION_DUMP","WARNINGS","LOG_FILE","RESULT_TYPE","CLUSTER_NAME","CLUSTER_ID") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:506) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.getValueTooLongException(DbException.java:322) at org.h2.value.Value.getValueTooLongException(Value.java:2573) at org.h2.value.Value.convertToVarcharIgnoreCase(Value.java:1319) at org.h2.value.Value.convertTo(Value.java:1121) at org.h2.value.Value.convertForAssignTo(Value.java:1092) at org.h2.table.Column.validateConvertUpdateSequence(Column.java:369) at org.h2.table.Table.convertInsertRow(Table.java:926) at org.h2.command.dml.Insert.insertRows(Insert.java:167) at org.h2.command.dml.Insert.update(Insert.java:135) at org.h2.command.dml.DataChangeStatement.update(DataChangeStatement.java:74) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:252) at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:209) at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:169) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.tryExecuteUpdate(PrepStmtBasedCompiledStatement.java:174) at com.top_logic.basic.db.sql.PrepStmtBasedCompiledStatement.executeUpdate(PrepStmtBasedCompiledStatement.java:62) ... 23 more
Lösung
Vergrößern der Spalte "MESSAGE" in der Tabelle "TASK_RESULT" auf 4000 Zeichen.
Daten-Migration
- In einem bestehenden System muss die Länge der Spalte manuell Vergrößert werden, z.B. durch:
Für H2:
ALTER TABLE TASK_RESULT ALTER COLUMN MESSAGE CHARACTER VARYING (4000);
Test
- Task konfigurieren und starten, der ein Ergebnis von 1000 Zeichen liefert.