polygene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niclas Hedhman <nic...@hedhman.org>
Subject Re: polygene-java git commit: ReturnCachedValueConcern is not updating cache
Date Fri, 02 Nov 2018 00:38:11 GMT
A nice fix... Thanks!

On Fri, Nov 2, 2018 at 1:52 AM <mlynarik@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.mlynarik@adleritech.com>
> Authored: Thu Nov 1 18:51:52 2018 +0100
> Committer: tbml <tibor.mlynarik@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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message