Repository: tapestry-5
Updated Branches:
  refs/heads/master 626af954f -> 932dda19a


Revert "Reset conduit states with only one access to PerthreadMap", I committed 
that by accident while reviewing

This reverts commit a6604d83c12787f1a41dbe52fc53f5888de0b484.


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/932dda19
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/932dda19
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/932dda19

Branch: refs/heads/master
Commit: 932dda19a822ab67274a9cc80f54440936556951
Parents: 626af95
Author: Jochen Kemnade <[email protected]>
Authored: Mon Feb 16 15:45:22 2015 +0100
Committer: Jochen Kemnade <[email protected]>
Committed: Mon Feb 16 15:45:22 2015 +0100

----------------------------------------------------------------------
 .../InternalComponentResourcesImpl.java         | 50 ++++++++++++++------
 .../internal/transform/ParameterConduit.java    |  8 ++--
 .../internal/transform/ParameterWorker.java     | 24 ++++------
 3 files changed, 48 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/932dda19/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
index 2081b20..886d773 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
@@ -30,7 +30,6 @@ import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.LockSupport;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.services.PerThreadValue;
-import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.PageLifecycleCallbackHub;
@@ -81,8 +80,8 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
 
     // Maps from parameter name to ParameterConduit, used to support mixins
     // which need access to the containing component's PC's
-    private Map<String, ParameterConduit> conduits;
-    private PerThreadValue<Map<String, Object>> conduitStates;
+    // Guarded by: LockSupport
+    private NamedSet<ParameterConduit> conduits;
 
     // Guarded by: LockSupport
     private Messages messages;
@@ -138,6 +137,14 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
     }
 
 
+    private static Worker<ParameterConduit> RESET_PARAMETER_CONDUIT = new 
Worker<ParameterConduit>()
+    {
+        public void work(ParameterConduit value)
+        {
+            value.reset();
+        }
+    };
+
     public InternalComponentResourcesImpl(Page page, ComponentPageElement 
element,
                                           ComponentResources 
containerResources, ComponentPageElementResources elementResources, String 
completeId,
                                           String nestedId, Instantiator 
componentInstantiator, boolean mixin)
@@ -571,13 +578,7 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
         if (variablesMap != null)
             variablesMap.clear();
 
-        if (conduitStates != null)
-        {
-            Map<String, Object> conduidStatesMap = conduitStates.get();
-
-            if (conduidStatesMap != null)
-                conduidStatesMap.clear();
-        }
+        resetParameterConduits();
     }
 
     public void addPageLifecycleListener(PageLifecycleListener listener)
@@ -595,9 +596,32 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
         page.addResetListener(listener);
     }
 
+    private void resetParameterConduits()
+    {
+        try
+        {
+            acquireReadLock();
+
+            if (conduits != null)
+            {
+                conduits.eachValue(RESET_PARAMETER_CONDUIT);
+            }
+        } finally
+        {
+            releaseReadLock();
+        }
+    }
+
     public ParameterConduit getParameterConduit(String parameterName)
     {
-        return conduits.get(parameterName);
+        try
+        {
+            acquireReadLock();
+            return NamedSet.get(conduits, parameterName);
+        } finally
+        {
+            releaseReadLock();
+        }
     }
 
     public void setParameterConduit(String parameterName, ParameterConduit 
conduit)
@@ -611,7 +635,6 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
                 createConduits();
             }
 
-            conduit.init(conduitStates);
             conduits.put(parameterName, conduit);
         } finally
         {
@@ -626,8 +649,7 @@ public class InternalComponentResourcesImpl extends 
LockSupport implements Inter
             upgradeReadLockToWriteLock();
             if (conduits == null)
             {
-                conduits = CollectionFactory.newCaseInsensitiveMap();
-                conduitStates = elementResources.createPerThreadValue();
+                conduits = NamedSet.create();
             }
         } finally
         {

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/932dda19/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterConduit.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterConduit.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterConduit.java
index ab2bc37..e2a99a7 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterConduit.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterConduit.java
@@ -14,12 +14,9 @@
 
 package org.apache.tapestry5.internal.transform;
 
-import java.util.Map;
-
 import org.apache.tapestry5.Binding;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.internal.InternalComponentResources;
-import org.apache.tapestry5.ioc.services.PerThreadValue;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.plastic.FieldConduit;
 
@@ -44,5 +41,8 @@ public interface ParameterConduit extends FieldConduit<Object>
      */
     boolean isBound();
 
-    void init(PerThreadValue conduitStates);
+    /**
+     * Resets the conduit, clearing any <em>temporarily</em> cached data (from 
a non-invariant {@link Binding}).
+     */
+    void reset();
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/932dda19/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterWorker.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterWorker.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterWorker.java
index 533aef0..9025fdc 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterWorker.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ParameterWorker.java
@@ -22,7 +22,6 @@ import org.apache.tapestry5.func.Predicate;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.bindings.LiteralBinding;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.ioc.services.PerThreadValue;
@@ -39,7 +38,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Comparator;
-import java.util.Map;
 
 /**
  * Responsible for identifying parameters via the {@link 
org.apache.tapestry5.annotations.Parameter} annotation on
@@ -75,13 +73,16 @@ public class ParameterWorker implements 
ComponentClassTransformWorker2
 
     private final TypeCoercer typeCoercer;
 
+    private final PerthreadManager perThreadManager;
+
     public ParameterWorker(ComponentClassCache classCache, BindingSource 
bindingSource,
-                           ComponentDefaultProvider defaultProvider, 
TypeCoercer typeCoercer)
+                           ComponentDefaultProvider defaultProvider, 
TypeCoercer typeCoercer, PerthreadManager perThreadManager)
     {
         this.classCache = classCache;
         this.bindingSource = bindingSource;
         this.defaultProvider = defaultProvider;
         this.typeCoercer = typeCoercer;
+        this.perThreadManager = perThreadManager;
     }
 
     private final Comparator<PlasticField> byPrincipalThenName = new 
Comparator<PlasticField>()
@@ -173,6 +174,8 @@ public class ParameterWorker implements 
ComponentClassTransformWorker2
 
                 final Class fieldType = classCache.forName(fieldTypeName);
 
+                final PerThreadValue<ParameterState> stateValue = 
perThreadManager.createValue();
+
                 // Rely on some code generation in the component to set the 
default binding from
                 // the field, or from a default method.
 
@@ -189,8 +192,6 @@ public class ParameterWorker implements 
ComponentClassTransformWorker2
 
                     private boolean invariant = false;
 
-                    PerThreadValue<Map<String, ParameterState>> states;
-
                     {
                         // Inform the ComponentResources about the parameter 
conduit, so it can be
                         // shared with mixins.
@@ -207,18 +208,13 @@ public class ParameterWorker implements 
ComponentClassTransformWorker2
 
                     private ParameterState getState()
                     {
-                        Map<String, ParameterState> map = states.get();
-                        if (map == null) {
-                            map = CollectionFactory.newMap();
-                            states.set(map);
-                        }
-                        ParameterState state = map.get(parameterName);
+                        ParameterState state = stateValue.get();
 
                         if (state == null)
                         {
                             state = new ParameterState();
                             state.value = defaultValue;
-                            map.put(parameterName, state);
+                            stateValue.set(state);
                         }
 
                         return state;
@@ -451,10 +447,6 @@ public class ParameterWorker implements 
ComponentClassTransformWorker2
                         parameterBinding = new LiteralBinding(null, "default " 
+ parameterName, defaultValue);
                     }
 
-                    @Override
-                    public void init(PerThreadValue threadLocalStorage) {
-                        states = (PerThreadValue<Map<String, 
ParameterState>>)threadLocalStorage;
-                    }
 
                 };
             }

Reply via email to