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.