diff --git a/core/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java b/core/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java index 9c97efdb03..940668b430 100755 --- a/core/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java +++ b/core/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java @@ -1,9 +1,6 @@ package se.su.dsv.scipro.workerthreads; import jakarta.inject.Inject; -import jakarta.inject.Provider; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +55,22 @@ public abstract class AbstractWorker implements Worker { * Do manually transaction-handled work */ try { + // When the switch from Guice to Spring happened all workers became singletons + // because that's the default in Spring. In Guice they were "prototype" scoped + // and therefore the worker object was re-created before each execution which + // reset the successfulWorker field to true. + // + // Now that they're singletons the field is never reset to true after a + // failure and the worker will be stuck in a failed state even after a + // subsequent successful run. + // + // TODO: + // In the future this flag should be removed and any execution that does + // not throw an exception should be considered successful. + // If a worker needs to signal a non-exception as a failure that should + // be an internal matter and not something the scheduler should consider. + setSuccessfulWorker(true); + doWork(); } catch (RuntimeException ex) { LOGGER.info("Worker {} threw an exception", getClass().getSimpleName());