[jboss-cvs] JBossBlog SVN: r204 - in trunk: resources/WEB-INF and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Feb 8 03:45:43 EST 2008
Author: adamw
Date: 2008-02-08 03:45:43 -0500 (Fri, 08 Feb 2008)
New Revision: 204
Added:
trunk/src/action/org/jboss/blog/session/feed/lock/
trunk/src/action/org/jboss/blog/session/feed/lock/FeedsLocksBean.java
trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsync.java
trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsyncImpl.java
Modified:
trunk/resources/WEB-INF/components.xml
trunk/resources/WEB-INF/pages.xml
trunk/resources/messages_en.properties
trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java
trunk/src/action/org/jboss/blog/session/feed/mod/FilterAddBean.java
trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedStack.java
trunk/src/action/org/jboss/blog/session/feed/update/RemoteFeedUpdate.java
trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java
Log:
Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/resources/WEB-INF/components.xml 2008-02-08 08:45:43 UTC (rev 204)
@@ -31,6 +31,8 @@
persistence-unit-jndi-name="java:/blogEntityManagerFactory"/>
<security:identity authenticate-method="#{authenticator.authenticate}" />
+
+ <async:thread-pool-dispatcher />
<event type="org.jboss.seam.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
@@ -49,6 +51,9 @@
<event type="org.jboss.blog.feed.accept">
<action execute="#{feedMod.acceptFeed}"/>
</event>
+ <event type="org.jboss.blog.feed.proposed">
+ <action execute="#{feedMod.proposedFeed}"/>
+ </event>
<mail:mail-session host="localhost" port="2525" username="test" password="test" />
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/resources/WEB-INF/pages.xml 2008-02-08 08:45:43 UTC (rev 204)
@@ -52,7 +52,8 @@
<page view-id="/manage/feed_propose.xhtml" conversation-required="true">
<navigation from-action="#{feedMod.saveNew}">
- <end-conversation />
+ <end-conversation />
+ <raise-event type="org.jboss.blog.feed.proposed" />
<redirect view-id="/home.xhtml" />
</navigation>
</page>
Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/resources/messages_en.properties 2008-02-08 08:45:43 UTC (rev 204)
@@ -91,7 +91,8 @@
blog.feed.deleted=Feed {0} deleted.
blog.feed.updated=Feed {0} updated.
blog.feed.added=Feed {0} added.
-blog.feed.accepted=Feed {0} accepted. Its posts will bead read and saved in a couple of minutes.
+blog.feed.accepted=Feed {0} accepted. Its posts will bead read and saved in a moment.
+blog.feed.proposed=Your feed: '{0}' has been added to our proposition queue. It will be now reviewed.
blog.template.deleted=Template {0} of type {1} deleted.
blog.template.updated=Template {0} of type {1} updated.
Added: trunk/src/action/org/jboss/blog/session/feed/lock/FeedsLocksBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/lock/FeedsLocksBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/lock/FeedsLocksBean.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -0,0 +1,37 @@
+package org.jboss.blog.session.feed.lock;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.ScopeType;
+
+import javax.annotation.PostConstruct;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("feedsLocks")
+ at Scope(ScopeType.APPLICATION)
+ at AutoCreate
+public class FeedsLocksBean {
+ private Map<String, Lock> locks;
+
+ @PostConstruct
+ public void init() {
+ locks = new ConcurrentHashMap<String, Lock>();
+ }
+
+ public Lock getLockForFeed(String feedName) {
+ synchronized(this) {
+ if (!locks.containsKey(feedName)) {
+ locks.put(feedName, new ReentrantLock());
+ }
+ }
+
+ return locks.get(feedName);
+ }
+}
Modified: trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -5,6 +5,8 @@
import org.jboss.blog.model.Template;
import org.jboss.blog.model.XmlType;
import org.jboss.blog.session.merge.MergeServiceBean;
+import org.jboss.blog.session.feed.lock.FeedsLocksBean;
+import org.jboss.blog.session.update.UpdateHandlerAsync;
import org.jboss.seam.ScopeType;
import org.jboss.seam.core.Events;
import org.jboss.seam.annotations.AutoCreate;
@@ -18,6 +20,7 @@
import java.io.Serializable;
import java.util.HashMap;
import java.util.ArrayList;
+import java.util.concurrent.locks.Lock;
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -37,6 +40,12 @@
@In
private MergeServiceBean mergeService;
+ @In
+ private FeedsLocksBean feedsLocks;
+
+ @In
+ private UpdateHandlerAsync updateHandlerAsync;
+
public void initNewFeed(Feed feed) {
this.feed = feed;
feed.setMaxPostsInFeed(10);
@@ -63,18 +72,30 @@
entityManager.flush();
+ updateHandlerAsync.update(feed);
+
facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.accepted", getFeed().getName());
}
+ public void proposedFeed() {
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.proposed", getFeed().getName());
+ }
+
public void saveNew() {
- entityManager.persist(feed);
+ Lock feedLock = feedsLocks.getLockForFeed(feed.getName());
+ feedLock.lock();
+ try {
+ entityManager.persist(feed);
- for (Post post : feed.getPosts()) {
- mergeService.savePost(feed, post);
+ for (Post post : feed.getPosts()) {
+ mergeService.savePost(feed, post);
+ }
+
+ entityManager.flush();
+ } finally {
+ feedLock.unlock();
}
- entityManager.flush();
-
facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.added", getFeed().getName());
Events.instance().raiseEvent("org.jboss.blog.feed.added", getFeed().getName());
Modified: trunk/src/action/org/jboss/blog/session/feed/mod/FilterAddBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/FilterAddBean.java 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/FilterAddBean.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -9,13 +9,14 @@
import org.jboss.blog.model.post.filter.AuthorRegexpFilter;
import java.util.List;
+import java.io.Serializable;
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
*/
@Name("filterAdd")
@Scope(ScopeType.CONVERSATION)
-public class FilterAddBean {
+public class FilterAddBean implements Serializable {
private List<PostFilter> addToList;
private PodcastFilter podcastFilter;
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedStack.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedStack.java 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedStack.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -9,6 +9,7 @@
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.ArrayList;
+import java.io.Serializable;
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -16,7 +17,7 @@
@Name("aggregatedFeedStack")
@Scope(ScopeType.CONVERSATION)
@AutoCreate
-public class AggregatedFeedStack {
+public class AggregatedFeedStack implements Serializable {
private List<AggregatedFeed> stack;
@PostConstruct
Modified: trunk/src/action/org/jboss/blog/session/feed/update/RemoteFeedUpdate.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/update/RemoteFeedUpdate.java 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/src/action/org/jboss/blog/session/feed/update/RemoteFeedUpdate.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -6,11 +6,14 @@
import org.jboss.blog.session.parser.ParserService;
import org.jboss.blog.session.merge.MergeServiceBean;
import org.jboss.blog.session.update.UpdateException;
+import org.jboss.blog.session.feed.lock.FeedsLocksBean;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
+import java.util.concurrent.locks.Lock;
+
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
*/
@@ -22,15 +25,24 @@
@In
private MergeServiceBean mergeService;
+
+ @In
+ private FeedsLocksBean feedsLocks;
public void update(RemoteFeed feed) throws UpdateException {
- Feed parsedFeed;
+ Lock feedLock = feedsLocks.getLockForFeed(feed.getName());
+ feedLock.lock();
try {
- parsedFeed = parserService.parse(feed.getRemoteLink());
- } catch (ParserException e) {
- throw new UpdateException(e);
+ Feed parsedFeed;
+ try {
+ parsedFeed = parserService.parse(feed.getRemoteLink());
+ } catch (ParserException e) {
+ throw new UpdateException(e);
+ }
+
+ mergeService.merge(feed, parsedFeed.getPosts());
+ } finally {
+ feedLock.unlock();
}
-
- mergeService.merge(feed, parsedFeed.getPosts());
}
}
Modified: trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java 2008-02-07 17:57:36 UTC (rev 203)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateHandler.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -1,6 +1,7 @@
package org.jboss.blog.session.update;
import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.feed.RestrictedFeed;
import org.jboss.blog.model.Group;
import org.jboss.blog.service.FeedsService;
import org.jboss.blog.service.GroupsService;
@@ -32,16 +33,20 @@
public void update() {
for (Group group : feedsService.getAllGroups()) {
for (Feed feed : groupsService.acceptedFeeds(group)) {
- try {
- feedTypes.getFeedDao(feed).update();
- } catch (UpdateException e) {
- // TODO: log this somewhere
- System.out.println("Exception when updating feed: " + feed.getName() + "; " + e.getMessage());
- }
+ update(feed);
}
}
}
+ public void update(RestrictedFeed feed) {
+ try {
+ feedTypes.getFeedDao(feed).update();
+ } catch (UpdateException e) {
+ // TODO: log this somewhere
+ System.out.println("Exception when updating feed: " + feed.getName() + "; " + e.getMessage());
+ }
+ }
+
@Remove
public void remove() { }
}
Added: trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsync.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsync.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsync.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -0,0 +1,17 @@
+package org.jboss.blog.session.update;
+
+import org.jboss.blog.model.feed.RestrictedFeed;
+import org.jboss.seam.annotations.async.Asynchronous;
+
+import javax.ejb.Local;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Local
+public interface UpdateHandlerAsync {
+ @Asynchronous
+ public void update(RestrictedFeed feed);
+
+ public void remove();
+}
Added: trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsyncImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsyncImpl.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateHandlerAsyncImpl.java 2008-02-08 08:45:43 UTC (rev 204)
@@ -0,0 +1,27 @@
+package org.jboss.blog.session.update;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.blog.model.feed.RestrictedFeed;
+
+import javax.ejb.Stateless;
+import javax.ejb.Remove;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Stateless
+ at Name("updateHandlerAsync")
+ at AutoCreate
+public class UpdateHandlerAsyncImpl implements UpdateHandlerAsync {
+ @In
+ private UpdateHandler updateHandler;
+
+ public void update(RestrictedFeed feed) {
+ updateHandler.update(feed);
+ }
+
+ @Remove
+ public void remove() { }
+}
More information about the jboss-cvs-commits
mailing list