diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java deleted file mode 100644 index f287258e..00000000 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.commafeed.backend.feeds; - -import java.io.Serializable; -import java.util.Collection; - -import javax.ejb.ActivationConfigProperty; -import javax.ejb.MessageDriven; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; -import javax.inject.Inject; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.ObjectMessage; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.commafeed.backend.dao.FeedDAO; -import com.commafeed.backend.model.Feed; -import com.commafeed.backend.model.FeedEntry; -import com.commafeed.backend.services.FeedUpdateService; - -@MessageDriven(name = "FeedRefreshUpdater", activationConfig = { - @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), - @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/refreshQueue") }) -@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) -public class FeedRefreshUpdater implements MessageListener { - - private static Logger log = LoggerFactory - .getLogger(FeedRefreshUpdater.class); - - @Inject - FeedDAO feedDAO; - - @Inject - FeedUpdateService feedUpdateService; - - @Override - public void onMessage(Message message) { - if (message instanceof ObjectMessage) { - ObjectMessage objectMessage = (ObjectMessage) message; - try { - FeedRefreshTask task = (FeedRefreshTask) objectMessage - .getObject(); - - if (task.getEntries() != null) { - feedUpdateService.updateEntries(task.getFeed(), - task.getEntries()); - } else { - feedDAO.update(task.getFeed()); - } - } catch (JMSException e) { - log.error(e.getMessage(), e); - } - } - } - - public static class FeedRefreshTask implements Serializable { - - private static final long serialVersionUID = 1L; - - private Feed feed; - private Collection entries; - - public FeedRefreshTask(Feed feed, Collection entries) { - this.feed = feed; - this.entries = entries; - } - - public Feed getFeed() { - return feed; - } - - public Collection getEntries() { - return entries; - } - - } - -} diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java index 90ccd468..7a770edd 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java @@ -4,16 +4,8 @@ import java.util.Calendar; import java.util.Collection; import java.util.Date; -import javax.annotation.Resource; import javax.inject.Inject; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.DeliveryMode; import javax.jms.JMSException; -import javax.jms.MessageProducer; -import javax.jms.ObjectMessage; -import javax.jms.Queue; -import javax.jms.Session; import javax.transaction.HeuristicMixedException; import javax.transaction.HeuristicRollbackException; import javax.transaction.NotSupportedException; @@ -28,20 +20,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.commafeed.backend.HttpGetter.NotModifiedException; -import com.commafeed.backend.feeds.FeedRefreshUpdater.FeedRefreshTask; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedEntry; +import com.commafeed.backend.services.FeedUpdateService; public class FeedRefreshWorker { private static Logger log = LoggerFactory .getLogger(FeedRefreshWorker.class); - @Resource(name = "jms/refreshQueue") - private Queue queue; - - @Resource - private ConnectionFactory connectionFactory; + @Inject + FeedUpdateService feedUpdateService; @Inject FeedFetcher fetcher; @@ -140,25 +129,10 @@ public class FeedRefreshWorker { feed.setEtagHeader(fetchedFeed.getFeed().getEtagHeader()); entries = fetchedFeed.getEntries(); } - FeedRefreshTask task = new FeedRefreshTask(feed, entries); - send(task); + feedUpdateService.updateEntries(feed, entries); } - private void send(FeedRefreshTask task) throws JMSException { - Connection connection = connectionFactory.createConnection(); - connection.start(); - Session session = connection.createSession(false, - Session.AUTO_ACKNOWLEDGE); - MessageProducer producer = session.createProducer(queue); - producer.setDisableMessageID(true); - producer.setDisableMessageTimestamp(true); - producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - ObjectMessage message = session.createObjectMessage(task); - producer.send(message); - connection.close(); - } - private Feed getNextFeed() { return taskGiver.take(); } diff --git a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java index 809a1b99..001c7579 100644 --- a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java +++ b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java @@ -5,9 +5,13 @@ import java.util.Calendar; import java.util.Collection; import java.util.List; +import javax.ejb.Asynchronous; import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; import javax.inject.Inject; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -24,6 +28,7 @@ import com.commafeed.backend.model.FeedSubscription; import com.google.common.collect.Lists; @Stateless +@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class FeedUpdateService { @Inject @@ -38,59 +43,63 @@ public class FeedUpdateService { @Inject FeedEntryStatusDAO feedEntryStatusDAO; + @Asynchronous public void updateEntries(Feed feed, Collection entries) { - List existingEntries = getExistingEntries(entries); - List subscriptions = feedSubscriptionDAO - .findByFeed(feed); + if (CollectionUtils.isNotEmpty(entries)) { + List existingEntries = getExistingEntries(entries); + List subscriptions = feedSubscriptionDAO + .findByFeed(feed); - List entryUpdateList = Lists.newArrayList(); - List statusUpdateList = Lists.newArrayList(); - for (FeedEntry entry : entries) { + List entryUpdateList = Lists.newArrayList(); + List statusUpdateList = Lists.newArrayList(); + for (FeedEntry entry : entries) { - FeedEntry foundEntry = findEntry(existingEntries, entry); + FeedEntry foundEntry = findEntry(existingEntries, entry); - if (foundEntry == null) { - FeedEntryContent content = entry.getContent(); + if (foundEntry == null) { + FeedEntryContent content = entry.getContent(); - content.setContent(FeedUtils.handleContent(content.getContent())); - String title = FeedUtils.handleContent(content.getTitle()); - if (title != null) { - content.setTitle(title.substring(0, - Math.min(2048, title.length()))); - } + content.setContent(FeedUtils.handleContent(content + .getContent())); + String title = FeedUtils.handleContent(content.getTitle()); + if (title != null) { + content.setTitle(title.substring(0, + Math.min(2048, title.length()))); + } - entry.setInserted(Calendar.getInstance().getTime()); - entry.getFeeds().add(feed); - entryUpdateList.add(entry); - } else { - boolean foundFeed = false; - for (Feed existingFeed : foundEntry.getFeeds()) { - if (ObjectUtils.equals(existingFeed.getId(), feed.getId())) { - foundFeed = true; - break; + entry.setInserted(Calendar.getInstance().getTime()); + entry.getFeeds().add(feed); + entryUpdateList.add(entry); + } else { + boolean foundFeed = false; + for (Feed existingFeed : foundEntry.getFeeds()) { + if (ObjectUtils.equals(existingFeed.getId(), + feed.getId())) { + foundFeed = true; + break; + } + } + + if (!foundFeed) { + foundEntry.getFeeds().add(feed); + entryUpdateList.add(entry); } } - - if (!foundFeed) { - foundEntry.getFeeds().add(feed); - entryUpdateList.add(entry); + } + for (FeedEntry entry : entryUpdateList) { + for (FeedSubscription sub : subscriptions) { + FeedEntryStatus status = new FeedEntryStatus(); + status.setEntry(entry); + status.setSubscription(sub); + statusUpdateList.add(status); } } - } - for (FeedEntry entry : entryUpdateList) { - for (FeedSubscription sub : subscriptions) { - FeedEntryStatus status = new FeedEntryStatus(); - status.setEntry(entry); - status.setSubscription(sub); - statusUpdateList.add(status); - } - } + feedEntryDAO.saveOrUpdate(entryUpdateList); + feedEntryStatusDAO.saveOrUpdate(statusUpdateList); + } feedDAO.update(feed); - feedEntryDAO.saveOrUpdate(entryUpdateList); - feedEntryStatusDAO.saveOrUpdate(statusUpdateList); - } private FeedEntry findEntry(List existingEntries, FeedEntry entry) { diff --git a/src/main/tomee/conf/system.properties b/src/main/tomee/conf/system.properties index 833e15ab..48cd9c2b 100644 --- a/src/main/tomee/conf/system.properties +++ b/src/main/tomee/conf/system.properties @@ -46,5 +46,5 @@ # javax.persistence.jtaDataSource = # javax.persistence.nonJtaDataSource = -#AsynchronousPool.CorePoolSize = 1 -#AsynchronousPool.MaximumPoolSize = 100 \ No newline at end of file +AsynchronousPool.CorePoolSize = 1 +AsynchronousPool.MaximumPoolSize = 100 \ No newline at end of file