You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2011/03/11 18:23:35 UTC

svn commit: r1080684 - /incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java

Author: mbenson
Date: Fri Mar 11 17:23:34 2011
New Revision: 1080684

URL: http://svn.apache.org/viewvc?rev=1080684&view=rev
Log:
fix indexed caching

Modified:
    incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java

Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java?rev=1080684&r1=1080683&r2=1080684&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java Fri Mar 11 17:23:34 2011
@@ -498,7 +498,7 @@ interface Timestamped {
             }
 
             private volatile long millis;
-            private final Object owner;
+            private Object owner;
             private transient MetaBean cached;
 
             /**
@@ -596,6 +596,7 @@ interface Timestamped {
              */
             public InIterableBean(Bean cacheMeta) {
                 this.bean = cacheMeta;
+                this.millis = Utils.read(cacheMeta);
             }
 
             /**
@@ -616,7 +617,7 @@ interface Timestamped {
              * {@inheritDoc}
              */
             public void touch() {
-                this.millis = System.currentTimeMillis();
+                // noop
             }
 
             /**
@@ -675,10 +676,17 @@ interface Timestamped {
                 int last = sources.length - 1;
                 Bean cacheHolder = (Bean) sources[last];
 
+                // if we have gotten here, we've proven that any cached result held by our cacheHolder is outdated,
+                // right?
+                cacheHolder.cache(null);
                 InIterableBean result = new InIterableBean(cacheHolder);
                 for (MetaBean source : sources) {
                     DynamicModelManager.get().copy(result, source);
                 }
+                // ensure result carries the later timestamp of its sources:
+                if (sources.length > 1 && Utils.COMPARATOR.compare(sources[0], cacheHolder) > 0) {
+                    result.millis = Utils.read(sources[0]);
+                }
                 cache.put(id, result);
                 return result;
             }
@@ -701,6 +709,7 @@ interface Timestamped {
             private AwareCollection(Type type, Object owner) {
                 super(type);
                 this.owner = owner;
+                ((Bean) prototype).owner = owner;
             }
 
             /**
@@ -738,6 +747,7 @@ interface Timestamped {
             private AwareMap(Type type, FeaturesCapable owner) {
                 super(type);
                 this.owner = owner;
+                ((Bean) prototype).owner = owner;
             }
 
             /**