Повреждение TimeFold VariableListener после первоначального расчета оценкиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Повреждение TimeFold VariableListener после первоначального расчета оценки

Сообщение Anonymous »

У меня есть один объект планирования (задача) и одна настоящая переменная планирования (временной интервал).
Переменная планирования — это ресурс, который назначается задаче с конечно, зернистый временной диапазон. Когда назначен временной интервал, мне нужно вычислить «фактический» временной диапазон. Это получено из временного интервала и дополнительных полей задачи, которые говорят мне, как вычислить «фактический» диапазон времени.
У нас был, как мы думали, работающий прослушиватель переменных, но после включения TRACKED_FULL_ASSERT Я вижу эту ошибку, когда начинается решение:

Код: Выделить всё

java.lang.IllegalStateException: VariableListener corruption after completedAction (Initial score calculated):
The entity (Task() assigned to TimeSlot(2024-07-07T08:59:49.956Z to 2024-07-07T09:10:36.337Z: duration PT10M46.381S))'s shadow variable (Task.actualStartTime)'s corrupted value (2024-07-07T18:09:49.927Z) changed to uncorrupted value (2024-07-07T09:00:22.500Z) after all variable listeners were triggered without changes to the genuine variables.
Значение «повреждено» сильно отличается от исходного временного диапазона, поэтому мне интересно, откуда оно могло взяться.
Моя задача ПланированиеEntity:

Код: Выделить всё

    @PlanningVariable(valueRangeProviderRefs = "timeslotRange", allowsUnassigned = true)
private TimeSlot timeslot = null;

private Instant actualStartTime = null;

@ShadowVariable(
sourceVariableName = "timeslot",
variableListenerClass = TimeSlotStartTimeListener.class)
public Instant getActualStartTime() {
return this.actualStartTime;
}

private Instant actualEndTime = null;

@PiggybackShadowVariable(shadowVariableName = "actualStartTime")
public Instant getActualEndTime() {
return this.actualEndTime;
}
Мой прослушиватель переменных, TimeSlotStartTimeListener

Код: Выделить всё

@Override
public boolean requiresUniqueEntityEvents() { // No idea if this is needed.
return true;
}

private void updateStartAndEndTimes(ScoreDirector scoreDirector, Task task) {
scoreDirector.beforeVariableChanged(task, "actualStartTime");
task.setActualStartTime(someStartTimeMath(task)); // Cant show the actual logic here, but it's a pure function.
scoreDirector.afterVariableChanged(task, "actualStartTime");
scoreDirector.beforeVariableChanged(task, "actualEndTime");
task.setActualEndTime(someEndTimeMath(task));
scoreDirector.afterVariableChanged(task, "actualEndTime");
}

@Override
public void beforeVariableChanged(ScoreDirector scoreDirector, Task task) {
this.updateStartAndEndTimes(scoreDirector, task);
}

@Override
public void afterVariableChanged(ScoreDirector scoreDirector, Task task) {
this.updateStartAndEndTimes(scoreDirector, task);
}
Я понятия не имею, правильно ли это настроено. Документы для этого повсюду. Они перескакивают между примерами и не ссылаются на какие-либо полные реализации.
Обновление 1:
Я заплатил немного более пристальное внимание к значениям, которые вызывают возникновение исключений. Похоже, что теневые значения фактическогоStartTime и фактическогоEndTime просто не такие, какими они должны быть.
Итак, с неинициализированным решением это не так. проблема. Это проблема только тогда, когда я возвращаюсь, чтобы решить ее заново. Итак, теперь я пытаюсь выяснить, что может вызвать недопустимые значения. Код обновления прослушивателя на самом деле ничего не меняет и не имеет состояния. Так что я очень озадачен тем, как это могло произойти.
Что для меня, скорее всего, означает, что результат прослушивателя кэшируется, а некоторые как используются различными задачами/значениями. Доказательств этому пока нет, но различия похожи на фактические теневые значения других задач.

Подробнее здесь: https://stackoverflow.com/questions/786 ... alculation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»