A nice fix... Thanks! On Fri, Nov 2, 2018 at 1:52 AM <mlyna...@apache.org> wrote:
> Repository: polygene-java > Updated Branches: > refs/heads/cached-fix [created] 984ed215a > > > ReturnCachedValueConcern is not updating cache > > > Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo > Commit: > http://git-wip-us.apache.org/repos/asf/polygene-java/commit/984ed215 > Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/984ed215 > Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/984ed215 > > Branch: refs/heads/cached-fix > Commit: 984ed215a59c2c9932131a6fd8ba57db7d331760 > Parents: 5c16e4c > Author: tbml <tibor.mlyna...@adleritech.com> > Authored: Thu Nov 1 18:51:52 2018 +0100 > Committer: tbml <tibor.mlyna...@adleritech.com> > Committed: Thu Nov 1 18:51:52 2018 +0100 > > ---------------------------------------------------------------------- > .../ReturnCachedValueConcern.java | 16 ++-- > .../invocationcache/ReturnCachedValueTest.java | 80 ++++++++++++++++++++ > 2 files changed, 90 insertions(+), 6 deletions(-) > ---------------------------------------------------------------------- > > > > http://git-wip-us.apache.org/repos/asf/polygene-java/blob/984ed215/libraries/invocation-cache/src/main/java/org/apache/polygene/library/invocationcache/ReturnCachedValueConcern.java > ---------------------------------------------------------------------- > diff --git > a/libraries/invocation-cache/src/main/java/org/apache/polygene/library/invocationcache/ReturnCachedValueConcern.java > b/libraries/invocation-cache/src/main/java/org/apache/polygene/library/invocationcache/ReturnCachedValueConcern.java > index 9e1abb3..d1a7fce 100644 > --- > a/libraries/invocation-cache/src/main/java/org/apache/polygene/library/invocationcache/ReturnCachedValueConcern.java > +++ > b/libraries/invocation-cache/src/main/java/org/apache/polygene/library/invocationcache/ReturnCachedValueConcern.java > @@ -32,15 +32,15 @@ import org.apache.polygene.api.injection.scope.This; > */ > @AppliesTo( Cached.class ) > public class ReturnCachedValueConcern > - extends ConcernOf<InvocationHandler> > - implements InvocationHandler > + extends ConcernOf<InvocationHandler> > + implements InvocationHandler > { > @This @Optional > private InvocationCache cache; > > @Override > public Object invoke( Object proxy, Method method, Object[] args ) > - throws Throwable > + throws Throwable > { > boolean voidReturnType = method.getReturnType().equals( Void.TYPE > ); > if( cache != null || voidReturnType ) > @@ -52,12 +52,16 @@ public class ReturnCachedValueConcern > cacheName += Arrays.asList( args ); > } > Object result = cache.cachedValue( cacheName ); > - if( result != null ) > + if (result == null) > { > - return result; > + // No cached value found > + result = next.invoke(proxy, method, args); > + // Update cache > + cache.setCachedValue(cacheName, result); > } > + return result; > } > - // No cached value found or no InvocationCache defined - call > method > + // No InvocationCache defined - call method > return next.invoke( proxy, method, args ); > } > } > > > http://git-wip-us.apache.org/repos/asf/polygene-java/blob/984ed215/libraries/invocation-cache/src/test/java/org/apache/polygene/library/invocationcache/ReturnCachedValueTest.java > ---------------------------------------------------------------------- > diff --git > a/libraries/invocation-cache/src/test/java/org/apache/polygene/library/invocationcache/ReturnCachedValueTest.java > b/libraries/invocation-cache/src/test/java/org/apache/polygene/library/invocationcache/ReturnCachedValueTest.java > new file mode 100644 > index 0000000..e76ba5d > --- /dev/null > +++ > b/libraries/invocation-cache/src/test/java/org/apache/polygene/library/invocationcache/ReturnCachedValueTest.java > @@ -0,0 +1,80 @@ > +package org.apache.polygene.library.invocationcache; > + > +import java.util.Arrays; > +import java.util.concurrent.atomic.AtomicInteger; > +import org.apache.polygene.api.injection.scope.Service; > +import org.apache.polygene.api.mixin.Mixins; > +import org.apache.polygene.bootstrap.AssemblyException; > +import org.apache.polygene.bootstrap.ModuleAssembly; > +import org.apache.polygene.test.AbstractPolygeneTest; > +import org.junit.jupiter.api.BeforeEach; > +import org.junit.jupiter.api.Test; > + > +import static org.hamcrest.MatcherAssert.assertThat; > +import static org.hamcrest.core.IsEqual.equalTo; > + > +public class ReturnCachedValueTest extends AbstractPolygeneTest { > + > + @Service > + ExpensiveOperation srv; > + > + @BeforeEach > + void resetInvoicationCounter() { > + ExpensiveOperation.invoicationCount.set(0); > + } > + > + @Test > + public void methodResultIsCachedForEqualParameters() { > + > + String parameter = "cachedHash"; > + assertThat(srv.compute(parameter), equalTo(parameter.hashCode())); > + assertThat(srv.compute(parameter), equalTo(parameter.hashCode())); > + > + assertThat(ExpensiveOperation.invoicationCount.intValue(), > equalTo(1)); > + } > + > + //@Test > + //Ignored: cache key builder has to be fixed to support this case > + public void cacheKeyNotWorkWithVarargsParameter() { > + ExpensiveOperation.invoicationCount.set(0); > + srv.compute(7, 13); > + srv.compute(7, 13); > + > + assertThat(ExpensiveOperation.invoicationCount.intValue(), > equalTo(1)); > + } > + > + @Override > + public void assemble(ModuleAssembly module) throws AssemblyException { > + module.services(ExpensiveOperation.class) > + .withMixins(SimpleInvocationCacheMixin.class) > + .withConcerns(ReturnCachedValueConcern.class); > + } > + > + > + @Mixins(Impl.class) > + public interface ExpensiveOperation { > + > + AtomicInteger invoicationCount = new AtomicInteger(0); > + > + @Cached > + int compute(String param); > + > + int compute(int... arguments); > + } > + > + public abstract static class Impl implements ExpensiveOperation { > + > + @Override > + public int compute(String param) { > + invoicationCount.incrementAndGet(); > + return param.hashCode(); > + } > + > + @Override > + public int compute(int... arguments) { > + invoicationCount.incrementAndGet(); > + return Arrays.stream(arguments).sum(); > + } > + } > +} > + > > -- Niclas Hedhman, Software Developer http://polygene.apache.org - New Energy for Java