From b71434acf6908a434c2a1c51ec3e6c67ab9dd078 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 22 Oct 2014 15:36:21 +0200 Subject: [PATCH] use dropwizard built-in executor service facilities --- .../com/commafeed/CommaFeedApplication.java | 9 ++- .../backend/task/OldStatusesCleanupTask.java | 3 +- .../backend/task/OrphansCleanupTask.java | 3 +- .../commafeed/backend/task/ScheduledTask.java | 32 +++++++++++ .../backend/task/SchedulingService.java | 56 ------------------- 5 files changed, 38 insertions(+), 65 deletions(-) create mode 100644 src/main/java/com/commafeed/backend/task/ScheduledTask.java delete mode 100644 src/main/java/com/commafeed/backend/task/SchedulingService.java diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index c750141d..ff90d4cf 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -11,6 +11,7 @@ import io.dropwizard.setup.Environment; import java.util.Date; import java.util.EnumSet; +import java.util.concurrent.ScheduledExecutorService; import javax.servlet.DispatcherType; @@ -34,7 +35,6 @@ import com.commafeed.backend.service.StartupService; import com.commafeed.backend.service.UserService; import com.commafeed.backend.task.OldStatusesCleanupTask; import com.commafeed.backend.task.OrphansCleanupTask; -import com.commafeed.backend.task.SchedulingService; import com.commafeed.frontend.auth.SecurityCheckProvider; import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider; import com.commafeed.frontend.resource.AdminREST; @@ -127,10 +127,9 @@ public class CommaFeedApplication extends Application { environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js"); // Scheduled tasks - SchedulingService schedulingService = new SchedulingService(); - schedulingService.register(injector.getInstance(OldStatusesCleanupTask.class)); - schedulingService.register(injector.getInstance(OrphansCleanupTask.class)); - environment.lifecycle().manage(schedulingService); + ScheduledExecutorService executor = environment.lifecycle().scheduledExecutorService("task-scheduler").build(); + injector.getInstance(OldStatusesCleanupTask.class).register(executor); + injector.getInstance(OrphansCleanupTask.class).register(executor); // database init/changelogs environment.lifecycle().manage(injector.getInstance(StartupService.class)); diff --git a/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java b/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java index 23f7cb1a..5e7c1564 100644 --- a/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java +++ b/src/main/java/com/commafeed/backend/task/OldStatusesCleanupTask.java @@ -10,11 +10,10 @@ import lombok.RequiredArgsConstructor; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.service.DatabaseCleaningService; -import com.commafeed.backend.task.SchedulingService.ScheduledTask; @RequiredArgsConstructor(onConstructor = @__({ @Inject })) @Singleton -public class OldStatusesCleanupTask implements ScheduledTask { +public class OldStatusesCleanupTask extends ScheduledTask { private final CommaFeedConfiguration config; private final DatabaseCleaningService cleaner; diff --git a/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java b/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java index 0d54861b..6f290dcf 100644 --- a/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java +++ b/src/main/java/com/commafeed/backend/task/OrphansCleanupTask.java @@ -8,11 +8,10 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import com.commafeed.backend.service.DatabaseCleaningService; -import com.commafeed.backend.task.SchedulingService.ScheduledTask; @RequiredArgsConstructor(onConstructor = @__({ @Inject })) @Singleton -public class OrphansCleanupTask implements ScheduledTask { +public class OrphansCleanupTask extends ScheduledTask { private final DatabaseCleaningService cleaner; diff --git a/src/main/java/com/commafeed/backend/task/ScheduledTask.java b/src/main/java/com/commafeed/backend/task/ScheduledTask.java new file mode 100644 index 00000000..bed7c5b5 --- /dev/null +++ b/src/main/java/com/commafeed/backend/task/ScheduledTask.java @@ -0,0 +1,32 @@ +package com.commafeed.backend.task; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public abstract class ScheduledTask { + protected abstract void run(); + + protected abstract long getInitialDelay(); + + protected abstract long getPeriod(); + + protected abstract TimeUnit getTimeUnit(); + + public void register(ScheduledExecutorService executor) { + Runnable runnable = new Runnable() { + @Override + public void run() { + try { + ScheduledTask.this.run(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + }; + executor.scheduleWithFixedDelay(runnable, getInitialDelay(), getPeriod(), getTimeUnit()); + } + +} diff --git a/src/main/java/com/commafeed/backend/task/SchedulingService.java b/src/main/java/com/commafeed/backend/task/SchedulingService.java deleted file mode 100644 index ea6b341c..00000000 --- a/src/main/java/com/commafeed/backend/task/SchedulingService.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.commafeed.backend.task; - -import io.dropwizard.lifecycle.Managed; - -import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import lombok.extern.slf4j.Slf4j; - -import com.google.common.collect.Lists; - -@Slf4j -public class SchedulingService implements Managed { - - public static interface ScheduledTask { - void run(); - - long getInitialDelay(); - - long getPeriod(); - - TimeUnit getTimeUnit(); - } - - private List tasks = Lists.newArrayList(); - private ScheduledExecutorService executor; - - @Override - public void start() throws Exception { - executor = Executors.newScheduledThreadPool(tasks.size()); - for (final ScheduledTask task : tasks) { - Runnable runnable = new Runnable() { - @Override - public void run() { - try { - task.run(); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - }; - executor.scheduleWithFixedDelay(runnable, task.getInitialDelay(), task.getPeriod(), task.getTimeUnit()); - } - } - - @Override - public void stop() throws Exception { - executor.shutdown(); - } - - public void register(ScheduledTask task) { - tasks.add(task); - } -}