Author: christian.bauer(a)jboss.com
Date: 2008-05-23 10:13:07 -0400 (Fri, 23 May 2008)
New Revision: 8269
Modified:
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/cache/ConnectorCache.java
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/feed/FeedAggregatorDAO.java
Log:
Don't throw exception and kill thread on lock aquisition failure
Modified:
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/cache/ConnectorCache.java
===================================================================
---
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/cache/ConnectorCache.java 2008-05-23
05:22:40 UTC (rev 8268)
+++
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/cache/ConnectorCache.java 2008-05-23
14:13:07 UTC (rev 8269)
@@ -18,6 +18,12 @@
/**
* Caches lists of stuff and can asynchronously call a connector, upon configurable cache
timeout, to
* refresh these lists.
+ * <p>
+ * All method calls to this application-scoped component are synchronized by Seam. That
means you might
+ * get an <tt>IllegalStateException</tt> when an exclusive lock couldn't
be aquired by a thread (because
+ * some other thread was already accessing this instance). It's up to the caller to
handle that exception,
+ * usually you'd log and swallow it and continue without the result of the cache.
+ * </p>
*
* @author Christian Bauer
*/
Modified:
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/feed/FeedAggregatorDAO.java
===================================================================
---
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/feed/FeedAggregatorDAO.java 2008-05-23
05:22:40 UTC (rev 8268)
+++
trunk/examples/wiki/src/main/org/jboss/seam/wiki/connectors/feed/FeedAggregatorDAO.java 2008-05-23
14:13:07 UTC (rev 8269)
@@ -65,13 +65,26 @@
List<FeedEntryDTO> feedEntries = new ArrayList<FeedEntryDTO>();
for (URL feedURL : feedURLs) {
- // For each feed, get the feed entries and put them in a sorted collection,
- // so we get overall sorting
- log.debug("retrieving feed entries from connector for feed URL: " +
feedURL);
- List<FeedEntryDTO> result =
feedConnector.getFeedEntries(feedURL.toString());
- log.debug("retrieved feed entries: " + result.size());
- feedEntries.addAll(result);
- log.debug("number of aggregated feed entries so far: " +
feedEntries.size());
+ try {
+ // For each feed, get the feed entries and put them in a sorted
collection,
+ // so we get overall sorting
+ log.debug("retrieving feed entries from connector for feed URL:
" + feedURL);
+
+ // TODO: This is a synchronized call. This probably means that this is a
bottleneck for scalability because
+ // the Seam locking is very coarse-grained. It would be much better if we
could aquire exclusive read/write
+ // locks, not just exclusive locks.
+ List<FeedEntryDTO> result =
feedConnector.getFeedEntries(feedURL.toString());
+
+ log.debug("retrieved feed entries: " + result.size());
+ feedEntries.addAll(result);
+ log.debug("number of aggregated feed entries so far: " +
feedEntries.size());
+
+ } catch (IllegalStateException ex) {
+ // This is most likely (we hope) a message that says that an exlusive
read lock couldn't be aquired.
+ // Too bad, we just continue without adding the result... the next user
requesting it will probably
+ // get the lock and then we have the result.
+ log.warn("Illegal state exception thrown by feed connector: " +
ex.getMessage());
+ }
}
Collections.sort(
Show replies by date