From b6d8072090671d567013969b3dd6b156acbfddd2 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 16 Apr 2013 09:29:33 +0200 Subject: [PATCH] smarter way of stopping things --- .../java/com/commafeed/backend/StartupBean.java | 11 ++++++----- .../backend/feeds/FeedRefreshTaskGiver.java | 10 ++++++++++ .../commafeed/backend/feeds/FeedRefreshWorker.java | 13 ++++++------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/commafeed/backend/StartupBean.java b/src/main/java/com/commafeed/backend/StartupBean.java index 28c0bf2f..98c58705 100644 --- a/src/main/java/com/commafeed/backend/StartupBean.java +++ b/src/main/java/com/commafeed/backend/StartupBean.java @@ -13,6 +13,7 @@ import javax.ejb.Singleton; import javax.ejb.Startup; import javax.inject.Inject; +import org.apache.commons.lang.mutable.MutableBoolean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,6 +61,8 @@ public class StartupBean { private long startupTime; + private MutableBoolean running = new MutableBoolean(true); + @PostConstruct private void init() { startupTime = Calendar.getInstance().getTimeInMillis(); @@ -71,7 +74,7 @@ public class StartupBean { log.info("Starting {} background threads", settings.getBackgroundThreads()); for (int i = 0; i < settings.getBackgroundThreads(); i++) { - Future thread = worker.start("Thread " + i); + Future thread = worker.start(running, "Thread " + i); threads.add(thread); } @@ -89,10 +92,8 @@ public class StartupBean { } @PreDestroy - private void shutdown() { - for (Future future : threads) { - future.cancel(true); - } + public void shutdown() { + running.setValue(false); } } diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java index 832b7f19..87dcf9d9 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java @@ -4,11 +4,13 @@ import java.util.Calendar; import java.util.List; import java.util.Queue; +import javax.annotation.PreDestroy; import javax.ejb.Lock; import javax.ejb.LockType; import javax.ejb.Singleton; import javax.inject.Inject; +import com.commafeed.backend.StartupBean; import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.model.Feed; import com.commafeed.backend.services.ApplicationSettingsService; @@ -23,6 +25,9 @@ public class FeedRefreshTaskGiver { @Inject ApplicationSettingsService applicationSettingsService; + @Inject + StartupBean startupBean; + private Queue queue = Lists.newLinkedList(); @Lock(LockType.WRITE) @@ -39,4 +44,9 @@ public class FeedRefreshTaskGiver { } return queue.poll(); } + + @PreDestroy + public void shutdown() { + startupBean.shutdown(); + } } diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java index 21adc228..796772c5 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java @@ -18,6 +18,7 @@ import javax.transaction.RollbackException; import javax.transaction.SystemException; import javax.transaction.UserTransaction; +import org.apache.commons.lang.mutable.MutableBoolean; import org.apache.commons.lang.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,12 +49,10 @@ public class FeedRefreshWorker { @Resource private UserTransaction transaction; - private boolean running = true; - @Asynchronous - public Future start(String threadName) { + public Future start(MutableBoolean running, String threadName) { log.info("{} starting", threadName); - while (running) { + while (running.isTrue()) { try { Feed feed = getNextFeed(); if (feed != null) { @@ -69,16 +68,16 @@ public class FeedRefreshWorker { } return new AsyncResult(null); } - + @Asynchronous - public void updateAsync(Feed feed){ + public void updateAsync(Feed feed) { try { update(feed); } catch (Exception e) { log.error(e.getMessage(), e); } } - + private void update(Feed feed) throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException,