public Collection<PreloadedData> preload(Collection<Callable<PreloadedData>> tasks) { ConcurrentPreloads preloads = new ConcurrentPreloads(tasks.size()); int processed = tasks.size(); for (Callable<PreloadedData> task : tasks) { processed -= 1; if (processed == 0) { // The last preload fires in the current thread. FutureTask<PreloadedData> futureTask = new FutureTask<PreloadedData>(task); futureTask.run(); preloads.add(futureTask); } else { preloads.add(executor.submit(task)); } } return preloads; } }
@Override protected Collection<PreloadedData> delegate() { if (loaded == null) { loaded = getData(); } return loaded; }
public PreloadedData apply(Future<PreloadedData> preloadedDataFuture) { return getPreloadedData(preloadedDataFuture); } });
@Test(expected = RuntimeException.class) public void getDataThrowsInterruped() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsInterrupted()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // InterruptedException should immediately terminate iterator.next(); }
@Test(expected = RuntimeException.class) public void getDataThrowsInterruped() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsInterrupted()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // InterruptedException should immediately terminate iterator.next(); }
@Test(expected = RuntimeException.class) public void getDataThrowsInterruped() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsInterrupted()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // InterruptedException should immediately terminate iterator.next(); }
public Collection<PreloadedData> preload(Collection<Callable<PreloadedData>> tasks) { ConcurrentPreloads preloads = new ConcurrentPreloads(tasks.size()); int processed = tasks.size(); for (Callable<PreloadedData> task : tasks) { processed -= 1; if (processed == 0) { // The last preload fires in the current thread. FutureTask<PreloadedData> futureTask = new FutureTask<PreloadedData>(task); futureTask.run(); preloads.add(futureTask); } else { preloads.add(executor.submit(task)); } } return preloads; } }
@Override protected Collection<PreloadedData> delegate() { if (loaded == null) { loaded = getData(); } return loaded; }
public PreloadedData apply(Future<PreloadedData> preloadedDataFuture) { return getPreloadedData(preloadedDataFuture); } });
@Test public void getData() throws Exception { ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.returnsNormal("foo")); preloads.add(TestFuture.returnsNormal("bar")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); assertEquals(TestFuture.expectedResult("bar"), iterator.next().toJson()); assertFalse(iterator.hasNext()); }
public Collection<PreloadedData> preload(Collection<Callable<PreloadedData>> tasks) { ConcurrentPreloads preloads = new ConcurrentPreloads(tasks.size()); int processed = tasks.size(); for (Callable<PreloadedData> task : tasks) { processed -= 1; if (processed == 0) { // The last preload fires in the current thread. FutureTask<PreloadedData> futureTask = new FutureTask<PreloadedData>(task); futureTask.run(); preloads.add(futureTask); } else { preloads.add(executor.submit(task)); } } return preloads; } }
@Override protected Collection<PreloadedData> delegate() { if (loaded == null) { loaded = getData(); } return loaded; }
public PreloadedData apply(Future<PreloadedData> preloadedDataFuture) { return getPreloadedData(preloadedDataFuture); } });
@Test public void getData() throws Exception { ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.returnsNormal("foo")); preloads.add(TestFuture.returnsNormal("bar")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); assertEquals(TestFuture.expectedResult("bar"), iterator.next().toJson()); assertFalse(iterator.hasNext()); }
@Test public void getData() throws Exception { ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.returnsNormal("foo")); preloads.add(TestFuture.returnsNormal("bar")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); assertEquals(TestFuture.expectedResult("bar"), iterator.next().toJson()); assertFalse(iterator.hasNext()); }
@Test public void getDataWithRuntimeException() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsExecution()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // First item should throw an exception, a PreloadException around // a RuntimeException PreloadedData withError = iterator.next(); try { withError.toJson(); fail(); } catch (PreloadException pe) { assertSame(pe.getCause().getClass(), RuntimeException.class); } // And iteration should continue assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); }
@Test public void getDataWithRuntimeException() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsExecution()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // First item should throw an exception, a PreloadException around // a RuntimeException PreloadedData withError = iterator.next(); try { withError.toJson(); fail(); } catch (PreloadException pe) { assertSame(pe.getCause().getClass(), RuntimeException.class); } // And iteration should continue assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); }
@Test public void getDataWithRuntimeException() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsExecution()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // First item should throw an exception, a PreloadException around // a RuntimeException PreloadedData withError = iterator.next(); try { withError.toJson(); fail(); } catch (PreloadException pe) { assertSame(pe.getCause().getClass(), RuntimeException.class); } // And iteration should continue assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); }
@Test public void getDataWithPreloadException() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsExecutionWrapped()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // First item should throw an exception, a straight PreloadException PreloadedData withError = iterator.next(); try { withError.toJson(); fail(); } catch (PreloadException pe) { assertNull(pe.getCause()); } // And iteration should continue assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); }
@Test public void getDataWithPreloadException() throws Exception{ ConcurrentPreloads preloads = new ConcurrentPreloads(); preloads.add(TestFuture.throwsExecutionWrapped()); preloads.add(TestFuture.returnsNormal("foo")); assertEquals(2, preloads.size()); Iterator<PreloadedData> iterator = preloads.iterator(); // First item should throw an exception, a straight PreloadException PreloadedData withError = iterator.next(); try { withError.toJson(); fail(); } catch (PreloadException pe) { assertNull(pe.getCause()); } // And iteration should continue assertEquals(TestFuture.expectedResult("foo"), iterator.next().toJson()); }