<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.jakarta.tapestry.devel">
    <title>gmane.comp.jakarta.tapestry.devel</title>
    <link>http://blog.gmane.org/gmane.comp.jakarta.tapestry.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50036"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50035"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50034"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50033"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50032"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50028"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50025"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50024"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50018"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50017"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50012"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50009"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50007"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50006"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50004"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49999"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49996"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49993"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49991"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49990"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50036">
    <title>git commit: Advance version number to 5.3.4-rc-3</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50036</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/5.3 8b23962c4 -&amp;gt; 8d35d8d6a


Advance version number to 5.3.4-rc-3


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

Branch: refs/heads/5.3
Commit: 8d35d8d6a4c29b722291014aca96e96aae7f38ce
Parents: 8b23962
Author: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Fri May 25 14:01:59 2012 -0700
Committer: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Fri May 25 14:01:59 2012 -0700

----------------------------------------------------------------------
 build.gradle |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8d35d8d6/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index e5c06f7..00da45d 100644
--- a/build.gradle
+++ b/build.gradle
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -9,7 +9,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; apply from: "md5.gradle"
 project.ext.versions = [
   // Remember that when generating a release, this should be incremented. Also don"t forget to
   // tag the release in Subversion.
-  tapestry: "5.3.4-rc-2",
+  tapestry: "5.3.4-rc-3",
   jetty: "7.0.0.v20091005",
   tomcat: "6.0.30",
   testng: "5.14.9",


&lt;/pre&gt;</description>
    <dc:creator>hlship&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-25T21:02:37</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50035">
    <title>git commit: Cache result of determining method/constructor location - another hotspot found in high volume applications</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50035</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/5.3 9afb9b692 -&amp;gt; 8b23962c4


Cache result of determining method/constructor location
- another hotspot found in high volume applications


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

Branch: refs/heads/5.3
Commit: 8b23962c48076aa90e8e81b89de0e5f3234ca498
Parents: 9afb9b6
Author: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Fri May 25 13:58:49 2012 -0700
Committer: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Fri May 25 14:00:27 2012 -0700

----------------------------------------------------------------------
 .../services/ComponentInstantiatorSourceImpl.java  |    3 +-
 .../apache/tapestry5/services/TapestryModule.java  |   26 ++++-
 .../internal/AbstractReloadableObjectCreator.java  |   10 ++-
 .../tapestry5/ioc/internal/RegistryImpl.java       |    2 +-
 .../ioc/internal/ReloadableObjectCreator.java      |    7 +-
 .../internal/ReloadableObjectCreatorSource.java    |    6 +-
 ...loadableServiceImplementationObjectCreator.java |   13 ++-
 .../internal/services/PlasticProxyFactoryImpl.java |   79 ++++++++++++---
 .../ioc/services/PlasticProxyFactory.java          |   35 +++++--
 9 files changed, 136 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index afac15d..2ee4d49 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2006, 2007, 2008, 2010, 2011 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -174,6 +174,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class ComponentInstantiatorSourceImpl implements ComponentInstantia
     {
         changeTracker.clear();
         classToInstantiator.clear();
+        proxyFactory.clearCache();
 
         // Release the existing class pool, loader and so forth.
         // Create a new one.

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
index e2561d0..04c9365 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1234,9 +1234,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * href="https://issues.apache.org/jira/browse/TAP5-79"&amp;gt;TAP5-79&amp;lt;/a&amp;gt; for details. There are no longer any built-in
      * contributions to the configuration.
      *
-     * &amp;lt; at &amp;gt;param configuration contributions of special factories for some constants, each
-     *                      contributed factory may return a
-     *                      binding if applicable, or null otherwise
+     * &amp;lt; at &amp;gt;param configuration
+     *         contributions of special factories for some constants, each
+     *         contributed factory may return a
+     *         binding if applicable, or null otherwise
      */
     public BindingFactory buildPropBindingFactory(List&amp;lt;BindingFactory&amp;gt; configuration, &amp;lt; at &amp;gt;Autobuild
     PropBindingFactory service)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2222,7 +2223,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * &amp;lt;p/&amp;gt;
      * This contributes "class", "properties" and "tml" (the template extension).
      *
-     * &amp;lt; at &amp;gt;param configuration collection of extensions
+     * &amp;lt; at &amp;gt;param configuration
+     *         collection of extensions
      */
     public static void contributeResourceDigestGenerator(Configuration&amp;lt;String&amp;gt; configuration)
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2694,7 +2696,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * even if a user overrides the default
      * service implementation.
      *
-     * &amp;lt; at &amp;gt;param defaultSource The service to decorate
+     * &amp;lt; at &amp;gt;param defaultSource
+     *         The service to decorate
      * &amp;lt; at &amp;gt;param environment
      */
     public static FieldValidatorDefaultSource decorateFieldValidatorDefaultSource(
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2898,4 +2901,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
     {
         configuration.add("LocalhostOnly", new LocalhostOnly());
     }
+
+    &amp;lt; at &amp;gt;Startup
+    public static void registerToClearPlasticProxyFactoryOnInvalidation(&amp;lt; at &amp;gt;ComponentClasses InvalidationEventHub hub, &amp;lt; at &amp;gt;Builtin final PlasticProxyFactory proxyFactory)
+    {
+        hub.addInvalidationListener(new InvalidationListener()
+        {
+            &amp;lt; at &amp;gt;Override
+            public void objectWasInvalidated()
+            {
+                proxyFactory.clearCache();
+            }
+        });
+    }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
index ed69717..0bd464d 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010, 2011 The Apache Software Foundation
+// Copyright 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,6 +28,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import org.apache.tapestry5.ioc.ReloadAware;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.services.UpdateListener;
 import org.slf4j.Logger;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,6 +52,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
     private final URLChangeTracker changeTracker = new URLChangeTracker();
 
+    private final PlasticProxyFactory proxyFactory;
+
     /**
      * The set of class names that should be loaded by the class loader. This is necessary to support
      * reloading the class when a base class changes, and to properly support access to protected methods.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,9 +66,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
     private PlasticClassLoader loader;
 
-    protected AbstractReloadableObjectCreator(ClassLoader baseClassLoader, String implementationClassName,
+    protected AbstractReloadableObjectCreator(PlasticProxyFactory proxyFactory, ClassLoader baseClassLoader, String implementationClassName,
                                               Logger logger, OperationTracker tracker)
     {
+        this.proxyFactory = proxyFactory;
         this.baseClassLoader = baseClassLoader;
         this.implementationClassName = implementationClassName;
         this.logger = logger;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,6 +93,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
         loader = null;
 
+        proxyFactory.clearCache();
+
         boolean reloadNow = informInstanceOfReload();
 
         instance = reloadNow ? createInstance() : null;

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
index 12a7c54..b1c35f1 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1097,7 +1097,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class RegistryImpl implements Registry, InternalRegistry, ServiceProxyPro
     private &amp;lt;T&amp;gt; T createReloadingProxy(Class&amp;lt;T&amp;gt; interfaceClass, final Class&amp;lt;? extends T&amp;gt; implementationClass,
                                        ObjectLocator locator)
     {
-        ReloadableObjectCreator creator = new ReloadableObjectCreator(implementationClass.getClassLoader(),
+        ReloadableObjectCreator creator = new ReloadableObjectCreator(proxyFactory, implementationClass.getClassLoader(),
                 implementationClass.getName(), loggerSource.getLogger(implementationClass), this, locator);
 
         getService(UpdateListenerHub.class).addUpdateListener(creator);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
index 48c802b..b54da52 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -16,6 +16,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; package org.apache.tapestry5.ioc.internal;
 
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.slf4j.Logger;
 
 /**
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -25,10 +26,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableObjectCreator extends AbstractReloadableObjectCreator
 {
     private final ObjectLocator locator;
 
-    public ReloadableObjectCreator(ClassLoader baseClassLoader, String implementationClassName, Logger logger,
+    public ReloadableObjectCreator(PlasticProxyFactory proxyFactory, ClassLoader baseClassLoader, String implementationClassName, Logger logger,
             OperationTracker tracker, ObjectLocator locator)
     {
-        super(baseClassLoader, implementationClassName, logger, tracker);
+        super(proxyFactory, baseClassLoader, implementationClassName, logger, tracker);
 
         this.locator = locator;
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
index 8e5dd82..2bf35f7 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010, 2011 The Apache Software Foundation
+// Copyright 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -73,13 +73,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableObjectCreatorSource implements ObjectCreatorSource
 
     private Object createReloadableProxy(ServiceBuilderResources resources)
     {
-        ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(
+        ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory,
                 resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName());
 
         resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator);
 
         if (eagerLoad)
+        {
             reloadableCreator.createObject();
+        }
 
         return proxyFactory.createProxy(serviceInterfaceClass, reloadableCreator, getDescription());
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
index 31611eb..93baf33 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14,11 +14,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 package org.apache.tapestry5.ioc.internal;
 
-import java.lang.reflect.Constructor;
-
 import org.apache.tapestry5.ioc.ObjectCreator;
 import org.apache.tapestry5.ioc.ServiceBuilderResources;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
+
+import java.lang.reflect.Constructor;
 
 /**
  * Returns an {&amp;lt; at &amp;gt;link ObjectCreator} for lazily instantiating a given implementation class (with dependencies).
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,10 +31,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableServiceImplementationObjectCreator extends AbstractReload
 {
     private final ServiceBuilderResources resources;
 
-    public ReloadableServiceImplementationObjectCreator(ServiceBuilderResources resources, ClassLoader baseClassLoader,
-            String implementationClassName)
+    public ReloadableServiceImplementationObjectCreator(PlasticProxyFactory proxyFactory, ServiceBuilderResources resources, ClassLoader baseClassLoader,
+                                                        String implementationClassName)
     {
-        super(baseClassLoader, implementationClassName, resources.getLogger(), resources.getTracker());
+        super(proxyFactory, baseClassLoader, implementationClassName, resources.getLogger(), resources.getTracker());
 
         this.resources = resources;
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
index 440078b..45bf82e 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -19,6 +19,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import org.apache.tapestry5.internal.plastic.asm.Type;
 import org.apache.tapestry5.internal.plastic.asm.tree.*;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.ObjectCreator;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.plastic.*;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,11 +29,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import java.lang.reflect.Constructor;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
 import java.util.List;
+import java.util.Map;
 
 public class PlasticProxyFactoryImpl implements PlasticProxyFactory
 {
     private final PlasticManager manager;
 
+    private final Map&amp;lt;String, Location&amp;gt; memberToLocation = CollectionFactory.newConcurrentMap();
+
     public PlasticProxyFactoryImpl(ClassLoader parentClassLoader, Logger logger)
     {
         this(PlasticManager.withClassLoader(parentClassLoader).create(), logger);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,35 +113,78 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class PlasticProxyFactoryImpl implements PlasticProxyFactory
         return bytecode == null ? null : PlasticInternalUtils.convertBytecodeToClassNode(bytecode);
     }
 
-    public Location getMethodLocation(Method method)
+    public Location getMethodLocation(final Method method)
     {
+        ObjectCreator&amp;lt;String&amp;gt; descriptionCreator = new ObjectCreator&amp;lt;String&amp;gt;()
+        {
+            &amp;lt; at &amp;gt;Override
+            public String createObject()
+            {
+                return InternalUtils.asString(method);
+            }
+        };
+
         return getMemberLocation(method, method.getName(), Type.getMethodDescriptor(method),
-                InternalUtils.asString(method));
+                descriptionCreator);
     }
 
-    public Location getConstructorLocation(Constructor constructor)
+    public Location getConstructorLocation(final Constructor constructor)
     {
-        StringBuilder builder = new StringBuilder(constructor.getDeclaringClass().getName()).append("(");
-        String sep = "";
-
-        for (Class parameterType : constructor.getParameterTypes())
+        ObjectCreator&amp;lt;String&amp;gt; descriptionCreator = new ObjectCreator&amp;lt;String&amp;gt;()
         {
-            builder.append(sep);
-            builder.append(parameterType.getSimpleName());
+            &amp;lt; at &amp;gt;Override
+            public String createObject()
+            {
+                StringBuilder builder = new StringBuilder(constructor.getDeclaringClass().getName()).append("(");
+                String sep = "";
 
-            sep = ", ";
-        }
+                for (Class parameterType : constructor.getParameterTypes())
+                {
+                    builder.append(sep);
+                    builder.append(parameterType.getSimpleName());
 
-        builder.append(")");
+                    sep = ", ";
+                }
 
-        String constructorDescription = builder.toString();
+                builder.append(")");
+
+                return builder.toString();
+            }
+        };
 
         return getMemberLocation(constructor, "&amp;lt;init&amp;gt;", Type.getConstructorDescriptor(constructor),
-                constructorDescription);
+                descriptionCreator);
+    }
+
+    &amp;lt; at &amp;gt;Override
+    public void clearCache()
+    {
+        memberToLocation.clear();
+    }
+
+
+    public Location getMemberLocation(Member member, String methodName, String memberTypeDesc, ObjectCreator&amp;lt;String&amp;gt; textDescriptionCreator)
+    {
+        String className = member.getDeclaringClass().getName();
+
+        String key = className + ":" + methodName + ":" + memberTypeDesc;
+
+        Location location = memberToLocation.get(key);
+
+        if (location == null)
+        {
+            location = constructMemberLocation(member, methodName, memberTypeDesc, textDescriptionCreator.createObject());
+
+            memberToLocation.put(key, location);
+        }
+
+        return location;
+
     }
 
-    public Location getMemberLocation(Member member, String methodName, String memberTypeDesc, String textDescription)
+    private Location constructMemberLocation(Member member, String methodName, String memberTypeDesc, String textDescription)
     {
+
         ClassNode classNode = readClassNode(member.getDeclaringClass());
 
         if (classNode == null)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8b23962c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
index e8099c3..81e1eac 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -42,8 +42,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * Creates a proxy object that implements the indicated interface, then invokes the callback to further
      * configure the proxy.
      *
-     * &amp;lt; at &amp;gt;param interfaceType interface implemented by proxy
-     * &amp;lt; at &amp;gt;param callback      configures the proxy
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         interface implemented by proxy
+     * &amp;lt; at &amp;gt;param callback
+     *         configures the proxy
      * &amp;lt; at &amp;gt;return instantiator that can be used to create an instance of the proxy class
      */
     &amp;lt;T&amp;gt; ClassInstantiator&amp;lt;T&amp;gt; createProxy(Class&amp;lt;T&amp;gt; interfaceType, PlasticClassTransformer callback);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -53,7 +55,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * used in the cases where encapsulating the PlasticClass construction into a {&amp;lt; at &amp;gt;linkplain PlasticClassTransformer
      * callback} is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
      *
-     * &amp;lt; at &amp;gt;param interfaceType class proxy will extend from
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         class proxy will extend from
      * &amp;lt; at &amp;gt;return transformation from which an instantiator may be created
      */
     &amp;lt;T&amp;gt; PlasticClassTransformation&amp;lt;T&amp;gt; createProxyTransformation(Class&amp;lt;T&amp;gt; interfaceType);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,10 +67,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * creator implementation may decide to
      * cache the return value as appropriate).
      *
-     * &amp;lt; at &amp;gt;param &amp;lt;T&amp;gt;           type of proxy
-     * &amp;lt; at &amp;gt;param interfaceType interface class for proxy
-     * &amp;lt; at &amp;gt;param creator       object responsible for creating the real object
-     * &amp;lt; at &amp;gt;param description   the &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt; of the proxy
+     * &amp;lt; at &amp;gt;param &amp;lt;T&amp;gt;
+     *         type of proxy
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         interface class for proxy
+     * &amp;lt; at &amp;gt;param creator
+     *         object responsible for creating the real object
+     * &amp;lt; at &amp;gt;param description
+     *         the &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt; of the proxy
      * &amp;lt; at &amp;gt;return proxy instance
      */
     &amp;lt;T&amp;gt; T createProxy(Class&amp;lt;T&amp;gt; interfaceType, ObjectCreator&amp;lt;T&amp;gt; creator, String description);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -75,7 +82,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
     /**
      * Converts a method to a {&amp;lt; at &amp;gt;link Location}, which includes information about the source file name and line number.
      *
-     * &amp;lt; at &amp;gt;param method to look up
+     * &amp;lt; at &amp;gt;param method
+     *         to look up
      * &amp;lt; at &amp;gt;return the location (identifying the method and possibly, the line number within the method)
      */
     Location getMethodLocation(Method method);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -87,4 +95,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * &amp;lt; at &amp;gt;return the location (identifying the constructor and possibly, the line number within the method)
      */
     Location getConstructorLocation(Constructor constructor);
+
+    /**
+     * Clears any cached information stored by the proxy factory; this is useful in Tapestry development mode
+     * when a class loader may have been discarded (because the proxy factory may indirectly keep references
+     * to classes loaded by the old class loader).
+     *
+     * &amp;lt; at &amp;gt;since 5.3.3
+     */
+    void clearCache();
 }


&lt;/pre&gt;</description>
    <dc:creator>hlship&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-25T21:01:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50034">
    <title>git commit: Cache result of determining method/constructor location - another hotspot found in high volume applications</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50034</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/master 8224aae21 -&amp;gt; 9b4a8e12b


Cache result of determining method/constructor location
- another hotspot found in high volume applications


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

Branch: refs/heads/master
Commit: 9b4a8e12b04d9c9ace2a0817cccf6fa541aafae3
Parents: 8224aae
Author: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Fri May 25 13:58:49 2012 -0700
Committer: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Fri May 25 13:58:49 2012 -0700

----------------------------------------------------------------------
 .../services/ComponentInstantiatorSourceImpl.java  |    3 +-
 .../apache/tapestry5/services/TapestryModule.java  |   26 ++++-
 .../internal/AbstractReloadableObjectCreator.java  |   10 ++-
 .../tapestry5/ioc/internal/RegistryImpl.java       |    2 +-
 .../ioc/internal/ReloadableObjectCreator.java      |    7 +-
 .../internal/ReloadableObjectCreatorSource.java    |    6 +-
 ...loadableServiceImplementationObjectCreator.java |   13 ++-
 .../internal/services/PlasticProxyFactoryImpl.java |   79 ++++++++++++---
 .../ioc/services/PlasticProxyFactory.java          |   35 +++++--
 9 files changed, 136 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index 8e8b281..6a0f591 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2006, 2007, 2008, 2010, 2011 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -168,6 +168,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class ComponentInstantiatorSourceImpl implements ComponentInstantia
     {
         changeTracker.clear();
         classToInstantiator.clear();
+        proxyFactory.clearCache();
 
         // Release the existing class pool, loader and so forth.
         // Create a new one.

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
index 9fde12c..87696f5 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1229,9 +1229,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * href="https://issues.apache.org/jira/browse/TAP5-79"&amp;gt;TAP5-79&amp;lt;/a&amp;gt; for details. There are no longer any built-in
      * contributions to the configuration.
      *
-     * &amp;lt; at &amp;gt;param configuration contributions of special factories for some constants, each
-     *                      contributed factory may return a
-     *                      binding if applicable, or null otherwise
+     * &amp;lt; at &amp;gt;param configuration
+     *         contributions of special factories for some constants, each
+     *         contributed factory may return a
+     *         binding if applicable, or null otherwise
      */
     public BindingFactory buildPropBindingFactory(List&amp;lt;BindingFactory&amp;gt; configuration, &amp;lt; at &amp;gt;Autobuild
     PropBindingFactory service)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2195,7 +2196,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * &amp;lt;p/&amp;gt;
      * This contributes "class", "properties" and "tml" (the template extension).
      *
-     * &amp;lt; at &amp;gt;param configuration collection of extensions
+     * &amp;lt; at &amp;gt;param configuration
+     *         collection of extensions
      */
     public static void contributeResourceDigestGenerator(Configuration&amp;lt;String&amp;gt; configuration)
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2664,7 +2666,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
      * even if a user overrides the default
      * service implementation.
      *
-     * &amp;lt; at &amp;gt;param defaultSource The service to decorate
+     * &amp;lt; at &amp;gt;param defaultSource
+     *         The service to decorate
      * &amp;lt; at &amp;gt;param environment
      */
     public static FieldValidatorDefaultSource decorateFieldValidatorDefaultSource(
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2868,4 +2871,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public final class TapestryModule
     {
         configuration.add("LocalhostOnly", new LocalhostOnly());
     }
+
+    &amp;lt; at &amp;gt;Startup
+    public static void registerToClearPlasticProxyFactoryOnInvalidation(&amp;lt; at &amp;gt;ComponentClasses InvalidationEventHub hub, &amp;lt; at &amp;gt;Builtin final PlasticProxyFactory proxyFactory)
+    {
+        hub.addInvalidationListener(new InvalidationListener()
+        {
+            &amp;lt; at &amp;gt;Override
+            public void objectWasInvalidated()
+            {
+                proxyFactory.clearCache();
+            }
+        });
+    }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
index ed69717..0bd464d 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010, 2011 The Apache Software Foundation
+// Copyright 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,6 +28,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import org.apache.tapestry5.ioc.ReloadAware;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.services.UpdateListener;
 import org.slf4j.Logger;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,6 +52,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
     private final URLChangeTracker changeTracker = new URLChangeTracker();
 
+    private final PlasticProxyFactory proxyFactory;
+
     /**
      * The set of class names that should be loaded by the class loader. This is necessary to support
      * reloading the class when a base class changes, and to properly support access to protected methods.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,9 +66,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
     private PlasticClassLoader loader;
 
-    protected AbstractReloadableObjectCreator(ClassLoader baseClassLoader, String implementationClassName,
+    protected AbstractReloadableObjectCreator(PlasticProxyFactory proxyFactory, ClassLoader baseClassLoader, String implementationClassName,
                                               Logger logger, OperationTracker tracker)
     {
+        this.proxyFactory = proxyFactory;
         this.baseClassLoader = baseClassLoader;
         this.implementationClassName = implementationClassName;
         this.logger = logger;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -89,6 +93,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public abstract class AbstractReloadableObjectCreator implements ObjectCreator,
 
         loader = null;
 
+        proxyFactory.clearCache();
+
         boolean reloadNow = informInstanceOfReload();
 
         instance = reloadNow ? createInstance() : null;

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
index 7eb0906..d618341 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1079,7 +1079,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class RegistryImpl implements Registry, InternalRegistry, ServiceProxyPro
     private &amp;lt;T&amp;gt; T createReloadingProxy(Class&amp;lt;T&amp;gt; interfaceClass, final Class&amp;lt;? extends T&amp;gt; implementationClass,
                                        ObjectLocator locator)
     {
-        ReloadableObjectCreator creator = new ReloadableObjectCreator(implementationClass.getClassLoader(),
+        ReloadableObjectCreator creator = new ReloadableObjectCreator(proxyFactory, implementationClass.getClassLoader(),
                 implementationClass.getName(), loggerSource.getLogger(implementationClass), this, locator);
 
         getService(UpdateListenerHub.class).addUpdateListener(creator);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
index 48c802b..b54da52 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -16,6 +16,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; package org.apache.tapestry5.ioc.internal;
 
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.OperationTracker;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.slf4j.Logger;
 
 /**
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -25,10 +26,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableObjectCreator extends AbstractReloadableObjectCreator
 {
     private final ObjectLocator locator;
 
-    public ReloadableObjectCreator(ClassLoader baseClassLoader, String implementationClassName, Logger logger,
+    public ReloadableObjectCreator(PlasticProxyFactory proxyFactory, ClassLoader baseClassLoader, String implementationClassName, Logger logger,
             OperationTracker tracker, ObjectLocator locator)
     {
-        super(baseClassLoader, implementationClassName, logger, tracker);
+        super(proxyFactory, baseClassLoader, implementationClassName, logger, tracker);
 
         this.locator = locator;
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
index 8e5dd82..2bf35f7 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableObjectCreatorSource.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010, 2011 The Apache Software Foundation
+// Copyright 2010, 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -73,13 +73,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableObjectCreatorSource implements ObjectCreatorSource
 
     private Object createReloadableProxy(ServiceBuilderResources resources)
     {
-        ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(
+        ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory,
                 resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName());
 
         resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator);
 
         if (eagerLoad)
+        {
             reloadableCreator.createObject();
+        }
 
         return proxyFactory.createProxy(serviceInterfaceClass, reloadableCreator, getDescription());
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
index 31611eb..93baf33 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ReloadableServiceImplementationObjectCreator.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14,11 +14,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 package org.apache.tapestry5.ioc.internal;
 
-import java.lang.reflect.Constructor;
-
 import org.apache.tapestry5.ioc.ObjectCreator;
 import org.apache.tapestry5.ioc.ServiceBuilderResources;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
+
+import java.lang.reflect.Constructor;
 
 /**
  * Returns an {&amp;lt; at &amp;gt;link ObjectCreator} for lazily instantiating a given implementation class (with dependencies).
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,10 +31,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ReloadableServiceImplementationObjectCreator extends AbstractReload
 {
     private final ServiceBuilderResources resources;
 
-    public ReloadableServiceImplementationObjectCreator(ServiceBuilderResources resources, ClassLoader baseClassLoader,
-            String implementationClassName)
+    public ReloadableServiceImplementationObjectCreator(PlasticProxyFactory proxyFactory, ServiceBuilderResources resources, ClassLoader baseClassLoader,
+                                                        String implementationClassName)
     {
-        super(baseClassLoader, implementationClassName, resources.getLogger(), resources.getTracker());
+        super(proxyFactory, baseClassLoader, implementationClassName, resources.getLogger(), resources.getTracker());
 
         this.resources = resources;
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
index 440078b..45bf82e 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -19,6 +19,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import org.apache.tapestry5.internal.plastic.asm.Type;
 import org.apache.tapestry5.internal.plastic.asm.tree.*;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.ObjectCreator;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.plastic.*;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,11 +29,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import java.lang.reflect.Constructor;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
 import java.util.List;
+import java.util.Map;
 
 public class PlasticProxyFactoryImpl implements PlasticProxyFactory
 {
     private final PlasticManager manager;
 
+    private final Map&amp;lt;String, Location&amp;gt; memberToLocation = CollectionFactory.newConcurrentMap();
+
     public PlasticProxyFactoryImpl(ClassLoader parentClassLoader, Logger logger)
     {
         this(PlasticManager.withClassLoader(parentClassLoader).create(), logger);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,35 +113,78 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class PlasticProxyFactoryImpl implements PlasticProxyFactory
         return bytecode == null ? null : PlasticInternalUtils.convertBytecodeToClassNode(bytecode);
     }
 
-    public Location getMethodLocation(Method method)
+    public Location getMethodLocation(final Method method)
     {
+        ObjectCreator&amp;lt;String&amp;gt; descriptionCreator = new ObjectCreator&amp;lt;String&amp;gt;()
+        {
+            &amp;lt; at &amp;gt;Override
+            public String createObject()
+            {
+                return InternalUtils.asString(method);
+            }
+        };
+
         return getMemberLocation(method, method.getName(), Type.getMethodDescriptor(method),
-                InternalUtils.asString(method));
+                descriptionCreator);
     }
 
-    public Location getConstructorLocation(Constructor constructor)
+    public Location getConstructorLocation(final Constructor constructor)
     {
-        StringBuilder builder = new StringBuilder(constructor.getDeclaringClass().getName()).append("(");
-        String sep = "";
-
-        for (Class parameterType : constructor.getParameterTypes())
+        ObjectCreator&amp;lt;String&amp;gt; descriptionCreator = new ObjectCreator&amp;lt;String&amp;gt;()
         {
-            builder.append(sep);
-            builder.append(parameterType.getSimpleName());
+            &amp;lt; at &amp;gt;Override
+            public String createObject()
+            {
+                StringBuilder builder = new StringBuilder(constructor.getDeclaringClass().getName()).append("(");
+                String sep = "";
 
-            sep = ", ";
-        }
+                for (Class parameterType : constructor.getParameterTypes())
+                {
+                    builder.append(sep);
+                    builder.append(parameterType.getSimpleName());
 
-        builder.append(")");
+                    sep = ", ";
+                }
 
-        String constructorDescription = builder.toString();
+                builder.append(")");
+
+                return builder.toString();
+            }
+        };
 
         return getMemberLocation(constructor, "&amp;lt;init&amp;gt;", Type.getConstructorDescriptor(constructor),
-                constructorDescription);
+                descriptionCreator);
+    }
+
+    &amp;lt; at &amp;gt;Override
+    public void clearCache()
+    {
+        memberToLocation.clear();
+    }
+
+
+    public Location getMemberLocation(Member member, String methodName, String memberTypeDesc, ObjectCreator&amp;lt;String&amp;gt; textDescriptionCreator)
+    {
+        String className = member.getDeclaringClass().getName();
+
+        String key = className + ":" + methodName + ":" + memberTypeDesc;
+
+        Location location = memberToLocation.get(key);
+
+        if (location == null)
+        {
+            location = constructMemberLocation(member, methodName, memberTypeDesc, textDescriptionCreator.createObject());
+
+            memberToLocation.put(key, location);
+        }
+
+        return location;
+
     }
 
-    public Location getMemberLocation(Member member, String methodName, String memberTypeDesc, String textDescription)
+    private Location constructMemberLocation(Member member, String methodName, String memberTypeDesc, String textDescription)
     {
+
         ClassNode classNode = readClassNode(member.getDeclaringClass());
 
         if (classNode == null)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9b4a8e12/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
index e8099c3..81e1eac 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-// Copyright 2011 The Apache Software Foundation
+// Copyright 2011, 2012 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -42,8 +42,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * Creates a proxy object that implements the indicated interface, then invokes the callback to further
      * configure the proxy.
      *
-     * &amp;lt; at &amp;gt;param interfaceType interface implemented by proxy
-     * &amp;lt; at &amp;gt;param callback      configures the proxy
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         interface implemented by proxy
+     * &amp;lt; at &amp;gt;param callback
+     *         configures the proxy
      * &amp;lt; at &amp;gt;return instantiator that can be used to create an instance of the proxy class
      */
     &amp;lt;T&amp;gt; ClassInstantiator&amp;lt;T&amp;gt; createProxy(Class&amp;lt;T&amp;gt; interfaceType, PlasticClassTransformer callback);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -53,7 +55,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * used in the cases where encapsulating the PlasticClass construction into a {&amp;lt; at &amp;gt;linkplain PlasticClassTransformer
      * callback} is not feasible (which is the case for some of the older APIs inside Tapestry IoC).
      *
-     * &amp;lt; at &amp;gt;param interfaceType class proxy will extend from
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         class proxy will extend from
      * &amp;lt; at &amp;gt;return transformation from which an instantiator may be created
      */
     &amp;lt;T&amp;gt; PlasticClassTransformation&amp;lt;T&amp;gt; createProxyTransformation(Class&amp;lt;T&amp;gt; interfaceType);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,10 +67,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * creator implementation may decide to
      * cache the return value as appropriate).
      *
-     * &amp;lt; at &amp;gt;param &amp;lt;T&amp;gt;           type of proxy
-     * &amp;lt; at &amp;gt;param interfaceType interface class for proxy
-     * &amp;lt; at &amp;gt;param creator       object responsible for creating the real object
-     * &amp;lt; at &amp;gt;param description   the &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt; of the proxy
+     * &amp;lt; at &amp;gt;param &amp;lt;T&amp;gt;
+     *         type of proxy
+     * &amp;lt; at &amp;gt;param interfaceType
+     *         interface class for proxy
+     * &amp;lt; at &amp;gt;param creator
+     *         object responsible for creating the real object
+     * &amp;lt; at &amp;gt;param description
+     *         the &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt; of the proxy
      * &amp;lt; at &amp;gt;return proxy instance
      */
     &amp;lt;T&amp;gt; T createProxy(Class&amp;lt;T&amp;gt; interfaceType, ObjectCreator&amp;lt;T&amp;gt; creator, String description);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -75,7 +82,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
     /**
      * Converts a method to a {&amp;lt; at &amp;gt;link Location}, which includes information about the source file name and line number.
      *
-     * &amp;lt; at &amp;gt;param method to look up
+     * &amp;lt; at &amp;gt;param method
+     *         to look up
      * &amp;lt; at &amp;gt;return the location (identifying the method and possibly, the line number within the method)
      */
     Location getMethodLocation(Method method);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -87,4 +95,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public interface PlasticProxyFactory extends PlasticClassListenerHub
      * &amp;lt; at &amp;gt;return the location (identifying the constructor and possibly, the line number within the method)
      */
     Location getConstructorLocation(Constructor constructor);
+
+    /**
+     * Clears any cached information stored by the proxy factory; this is useful in Tapestry development mode
+     * when a class loader may have been discarded (because the proxy factory may indirectly keep references
+     * to classes loaded by the old class loader).
+     *
+     * &amp;lt; at &amp;gt;since 5.3.3
+     */
+    void clearCache();
 }


&lt;/pre&gt;</description>
    <dc:creator>hlship&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-25T20:59:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50033">
    <title>[jira] [Created] (TAP5-1940) Typo in interface LocalizationSetter#setNonPeristentLocaleFromLocaleName</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50033</link>
    <description>&lt;pre&gt;Carsten Klein created TAP5-1940:
-----------------------------------

             Summary: Typo in interface LocalizationSetter#setNonPeristentLocaleFromLocaleName
                 Key: TAP5-1940
                 URL: https://issues.apache.org/jira/browse/TAP5-1940
             Project: Tapestry 5
          Issue Type: Improvement
          Components: tapestry-core
    Affects Versions: 5.4
            Reporter: Carsten Klein
            Priority: Minor


The method is missing an 's' in Peristent.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

&lt;/pre&gt;</description>
    <dc:creator>Carsten Klein (JIRA</dc:creator>
    <dc:date>2012-05-25T18:56:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50032">
    <title>[jira] [Created] (TAP5-1939) Since the use of Start pages is now a legacy feature, please make SymbolConstants.START_PAGE_NAME use index instead</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50032</link>
    <description>&lt;pre&gt;Carsten Klein created TAP5-1939:
-----------------------------------

             Summary: Since the use of Start pages is now a legacy feature, please make SymbolConstants.START_PAGE_NAME use index instead
                 Key: TAP5-1939
                 URL: https://issues.apache.org/jira/browse/TAP5-1939
             Project: Tapestry 5
          Issue Type: Improvement
          Components: tapestry-core
    Affects Versions: 5.4
            Reporter: Carsten Klein
            Priority: Minor


Since the use of Start pages was deprecated and is now a legacy feature, the new
tapestry version should instead use Index as its default.

I propose that SymbolConstants.START_PAGE_NAME is set to index instead of
start.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

&lt;/pre&gt;</description>
    <dc:creator>Carsten Klein (JIRA</dc:creator>
    <dc:date>2012-05-25T18:56:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50028">
    <title>[jira] [Created] (TAP5-1938) The ValueEncoder for JPA entity types should encode transient instances as null rather than throw an exception</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50028</link>
    <description>&lt;pre&gt;Dimitris Zenios created TAP5-1938:
-------------------------------------

             Summary: The ValueEncoder for JPA entity types should encode transient instances as null rather than throw an exception
                 Key: TAP5-1938
                 URL: https://issues.apache.org/jira/browse/TAP5-1938
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-jpa
    Affects Versions: 5.3.3, 5.3.4
            Reporter: Dimitris Zenios


The current behavior gets in the way in many cases, such as creating a single page that will either edit an existing entity or editing a newly created entity before its first save, where the instance (transient or persistent) is stored as page activation context.

Same bug for Tapestry-Hibernate was resolved from Howard
https://issues.apache.org/jira/browse/TAP5-1641

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

&lt;/pre&gt;</description>
    <dc:creator>Dimitris Zenios (JIRA</dc:creator>
    <dc:date>2012-05-24T14:18:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50025">
    <title>[jira] [Created] (TAP5-1937) removeCookieValue with custom path</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50025</link>
    <description>&lt;pre&gt;Tim Böhler created TAP5-1937:
--------------------------------

             Summary: removeCookieValue with custom path
                 Key: TAP5-1937
                 URL: https://issues.apache.org/jira/browse/TAP5-1937
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-core
    Affects Versions: 5.3.3
            Reporter: Tim Böhler
            Priority: Minor


When you write a cookie value, you can set additionally domain and path. But when you delete a cookie, the path is always set to request.getContext()+"/". So that, cookies saved with the path different from context+"/" are never deleted. 

This issue was already mentioned here: http://tapestry.1045711.n5.nabble.com/T5-1-Cookies-removeCookieValue-issue-td2435448.html

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

&lt;/pre&gt;</description>
    <dc:creator>Tim Böhler (JIRA</dc:creator>
    <dc:date>2012-05-24T13:00:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50024">
    <title>Spock Tapestry module</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50024</link>
    <description>&lt;pre&gt;Hi dev,
  I've realized that spockframework has a tapestry module to let you
test tapestry-ioc applications. Thats great!

Did anyone of you actually used it?

Cheers
&lt;/pre&gt;</description>
    <dc:creator>Massimo Lusetti</dc:creator>
    <dc:date>2012-05-24T12:32:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50018">
    <title>git commit: Fix incorrectly constructed feature method</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50018</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/master 6e16b6eeb -&amp;gt; 8224aae21


Fix incorrectly constructed feature method


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

Branch: refs/heads/master
Commit: 8224aae21d746c1b42846fe983b1254b17e4f070
Parents: 6e16b6e
Author: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Wed May 23 08:09:56 2012 -0700
Committer: Howard M. Lewis Ship &amp;lt;hlship&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Wed May 23 08:09:56 2012 -0700

----------------------------------------------------------------------
 .../services/FilterMethodAnalyzerSpec.groovy       |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8224aae2/tapestry-ioc/src/test/groovy/org/apache/tapestry5/ioc/internal/services/FilterMethodAnalyzerSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/org/apache/tapestry5/ioc/internal/services/FilterMethodAnalyzerSpec.groovy b/tapestry-ioc/src/test/groovy/org/apache/tapestry5/ioc/internal/services/FilterMethodAnalyzerSpec.groovy
index 93afb73..5f5f9ef 100644
--- a/tapestry-ioc/src/test/groovy/org/apache/tapestry5/ioc/internal/services/FilterMethodAnalyzerSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/org/apache/tapestry5/ioc/internal/services/FilterMethodAnalyzerSpec.groovy
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,17 +3,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; package org.apache.tapestry5.ioc.internal.services
 import spock.lang.Specification
 import spock.lang.Unroll
 
-
 class FilterMethodAnalyzerSpec extends Specification {
 
-  def find(clazz, name) {
+  private MethodSignature find(clazz, name) {
     new MethodSignature(clazz.methods.find { it.name == name })
   }
 
   &amp;lt; at &amp;gt;Unroll
-  def "position of delegate parameter for #filterMethod should be #position"() {
+  def "position of delegate parameter for #methodName should be #position"() {
     def analyzer = new FilterMethodAnalyzer(SampleService)
 
+    def mainMethod = find SampleService, methodName
+    def filterMethod = find SampleFilter, methodName
+
     expect:
 
     analyzer.findServiceInterfacePosition(mainMethod, filterMethod) == position
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,7 +29,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class FilterMethodAnalyzerSpec extends Specification {
     "missingServiceInterface" | -1
     "complexMatch"            | 2
 
-    mainMethod = find SampleService, methodName
-    filterMethod = find SampleFilter, methodName
   }
 }


&lt;/pre&gt;</description>
    <dc:creator>hlship&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-23T15:10:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50017">
    <title>master commits, cherry pick</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50017</link>
    <description>&lt;pre&gt;I'm seeing some minor bugs fixed in master (5.4); I'm sure our users
would like to see those back-ported to 5.3.  Now that we have Git, it
is generally super-easy to do, just a matter of using the git
cherry-pick command.

When I've been back porting, I identify both releases as the fix
releases when I close the issue; that way it'll show in the release
notes for both 5.3 and 5.4.

&lt;/pre&gt;</description>
    <dc:creator>Howard Lewis Ship</dc:creator>
    <dc:date>2012-05-23T15:02:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50012">
    <title>[jira] [Created] (TAP5-1936) REOPEN TAP5-698 - PageTester's setupRequestFromURI incorrectly uses substring twice on same string</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50012</link>
    <description>&lt;pre&gt;Denis Delangle created TAP5-1936:
------------------------------------

             Summary: REOPEN TAP5-698 - PageTester's setupRequestFromURI incorrectly uses substring twice on same string
                 Key: TAP5-1936
                 URL: https://issues.apache.org/jira/browse/TAP5-1936
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-test
    Affects Versions: 5.1.0.5
            Reporter: Denis Delangle
            Assignee: Howard M. Lewis Ship
             Fix For: 5.3


Incoming linkPath: /filelist.delete/c$002ftest2-2510777506787452085.txt?t:ac=c
int comma is set to 52
path: /filelist.delete/c$002ftest2-2510777506787452085.txt
then trying to do a path.substring(comma+1)

Fix: use linkPath instead of path at line 304:

if (comma &amp;gt; 0)
            decodeParametersIntoRequest(path.substring(comma + 1));

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

&lt;/pre&gt;</description>
    <dc:creator>Denis Delangle (JIRA</dc:creator>
    <dc:date>2012-05-23T06:39:42</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50009">
    <title>git commit: Create a variable to store the Hibernate version number required since upgrade Gradle to 1.0-rc-3</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50009</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/master 2afbddda3 -&amp;gt; 6e16b6eeb


Create a variable to store the Hibernate version number required since upgrade Gradle to 1.0-rc-3

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

Branch: refs/heads/master
Commit: 6e16b6eebe1c4921d822c2e9e399e4658cf06941
Parents: 2afbddd
Author: fran&lt;/pre&gt;</description>
    <dc:creator>ffacon&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-22T20:41:12</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50007">
    <title>git commit: TAP5-1935: Use file.toURI().toURL() instead of file.toURL()</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50007</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/5.3 318e031fb -&amp;gt; 9afb9b692


TAP5-1935: Use file.toURI().toURL() instead of file.toURL()


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

Branch: refs/heads/5.3
Commit: 9afb9b6922a0da0c6ceec73239b6fdd4c6773d84
Parents: 318e031
Author: kaosko &amp;lt;kaosko&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Tue May 22 12:47:14 2012 -0700
Committer: Kalle Korhonen &amp;lt;kaosko&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Tue May 22 13:10:14 2012 -0700

----------------------------------------------------------------------
 .../internal/services/ContextResource.java         |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/9afb9b69/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
index 7d2db59..681424f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -104,7 +104,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ContextResource extends AbstractResource
             {
                 try
                 {
-                    url = file.toURL();
+                    url = file.toURI().toURL();
                     urlResolved = true;
                     return;
                 } catch (MalformedURLException ex)


&lt;/pre&gt;</description>
    <dc:creator>kaosko&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-22T20:27:07</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50006">
    <title>git commit: TAP5-1935: Use file.toURI().toURL() instead of file.toURL()</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50006</link>
    <description>&lt;pre&gt;Updated Branches:
  refs/heads/master 37efe7eff -&amp;gt; 2afbddda3


TAP5-1935: Use file.toURI().toURL() instead of file.toURL()


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

Branch: refs/heads/master
Commit: 2afbddda398bc59f6beef14e41017f4b796f4856
Parents: 37efe7e
Author: kaosko &amp;lt;kaosko&amp;lt; at &amp;gt;apache.org&amp;gt;
Authored: Tue May 22 12:47:14 2012 -0700
Committer: kaosko &amp;lt;kaosko&amp;lt; at &amp;gt;apache.org&amp;gt;
Committed: Tue May 22 12:47:14 2012 -0700

----------------------------------------------------------------------
 .../internal/services/ContextResource.java         |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2afbddda/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
index 7d2db59..681424f 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextResource.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -104,7 +104,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public class ContextResource extends AbstractResource
             {
                 try
                 {
-                    url = file.toURL();
+                    url = file.toURI().toURL();
                     urlResolved = true;
                     return;
                 } catch (MalformedURLException ex)


&lt;/pre&gt;</description>
    <dc:creator>kaosko&lt; at &gt;apache.org</dc:creator>
    <dc:date>2012-05-22T20:06:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50004">
    <title>[jira] [Created] (TAP5-1935) ContextResource uses a deprecated File.toURL</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/50004</link>
    <description>&lt;pre&gt;Kalle Korhonen created TAP5-1935:
------------------------------------

             Summary: ContextResource uses a deprecated File.toURL
                 Key: TAP5-1935
                 URL: https://issues.apache.org/jira/browse/TAP5-1935
             Project: Tapestry 5
          Issue Type: Bug
          Components: tapestry-core
    Affects Versions: 5.3.3
            Reporter: Kalle Korhonen


This causes issues whenever a file has a hash character ('#') in the name since everything after that it is interpreted as an anchor and included in the path used in URL.openStream(). Use file.toURI().toURL() instead.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

&lt;/pre&gt;</description>
    <dc:creator>Kalle Korhonen (JIRA</dc:creator>
    <dc:date>2012-05-22T19:41:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49999">
    <title>Tapestry JPA Bug</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49999</link>
    <description>&lt;pre&gt;Hi guys i think there is a bug in tapestry-jpa and value encoder

In a discussion i was reading, Howard changed valueEncoder of
tapestry-hibernate to return null in toClient if the id of the object
was null.That was use full in cases where we wanted to have the same
page for save/edit.

Quote from Howard
"I recently changed Tapestry 5.3 so that the Hibernate ValueEncoder
(used implicitly by &amp;lt; at &amp;gt;PageActivationContext) will encode a transient
entity as null.  This makes it possible to use the same page for add
and edit, with a bit of smart logic in your onActivate() event handler
method.
"

Unfortunately the same doesn't happen in Tapestry-jpa.Is this a real
bug or there should be another way to have same page for save/edit.

To Client of tapestry-jpa
    public String toClient(final E value)
    {
        if (value == null)
            return null;

        final Object id = propertyAdapter.get(value);

        if (id == null)
            throw new IllegalStateException(
                    String.format(
                            "Entity %s has an %s property of null;
this probably means that it has not been persisted yet.",
                            value, idPropertyName));

        return typeCoercer.coerce(id, String.class);
    }


To client of tapestry-hibernate
    public String toClient(E value)
    {
        if (value == null)
            return null;

        Object id = propertyAdapter.get(value);

        if (id == null)
        {
            return null;
        }

        return typeCoercer.coerce(id, String.class);
    }
&lt;/pre&gt;</description>
    <dc:creator>Dimitris Zenios</dc:creator>
    <dc:date>2012-05-22T15:43:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49996">
    <title>Reopen TAP5-698</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49996</link>
    <description>&lt;pre&gt;Hello,

I fear https://issues.apache.org/jira/browse/TAP5-698 should be
reopen. I encountered it when migrating from T5.2 to T5.3.3.

I get something like this when clicking a link with parameters in PageTester
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1937)
at java.lang.String.substring(String.java:1904)
at org.apache.tapestry5.test.PageTester.setupRequestFromURI(PageTester.java:345)

That bug was corrected revision 896555 and put back revision 1185926.
The correction is trivial but have been done twice, so the bug is
still there.

The patch to apply is :

Index: src/main/java/org/apache/tapestry5/test/PageTester.java
===================================================================
--- src/main/java/org/apache/tapestry5/test/PageTester.java(revision 1341503)
+++ src/main/java/org/apache/tapestry5/test/PageTester.java(working copy)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -342,7 +342,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         request.clear().setPath(path);

         if (comma &amp;gt; 0)
-            decodeParametersIntoRequest(path.substring(comma + 1));
+            decodeParametersIntoRequest(linkPath.substring(comma + 1));
     }

     private void decodeParametersIntoRequest(String queryString)




I don't see any way to reopen the bug, should I open a new Issue ?

Regards,

Denis
&lt;/pre&gt;</description>
    <dc:creator>Denis Delangle</dc:creator>
    <dc:date>2012-05-22T15:15:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49993">
    <title>Steps to upgrade from Tapestry 3 to Tapestry 5</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49993</link>
    <description>&lt;pre&gt;Hi

Could you please let me know the steps for Tapestry 3 to Tapestry 5 upgrade?

Thanks
Shanmuka.


________________________________
NOTICE TO RECIPIENT: THIS E-MAIL (INCLUDING ANY ATTACHMENTS) IS MEANT FOR ONLY THE INTENDED RECIPIENT OF THE TRANSMISSION, MAY CONTAIN CONFIDENTIAL INFORMATION, AND IS PROTECTED BY LAW. IF YOU RECEIVED THIS E-MAIL IN ERROR, PLEASE IMMEDIATELY NOTIFY THE SENDER OF THE ERROR BY RETURN E-MAIL, DELETE THIS COMMUNICATION AND SHRED ANY ATTACHMENTS. UNAUTHORIZED REVIEW, USE, DISSEMINATION, DISTRIBUTION, COPYING OR TAKING OF ANY ACTION BASED ON THIS COMMUNICATION IS STRICTLY PROHIBITED.
&lt;/pre&gt;</description>
    <dc:creator>Shanmuka Maridi</dc:creator>
    <dc:date>2012-05-22T12:51:29</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49991">
    <title>Patch: TAP5-1907,ie9 javascript error when partial render includes stylesheets (Branch 5.3)</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49991</link>
    <description>&lt;pre&gt; From 68449884b431a4e43fef47fc206d3e808d69b03a Tue, 22 May 2012 13:28:47 
+0200
From: Michael Wyraz &amp;lt;michael.wyraz&amp;lt; at &amp;gt;evermind.de&amp;gt;
Date: Tue, 22 May 2012 13:25:49 +0200
Subject: [PATCH] TAP5-1907 ie9 javascript error when partial render 
includes stylesheets

diff --git 
a/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js 
b/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
index f97fb03..22ade78 100644
--- a/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
+++ b/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2023,7 +2023,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

          var _ = T5._;

-        var loaded = 
_(document.scripts).chain().pluck("src").without("").map(this.rebuildURLIfIE).value();
+        var loaded = 
_(document.scripts).chain().pluck("src").without("").without(null).map(this.rebuildURLIfIE).value();

          var self = this;

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2050,7 +2050,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

          var _ = T5._;

-        var loaded = 
_(document.styleSheets).chain().pluck("href").without("").map(this.rebuildURLIfIE).value();
+        var loaded = 
_(document.styleSheets).chain().pluck("href").without("").without(null).map(this.rebuildURLIfIE).value();

          var toLoad = _(stylesheets).chain().map(
              function (ss) {

&lt;/pre&gt;</description>
    <dc:creator>Michael Wyraz</dc:creator>
    <dc:date>2012-05-22T11:29:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49990">
    <title>Patch: localized datepicker buttons (Branch 5.3)</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49990</link>
    <description>&lt;pre&gt; From e6b7bc43c665c34e1d8000e7b2966d552b67d8e9 Tue, 22 May 2012 13:27:33 
+0200
From: Michael Wyraz &amp;lt;michael.wyraz&amp;lt; at &amp;gt;evermind.de&amp;gt;
Date: Tue, 22 May 2012 13:24:31 +0200
Subject: [PATCH] localized datepicker buttons ("Today" and "None")

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
index 39ed01b..edf61bb 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/DateField.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -245,6 +245,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
          spec.put("parseURL", resources.createEventLink("parse").toURI());
          spec.put("formatURL", 
resources.createEventLink("format").toURI());

+        
support.addScript("DatePicker.buttonToday='%s';DatePicker.buttonNone='%s'", 
messages.get("datepicker-button-today"),messages.get("datepicker-button-none"));
          support.addInitializerCall("dateField", spec);
      }

diff --git 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties
index d1f326f..d8eeeca 100644
--- 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties
+++ 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,3 +13,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  # limitations under the License.

  date-value-not-parseable=Date value '%s' is not parseable.
+datepicker-button-today=Today
+datepicker-button-none=None
+datepicker-button-today=Today
+datepicker-button-none=None
diff --git 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField_de.properties 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField_de.properties
index 27c7282..3c8ae07 100644
--- 
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField_de.properties
+++ 
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField_de.properties
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,3 +13,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  # limitations under the License.

  date-value-not-parseable=Datumswert '%s' kann nicht geparst werden.
+datepicker-button-today=heute
+datepicker-button-none=kein
+datepicker-button-today=heute
+datepicker-button-none=kein
diff --git 
a/tapestry-core/src/main/resources/org/apache/tapestry5/datepicker_106/js/datepicker.js 
b/tapestry-core/src/main/resources/org/apache/tapestry5/datepicker_106/js/datepicker.js
index 5033ad4..5b95c6e 100644
--- 
a/tapestry-core/src/main/resources/org/apache/tapestry5/datepicker_106/js/datepicker.js
+++ 
b/tapestry-core/src/main/resources/org/apache/tapestry5/datepicker_106/js/datepicker.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -90,6 +90,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      "May", "June", "July", "August",
      "September", "October", "November", "December"];
  DatePicker.days = ["m", "t", "w", "t", "f", "s", "s"];
+DatePicker.buttonToday = "Today";
+DatePicker.buttonNone = "None";


  // Function invoked whenever the selected date changes, whether by
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -187,7 +189,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      this._todayButton = doc.createElement("button");
      this._todayButton.className = "todayButton";
      this._todayButton.setAttribute("type", "button");
-    this._todayButton.appendChild(doc.createTextNode("Today"));
+    
this._todayButton.appendChild(doc.createTextNode(DatePicker.buttonToday));
      td.appendChild(this._todayButton);
      tr.appendChild(td);

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -200,7 +202,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      this._noneButton = doc.createElement("button");
      this._noneButton.className = "noneButton";
      this._noneButton.setAttribute("type", "button");
-    this._noneButton.appendChild(doc.createTextNode("None"));
+    
this._noneButton.appendChild(doc.createTextNode(DatePicker.buttonNone));
      td.appendChild(this._noneButton);
      tr.appendChild(td);

&lt;/pre&gt;</description>
    <dc:creator>Michael Wyraz</dc:creator>
    <dc:date>2012-05-22T11:29:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49989">
    <title>Patch: TAP51858 (Branch 5.3)</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.tapestry.devel/49989</link>
    <description>&lt;pre&gt; From 38db152c669ccbf88703adf35d90f12d3f22a2f4 Tue, 22 May 2012 13:26:22 
+0200
From: Michael Wyraz &amp;lt;michael.wyraz&amp;lt; at &amp;gt;evermind.de&amp;gt;
Date: Tue, 22 May 2012 13:21:40 +0200
Subject: [PATCH] TAP5-1858     Cookie service should allow to set path, 
domain AND maxAge

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
index 3c88006..0a89b02 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CookiesImpl.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -121,6 +121,32 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

          cookieSink.addCookie(cookie);
      }
+
+    public void writeCookieValue(String name, String value, String 
path, String domain, int maxAge)
+    {
+        Cookie cookie = new Cookie(name, value);
+        if (path==null) cookie.setPath(request.getContextPath() + "/");
+        else cookie.setPath(path);
+        if (domain!=null) cookie.setDomain(domain);
+        if (maxAge!=0) cookie.setMaxAge(maxAge);
+        else cookie.setMaxAge(defaultMaxAge);
+        cookie.setSecure(request.isSecure());
+
+        cookieSink.addCookie(cookie);
+    }
+
+    public void writeCookieValue(String name, String value, String 
path, String domain, int maxAge)
+    {
+        Cookie cookie = new Cookie(name, value);
+        if (path==null) cookie.setPath(request.getContextPath() + "/");
+        else cookie.setPath(path);
+        if (domain!=null) cookie.setDomain(domain);
+        if (maxAge!=0) cookie.setMaxAge(maxAge);
+        else cookie.setMaxAge(defaultMaxAge);
+        cookie.setSecure(request.isSecure());
+
+        cookieSink.addCookie(cookie);
+    }

      public void removeCookieValue(String name)
      {
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
index 4bcd653..a081a6d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/Cookies.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -67,6 +67,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      void writeCookieValue(String name, String value, String path, 
String domain);

      /**
+     * As with {&amp;lt; at &amp;gt;link #writeCookieValue(String, String, String)} but an 
explicit domain,path and maximum age may be set.
+     */
+    void writeCookieValue(String name, String value, String path, 
String domain, int maxAge);
+
+    /**
       * Removes a previously written cookie, by writing a new cookie 
with a maxAge of 0.
       */
      void removeCookieValue(String name);

&lt;/pre&gt;</description>
    <dc:creator>Michael Wyraz</dc:creator>
    <dc:date>2012-05-22T11:27:58</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.jakarta.tapestry.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.jakarta.tapestry.devel</link>
  </textinput>
</rdf:RDF>

