[New] ExecutionPolicy now controls delayed task life cycle

This commit is contained in:
Robert von Burg 2023-10-30 12:04:26 +01:00
parent e80d0a7944
commit 857affbdea
Signed by: eitch
GPG Key ID: 75DB9C85C74331F7
1 changed files with 10 additions and 3 deletions

View File

@ -23,6 +23,9 @@ import li.strolch.runtime.privilege.PrivilegedRunnableWithResult;
import li.strolch.utils.time.PeriodDuration;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
@ -54,6 +57,8 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
protected Locator resourceLoc;
protected Locator actionLoc;
protected List<ScheduledFuture<?>> futures;
/**
* The TX for this execution policy. The TX needs to be updated when this execution policy has a longer life time
* than the actual TX
@ -64,6 +69,7 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
super(tx);
this.tx = tx;
this.realm = tx.getRealmName();
this.futures = new ArrayList<>();
}
/**
@ -226,6 +232,7 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
public void stop() {
this.stopped = true;
try {
this.futures.forEach(future -> future.cancel(false));
handleStopped();
} catch (Exception e) {
logger.error("Stopping failed for " + this.actionLoc, e);
@ -282,7 +289,7 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
*/
public void delay(PeriodDuration duration, Runnable runnable) {
long delayMs = duration.toMillis();
getDelayedExecutionTimer().delay(delayMs, runnable);
this.futures.add(getDelayedExecutionTimer().delay(delayMs, runnable));
}
/**
@ -293,7 +300,7 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
*/
public void delay(Duration duration, Runnable runnable) {
long delayMs = duration.toMillis();
getDelayedExecutionTimer().delay(delayMs, runnable);
this.futures.add(getDelayedExecutionTimer().delay(delayMs, runnable));
}
/**
@ -336,7 +343,7 @@ public abstract class ExecutionPolicy extends StrolchPolicy {
delayMs = 20;
}
logger.info("Delaying runnable " + runnable + " by " + formatMillisecondsDuration(delayMs));
getDelayedExecutionTimer().delay(delayMs, runnable);
this.futures.add(getDelayedExecutionTimer().delay(delayMs, runnable));
}
/**