Files
Athou_commafeed/src/main/java/com/commafeed/backend/feeds/FeedTimer.java

66 lines
1.7 KiB
Java
Raw Normal View History

2013-03-20 20:33:42 +01:00
package com.commafeed.backend.feeds;
2013-03-25 12:24:00 +01:00
import java.util.Calendar;
import java.util.Map;
2013-03-20 20:33:42 +01:00
import java.util.concurrent.Future;
2013-03-25 21:01:29 +01:00
import java.util.concurrent.TimeUnit;
2013-03-20 20:33:42 +01:00
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.inject.Inject;
2013-03-25 12:24:00 +01:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2013-03-20 20:33:42 +01:00
import com.commafeed.backend.dao.FeedEntryService;
import com.commafeed.backend.dao.FeedService;
2013-03-23 16:17:19 +01:00
import com.commafeed.backend.model.Feed;
2013-03-25 12:24:00 +01:00
import com.google.common.collect.Maps;
2013-03-20 20:33:42 +01:00
@Singleton
public class FeedTimer {
2013-03-25 12:24:00 +01:00
private static Logger log = LoggerFactory.getLogger(FeedTimer.class);
2013-03-20 20:33:42 +01:00
@Inject
FeedService feedService;
@Inject
FeedEntryService feedEntryService;
@Inject
FeedFetcher fetcher;
@Schedule(hour = "*", minute = "*", persistent = false)
private void timeout() {
2013-03-25 12:24:00 +01:00
Map<String, Feed> feeds = Maps.newHashMap();
for (Feed feed : feedService.findAll()) {
feeds.put(feed.getUrl(), feed);
}
2013-03-20 20:33:42 +01:00
2013-03-25 12:24:00 +01:00
Map<String, Future<Feed>> futures = Maps.newHashMap();
for (Feed feed : feeds.values()) {
2013-03-20 20:33:42 +01:00
Future<Feed> future = fetcher.fetch(feed.getUrl());
2013-03-25 12:24:00 +01:00
futures.put(feed.getUrl(), future);
2013-03-20 20:33:42 +01:00
}
2013-03-25 12:24:00 +01:00
for (String key : futures.keySet()) {
Future<Feed> future = futures.get(key);
2013-03-20 20:33:42 +01:00
try {
2013-03-25 21:01:29 +01:00
Feed feed = future.get(1, TimeUnit.MINUTES);
2013-03-20 20:33:42 +01:00
feedEntryService
.updateEntries(feed.getUrl(), feed.getEntries());
} catch (Exception e) {
2013-03-25 13:52:02 +01:00
log.info("Unable to refresh feed " + key + " : "
+ e.getMessage());
2013-03-25 12:24:00 +01:00
Feed feed = feeds.get(key);
feed.setLastUpdated(Calendar.getInstance().getTime());
feed.setMessage("Unable to refresh feed: " + e.getMessage());
feedService.update(feed);
2013-03-20 20:33:42 +01:00
}
}
}
}