From c1db200c546e3318d436876efc68b613a01b00a7 Mon Sep 17 00:00:00 2001 From: Athou Date: Sun, 21 Apr 2013 11:24:45 +0200 Subject: [PATCH] move write lock to feed creation only --- .../backend/services/FeedService.java | 31 +++++++++++++++++++ .../services/FeedSubscriptionService.java | 20 +++--------- 2 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/commafeed/backend/services/FeedService.java diff --git a/src/main/java/com/commafeed/backend/services/FeedService.java b/src/main/java/com/commafeed/backend/services/FeedService.java new file mode 100644 index 00000000..06c17daa --- /dev/null +++ b/src/main/java/com/commafeed/backend/services/FeedService.java @@ -0,0 +1,31 @@ +package com.commafeed.backend.services; + +import javax.ejb.Lock; +import javax.ejb.LockType; +import javax.ejb.Singleton; +import javax.inject.Inject; + +import org.apache.commons.codec.digest.DigestUtils; + +import com.commafeed.backend.dao.FeedDAO; +import com.commafeed.backend.model.Feed; + +@Singleton +public class FeedService { + + @Inject + FeedDAO feedDAO; + + @Lock(LockType.WRITE) + public Feed findOrCreate(String url) { + Feed feed = feedDAO.findByUrl(url); + if (feed == null) { + feed = new Feed(); + feed.setUrl(url); + feed.setUrlHash(DigestUtils.sha1Hex(url)); + feedDAO.save(feed); + } + return feed; + } + +} diff --git a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java index f1de5767..6a25b661 100644 --- a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java @@ -2,14 +2,9 @@ package com.commafeed.backend.services; import java.util.List; -import javax.ejb.Lock; -import javax.ejb.LockType; -import javax.ejb.Singleton; +import javax.ejb.Stateless; import javax.inject.Inject; -import org.apache.commons.codec.digest.DigestUtils; - -import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; @@ -21,11 +16,11 @@ import com.commafeed.backend.model.FeedSubscription; import com.commafeed.backend.model.User; import com.google.api.client.util.Lists; -@Singleton +@Stateless public class FeedSubscriptionService { @Inject - FeedDAO feedDAO; + FeedService feedService; @Inject FeedEntryDAO feedEntryDAO; @@ -36,17 +31,10 @@ public class FeedSubscriptionService { @Inject FeedSubscriptionDAO feedSubscriptionDAO; - @Lock(LockType.WRITE) public Feed subscribe(User user, String url, String title, FeedCategory category) { - Feed feed = feedDAO.findByUrl(url); - if (feed == null) { - feed = new Feed(); - feed.setUrl(url); - feed.setUrlHash(DigestUtils.sha1Hex(url)); - feedDAO.save(feed); - } + Feed feed = feedService.findOrCreate(url); FeedSubscription sub = feedSubscriptionDAO.findByFeed(user, feed); boolean newSubscription = false;