public Object get(IdRef<?> id) { if (cache.containsKey(id)) { return cache.get(id); } if (noResults.contains(id)) { throw new NoResultException(); } try { Object t = id.refetch(); cache.put(id, t); return t; } catch (NoResultException e) { noResults.add(id); throw e; } } }
@Test public void testCacheFetch() { CachedEntity foo = yawp.save(new CachedEntity("foo")); Map<String, Object> cacheFetch = CachedEntityHook.caches.get(QueryType.FETCH); assertThat(cacheFetch.size(), is(equalTo(0))); CachedEntity refetch = foo.getId().refetch(); assertThat(cacheFetch.size(), is(equalTo(1))); assertThat(refetch.getText(), is(equalTo("foo"))); CachedEntity refetch2 = foo.getId().refetch(); assertThat(cacheFetch.size(), is(equalTo(1))); assertSame(refetch, refetch2); // from cache }
@Test public void testRefecth() { Child c1 = yawp.save(new Child("c1")); assertThat(c1.getId().fetch().getName(), is("c1")); yawp.destroy(c1.getId()); try { c1.getId().refetch(); } catch (NoResultException ex) { return; } fail("Exception NoResultException should have been thrown..."); } }
PipedObjectCounter counterSink2; counterSink1 = idSink1.refetch(); assertEquals((Integer) 1, counterSink1.getCount()); assertEquals((Integer) 1, counterSink1.getCountGroupA()); assertEquals((Integer) 0, counterSink1.getCountGroupB()); counterSink2 = idSink2.refetch(); assertEquals((Integer) 1, counterSink2.getCount()); assertEquals((Integer) 0, counterSink2.getCountGroupA()); awaitAsync(20, TimeUnit.SECONDS); counterSink1 = idSink1.refetch(); assertEquals((Integer) 0, counterSink1.getCount()); assertEquals((Integer) 0, counterSink1.getCountGroupA()); assertEquals((Integer) 0, counterSink1.getCountGroupB()); counterSink2 = idSink2.refetch(); assertEquals((Integer) 2, counterSink2.getCount()); assertEquals((Integer) 1, counterSink2.getCountGroupA());