minor
#29416
Anzeige des Änderungslogs schlägt fehl, wenn parallel Änderungen committet werden
Das Änderungslog (erzeugt über die TL-Script-Funktion changeLog bzw. die Änderungslog-Komponente) listet die im System vorgenommenen Änderungen samt Autor auf.
Wird das Änderungslog abgefragt, während gleichzeitig andere Sitzungen Änderungen committen, bricht der Aufbau des Logs mit einem Fehler ab, und der Anwender bekommt statt der Liste eine Fehlermeldung.
Ursache: Der ChangeLogBuilder liest bis zur zuletzt committeten Revision (HistoryManager.getLastRevision()) statt bis zur Revision seiner eigenen Sitzung (getSessionRevision()). Ein paralleler Commit kann die letzte Revision über die Sitzungs-Revision hinaus schieben. Beim Auflösen eines in dieser "zukünftigen" Revision committeten Objekts (z.B. des Autors eines Change-Sets) schlägt der Zugriff mit "Unable to resolve future object" fehl:
Caused by: java.lang.IllegalArgumentException: Unable to resolve future object: Person:3574@28693. Last revision: 28692. at com.top_logic.knowledge.service.db2.DBKnowledgeBase.preventFutureHistoryCtx(DBKnowledgeBase.java:1318) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.fetchItemById(DBKnowledgeBase.java:1279) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.itemById(DBKnowledgeBase.java:1273) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.itemById(DBKnowledgeBase.java:1223) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.resolveObjectKey(DBKnowledgeBase.java:4525) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.resolveObjectKey(DBKnowledgeBase.java:4513) at com.top_logic.element.changelog.ChangeLogBuilder.resolveAuthor(ChangeLogBuilder.java:480) at com.top_logic.element.changelog.ChangeLogBuilder.readChanges(ChangeLogBuilder.java:392) at com.top_logic.element.changelog.ChangeLogBuilder.readChangesDescending(ChangeLogBuilder.java:367) at com.top_logic.element.changelog.ChangeLogBuilder.readDescending(ChangeLogBuilder.java:316) at com.top_logic.element.changelog.ChangeLogBuilder.readDescending(ChangeLogBuilder.java:299) at com.top_logic.model.search.expr.config.operations.changelog.ChangeLog.eval(ChangeLog.java:134) at com.top_logic.model.search.expr.GenericMethod.internalEval(GenericMethod.java:87) at com.top_logic.model.search.expr.SearchExpression.evalWith(SearchExpression.java:114) ... 185 more
Lösung: Der ChangeLogBuilder muss als Stopp-Revision die Sitzungs-Revision (getSessionRevision()) verwenden, damit nur Revisionen ausgewertet werden, deren Objekte die Sitzung auch auflösen kann.