From eff84c69aff0a5905824d7d8164eda236ebe9f82 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 22 May 2013 11:25:29 +0200 Subject: [PATCH] prevent duplicate entries for push infos --- .../backend/feeds/FeedRefreshWorker.java | 6 ++- .../backend/services/FeedPushInfoService.java | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/commafeed/backend/services/FeedPushInfoService.java diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java index ffc55a8e..73da837a 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java @@ -16,6 +16,7 @@ import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedPushInfo; import com.commafeed.backend.services.ApplicationSettingsService; +import com.commafeed.backend.services.FeedPushInfoService; import com.sun.syndication.io.FeedException; public class FeedRefreshWorker { @@ -35,6 +36,9 @@ public class FeedRefreshWorker { @Inject ApplicationSettingsService applicationSettingsService; + @Inject + FeedPushInfoService feedPushInfoService; + public void start(MutableBoolean running, String threadName) { log.info("{} starting", threadName); @@ -132,7 +136,7 @@ public class FeedRefreshWorker { log.debug("feed {} has pubsub info: {}", feed.getUrl(), topic); FeedPushInfo info = feed.getPushInfo(); if (info == null) { - info = new FeedPushInfo(); + info = feedPushInfoService.findOrCreate(feed, hub, topic); } if (!StringUtils.equals(hub, info.getHub()) || !StringUtils.equals(topic, info.getTopic())) { diff --git a/src/main/java/com/commafeed/backend/services/FeedPushInfoService.java b/src/main/java/com/commafeed/backend/services/FeedPushInfoService.java new file mode 100644 index 00000000..5702af29 --- /dev/null +++ b/src/main/java/com/commafeed/backend/services/FeedPushInfoService.java @@ -0,0 +1,40 @@ +package com.commafeed.backend.services; + +import java.util.List; + +import javax.ejb.Lock; +import javax.ejb.LockType; +import javax.ejb.Singleton; +import javax.inject.Inject; + +import com.commafeed.backend.dao.FeedPushInfoDAO; +import com.commafeed.backend.model.Feed; +import com.commafeed.backend.model.FeedPushInfo; +import com.commafeed.backend.model.FeedPushInfo_; + +@Singleton +public class FeedPushInfoService { + + @Inject + FeedPushInfoDAO feedPushInfoDAO; + + @Lock(LockType.WRITE) + public FeedPushInfo findOrCreate(Feed feed, String hub, String topic) { + FeedPushInfo info = null; + + List infos = feedPushInfoDAO.findByField( + FeedPushInfo_.feed, feed); + if (infos.isEmpty()) { + info = new FeedPushInfo(); + info.setFeed(feed); + info.setHub(hub); + info.setTopic(topic); + info.setActive(false); + feedPushInfoDAO.save(info); + } else { + info = infos.get(0); + } + return info; + } + +}