Files
SCM-Manager/scm-webapp/src/main/java/sonia/scm/schedule/PrivilegedRunnableFactory.java
Sebastian Sdorra 3c373a4c4d replace QuartzScheduler with a more lightweight scheduler
The new scheduler is based on the cron-utils package and uses the same cron syntax as quartz.
CronScheduler was mainly introduced, because of a ClassLoader leak with the old Quartz implementation.
The leak comes from shiros use of InheriatableThreadLocal in combination with the WorkerThreads of Quartz.
CronScheduler uses a ThreadFactory which clears the Shiro context before a new Thread is created (see CronThreadFactory).
2019-06-05 16:15:06 +02:00

30 lines
801 B
Java

package sonia.scm.schedule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.web.security.AdministrationContext;
import javax.inject.Inject;
import javax.inject.Provider;
class PrivilegedRunnableFactory {
private static final Logger LOG = LoggerFactory.getLogger(PrivilegedRunnableFactory.class);
private final AdministrationContext context;
@Inject
PrivilegedRunnableFactory(AdministrationContext context) {
this.context = context;
}
public Runnable create(Provider<? extends Runnable> runnableProvider) {
return () -> context.runAsAdmin(() -> {
LOG.trace("create runnable from provider");
Runnable runnable = runnableProvider.get();
LOG.debug("execute scheduled job {}", runnable.getClass());
runnable.run();
});
}
}