You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/07/11 21:06:05 UTC

svn commit: r963129 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java

Author: hlship
Date: Sun Jul 11 19:06:04 2010
New Revision: 963129

URL: http://svn.apache.org/viewvc?rev=963129&view=rev
Log:
TAP5-1197: Make use of PerThreadValue inside PersistWorker

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java?rev=963129&r1=963128&r2=963129&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PersistWorker.java Sun Jul 11 19:06:04 2010
@@ -21,6 +21,7 @@ import org.apache.tapestry5.annotations.
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.ioc.services.FieldValueConduit;
+import org.apache.tapestry5.ioc.services.PerThreadValue;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.runtime.PageLifecycleAdapter;
@@ -40,18 +41,18 @@ public class PersistWorker implements Co
 
         private final String name;
 
-        private final Object defaultValue;
+        private final PerThreadValue<Object> fieldValue;
 
-        private final String key;
+        private final Object defaultValue;
 
-        public PersistentFieldConduit(InternalComponentResources resources, String name, Object defaultValue)
+        public PersistentFieldConduit(InternalComponentResources resources, String name,
+                PerThreadValue<Object> fieldValue, Object defaultValue)
         {
             this.resources = resources;
             this.name = name;
+            this.fieldValue = fieldValue;
             this.defaultValue = defaultValue;
 
-            this.key = String.format("PersistWorker:%s/%s", resources.getCompleteId(), name);
-
             resources.addPageLifecycleListener(new PageLifecycleAdapter()
             {
                 @Override
@@ -62,35 +63,25 @@ public class PersistWorker implements Co
             });
         }
 
-        private PerThreadState getState()
-        {
-            PerThreadState state = (PerThreadState) perThreadManager.get(key);
-
-            if (state == null)
-            {
-                state = new PerThreadState(defaultValue);
-                perThreadManager.put(key, state);
-            }
-
-            return state;
-        }
-
         public Object get()
         {
-            return getState().value;
+            if (!fieldValue.exists())
+                return defaultValue;
+
+            return fieldValue.get();
         }
 
         public void set(Object newValue)
         {
             resources.persistFieldChange(name, newValue);
 
-            getState().value = newValue;
+            fieldValue.set(newValue);
         }
 
         private void restoreStateAtPageAttach()
         {
             if (resources.hasFieldChange(name))
-                getState().value = resources.getFieldChange(name);
+                fieldValue.set(resources.getFieldChange(name));
         }
     }
 
@@ -128,8 +119,10 @@ public class PersistWorker implements Co
         {
             public FieldValueConduit get(ComponentResources resources)
             {
+                String key = String.format("PersistWorker:%s/%s", resources.getCompleteId(), logicalFieldName);
+
                 return new PersistentFieldConduit((InternalComponentResources) resources, logicalFieldName,
-                        defaultValue);
+                        perThreadManager.createValue(key), defaultValue);
             }
         };