quotes = new PriorityBlockingQueue(100, new QuoteComparator()); - private MapsuspendedTradeRequests = new ConcurrentHashMap (); + private Map > suspendedTradeRequests = + new ConcurrentHashMap >(); - private Map suspendedQuoteRequests = new ConcurrentHashMap (); + private Map >, Long> suspendedQuoteRequests = + new ConcurrentHashMap >, Long>(); private long timeout = 30000; // 30 seconds of data @@ -79,8 +81,8 @@ public class QuoteController { responses.remove(requestId); } if (suspendedTradeRequests.containsKey(requestId)) { - DeferredResult deferredResult = suspendedTradeRequests.remove(requestId); - deferredResult.trySet(tradeResponse); + DeferredResult deferredResult = suspendedTradeRequests.remove(requestId); + deferredResult.setResult(tradeResponse); } } } @@ -89,11 +91,11 @@ public class QuoteController { logger.info("Client received: " + message); quotes.add(message); - for (Entry entry : suspendedQuoteRequests.entrySet()) { + for (Entry >, Long> entry : suspendedQuoteRequests.entrySet()) { List list = getLatestQuotes(entry.getValue()); if (!list.isEmpty()) { - DeferredResult deferredResult = entry.getKey(); - deferredResult.trySet(list); + DeferredResult> deferredResult = entry.getKey(); + deferredResult.setResult(list); suspendedQuoteRequests.remove(entry.getKey()); } } @@ -112,7 +114,7 @@ public class QuoteController { public Object quotes(@RequestParam(required = false) Long timestamp) { List
list = getLatestQuotes(timestamp); if (list.isEmpty()) { - DeferredResult deferredResult = new DeferredResult(Collections.emptyList()); + DeferredResult> deferredResult = new DeferredResult
>(null, Collections.emptyList()); suspendedQuoteRequests.put(deferredResult, timestamp); return deferredResult; } @@ -144,7 +146,7 @@ public class QuoteController { // error return null; } else { - DeferredResult deferredResult = new DeferredResult(); + DeferredResult
deferredResult = new DeferredResult (); suspendedTradeRequests.put(tradeRequest.getId(), deferredResult); // Fake rest of request while UI is basic diff --git a/stocks/src/main/resources/log4j.properties b/stocks/src/main/resources/log4j.properties index b19a9c2..f5f9334 100644 --- a/stocks/src/main/resources/log4j.properties +++ b/stocks/src/main/resources/log4j.properties @@ -9,3 +9,4 @@ log4j.appender.stdout.layout.ConversionPattern=%-5p %8t [%40.40c{4}]: %m%n log4j.category.org.springframework.amqp.rabbit=INFO log4j.category.org.springframework.beans.factory=INFO +log4j.category.org.springframework.web=DEBUG diff --git a/stocks/src/main/webapp/WEB-INF/web.xml b/stocks/src/main/webapp/WEB-INF/web.xml index e44b3aa..8abaa5b 100644 --- a/stocks/src/main/webapp/WEB-INF/web.xml +++ b/stocks/src/main/webapp/WEB-INF/web.xml @@ -27,6 +27,8 @@ shallowEtagHeaderFilter /* +REQUEST +ASYNC diff --git a/stocks/src/main/webapp/index.jsp b/stocks/src/main/webapp/index.jsp index ce71bb8..cd87864 100644 --- a/stocks/src/main/webapp/index.jsp +++ b/stocks/src/main/webapp/index.jsp @@ -84,7 +84,7 @@ if (response && response.requestId) { $('#confirmations').append($.mustache(confirmation, {response : response})); } else { - $('#messages').html(" The trade request was invalid. Please provide a quantity and a stock ticker.
"); + $('#messages').html("Invalid response.
"); } }); return false;