Author: hlship
Date: Mon Jul 12 18:47:41 2010
New Revision: 963429
URL: http://svn.apache.org/viewvc?rev=963429&view=rev
Log:
TAP5-1197: Implement a non-pooling RequestPageCache and related code, make
non-pooling the default
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
(with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
(with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
(with props)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCache.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/reload/web.xml
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
Mon Jul 12 18:47:41 2010
@@ -15,6 +15,7 @@
package org.apache.tapestry5;
import org.apache.tapestry5.internal.services.AssetDispatcher;
+import org.apache.tapestry5.services.ComponentClassTransformWorker;
import org.apache.tapestry5.services.assets.AssetPathConstructor;
import org.apache.tapestry5.services.javascript.JavascriptStack;
@@ -312,4 +313,14 @@ public class SymbolConstants
*/
public static final String COMPACT_JSON = "tapestry.compact-json";
+ /**
+ * If "true", then Tapestry 5.1 (and earlier) style page pooling will be
used. The default is "false", to
+ * allow full use of page singleton. Enabling page pooling is only
necessary if an application (or library)
+ * has created {...@linkplain ComponentClassTransformWorker class
transformations} that introduce new, mutable
+ * fields into component classes. That's a very rare thing (most created
fields contain immutable data).
+ *
+ * @deprecated To be removed, along with the remnants of page pooling, in
Tapestry 5.3.
+ * @since 5.2.0
+ */
+ public static final String PAGE_POOL_ENABLED =
"tapestry.page-pool-enabled";
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
Mon Jul 12 18:47:41 2010
@@ -26,6 +26,7 @@ import org.apache.tapestry5.ioc.ObjectLo
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.ScopeConstants;
import org.apache.tapestry5.ioc.ServiceBinder;
+import org.apache.tapestry5.ioc.ServiceResources;
import org.apache.tapestry5.ioc.annotations.Autobuild;
import org.apache.tapestry5.ioc.annotations.Marker;
import org.apache.tapestry5.ioc.annotations.Primary;
@@ -110,9 +111,24 @@ public class InternalModule
}
@Scope(ScopeConstants.PERTHREAD)
- public static RequestPageCache buildRequestPageCache(@Autobuild
- RequestPageCacheImpl service, PerthreadManager perthreadManager)
+ public static RequestPageCache buildRequestPageCache(ServiceResources
serviceResources,
+ @Symbol(SymbolConstants.PAGE_POOL_ENABLED)
+ boolean pagePoolEnabled, PerthreadManager perthreadManager)
{
+ if (pagePoolEnabled)
+ {
+
+ RequestPageCacheImpl service =
serviceResources.autobuild(RequestPageCacheImpl.class);
+
+ perthreadManager.addThreadCleanupListener(service);
+
+ return service;
+ }
+
+ // Modern, non-pooling
+
+ NonPoolingRequestPageCacheImpl service =
serviceResources.autobuild(NonPoolingRequestPageCacheImpl.class);
+
perthreadManager.addThreadCleanupListener(service);
return service;
@@ -129,8 +145,8 @@ public class InternalModule
ClasspathURLConverter classpathURLConverter)
{
- ComponentInstantiatorSourceImpl source = new
ComponentInstantiatorSourceImpl(logger, classFactory
- .getClassLoader(), transformer, internalRequestGlobals,
classpathURLConverter);
+ ComponentInstantiatorSourceImpl source = new
ComponentInstantiatorSourceImpl(logger,
+ classFactory.getClassLoader(), transformer,
internalRequestGlobals, classpathURLConverter);
updateListenerHub.addUpdateListener(source);
@@ -192,6 +208,30 @@ public class InternalModule
return service;
}
+ public PageSource buildPageSource(@Autobuild
+ PageSourceImpl service,
+
+ @ComponentTemplates
+ InvalidationEventHub templatesHub,
+
+ @ComponentMessages
+ InvalidationEventHub messagesHub)
+ {
+ // This covers invalidations due to changes to classes
+
+ classesInvalidationEventHub.addInvalidationListener(service);
+
+ // This covers invalidation due to changes to message catalogs
(properties files)
+
+ messagesHub.addInvalidationListener(service);
+
+ // ... and this covers invalidations due to changes to templates
+
+ templatesHub.addInvalidationListener(service);
+
+ return service;
+ }
+
public ComponentClassCache buildComponentClassCache(@Autobuild
ComponentClassCacheImpl service)
{
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java?rev=963429&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
Mon Jul 12 18:47:41 2010
@@ -0,0 +1,91 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.services.ThreadCleanupListener;
+import org.apache.tapestry5.ioc.services.ThreadLocale;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.slf4j.Logger;
+
+public class NonPoolingRequestPageCacheImpl implements RequestPageCache,
ThreadCleanupListener
+{
+ private final Logger logger;
+
+ private final ComponentClassResolver resolver;
+
+ private final PageSource pageSource;
+
+ private final ThreadLocale threadLocale;
+
+ private final Map<String, Page> cache = CollectionFactory.newMap();
+
+ public NonPoolingRequestPageCacheImpl(Logger logger,
ComponentClassResolver resolver, PageSource pageSource,
+ ThreadLocale threadLocale)
+ {
+ this.logger = logger;
+ this.resolver = resolver;
+ this.pageSource = pageSource;
+ this.threadLocale = threadLocale;
+ }
+
+ public void threadDidCleanup()
+ {
+ for (Page page : cache.values())
+ {
+ try
+ {
+ page.detached();
+ }
+ catch (Throwable t)
+ {
+ logger.error(String.format("Error detaching page %s: %s",
page, InternalUtils.toMessage(t)), t);
+ }
+ }
+ }
+
+ public Page get(String pageName)
+ {
+ String canonical = resolver.canonicalizePageName(pageName);
+
+ Page page = cache.get(canonical);
+
+ if (page == null)
+ {
+ Locale locale = threadLocale.getLocale();
+
+ page = pageSource.getPage(canonical, locale);
+
+ try
+ {
+ page.attached();
+ }
+ catch (Throwable t)
+ {
+ throw new RuntimeException(String.format("Unable to attach
page %s (%s): %s", canonical, locale,
+ InternalUtils.toMessage(t)), t);
+ }
+
+ cache.put(canonical, page);
+ }
+
+ return page;
+ }
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/NonPoolingRequestPageCacheImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java?rev=963429&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
Mon Jul 12 18:47:41 2010
@@ -0,0 +1,30 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import java.util.Locale;
+
+import org.apache.tapestry5.internal.structure.Page;
+
+/**
+ * Access to localized page instances (which are now shared singletons,
starting in release 5.2).
+ * This service is a wrapper around {...@link PageLoader} that caches the
loaded pages.
+ *
+ * @since 5.2.0
+ */
+public interface PageSource
+{
+ Page getPage(String canonicalPageName, Locale locale);
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSource.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java?rev=963429&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
Mon Jul 12 18:47:41 2010
@@ -0,0 +1,93 @@
+// Copyright 2010 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.services.InvalidationListener;
+
+public class PageSourceImpl implements PageSource, InvalidationListener
+{
+ private final PageLoader pageLoader;
+
+ private static final class CachedPageKey
+ {
+ final String pageName;
+
+ final Locale locale;
+
+ public CachedPageKey(String pageName, Locale locale)
+ {
+ this.pageName = pageName;
+ this.locale = locale;
+ }
+
+ public int hashCode()
+ {
+ return 37 * pageName.hashCode() + locale.hashCode();
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+
+ if (!(obj instanceof CachedPageKey))
+ return false;
+
+ CachedPageKey other = (CachedPageKey) obj;
+
+ return pageName.equals(other.pageName) &&
locale.equals(other.locale);
+ }
+ }
+
+ private final Map<CachedPageKey, Page> pageCache =
CollectionFactory.newConcurrentMap();
+
+ public PageSourceImpl(PageLoader pageLoader)
+ {
+ this.pageLoader = pageLoader;
+ }
+
+ public synchronized void objectWasInvalidated()
+ {
+ pageCache.clear();
+ }
+
+ public Page getPage(String canonicalPageName, Locale locale)
+ {
+ CachedPageKey key = new CachedPageKey(canonicalPageName, locale);
+
+ if (!pageCache.containsKey(key))
+ {
+ // In rare race conditions, we may see the same page loaded
multiple times across
+ // different threads. The last built one will "evict" the others
from the page cache,
+ // and the earlier ones will be GCed.
+
+ Page page = pageLoader.loadPage(canonicalPageName, locale);
+
+ pageCache.put(key, page);
+ }
+
+ // From good authority (Brian Goetz), this is the best way to ensure
that the
+ // loaded page, with all of its semi-mutable construction-time state,
is
+ // properly published.
+
+ return pageCache.get(key);
+ }
+
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCache.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCache.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCache.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCache.java
Mon Jul 12 18:47:41 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,26 +14,34 @@
package org.apache.tapestry5.internal.services;
+import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.runtime.PageLifecycleListener;
/**
* Per-thread service that caches page instances for the duration of the
request, and is also responsible for tracking
* the active page (the page which will ultimately render the response).
* <p/>
- * Since {...@link org.apache.tapestry5.internal.structure.Page} is internal,
most user-code should use the {...@link
- * org.apache.tapestry5.services.ComponentSource} service instead.
+ * Since {...@link org.apache.tapestry5.internal.structure.Page} is internal,
most user-code should use the
+ * {...@link org.apache.tapestry5.services.ComponentSource} service instead.
+ * <p>
+ * Starting in 5.2, page instances are shared (with externalized mutable
state), not pooled, but the cache is still
+ * useful for managing the page's {...@linkplain PageLifecycleListener
lifecycle}. There are now two different
+ * implementation classes for this single service, selected via {...@link
SymbolConstants#PAGE_POOL_ENABLED}.
*/
public interface RequestPageCache
{
/**
* Gets the page via its page name, in the current locale. The logical
page name is resolved to a class name, which
- * is used to obtain the page (from the page pool). Note that under
certain circumstances, a page may have multiple
+ * is used to obtain the page (from the page pool). Note that under
certain circumstances, a page may have multiple
* names (even beyond simple case-insensitivity), and RequestPageCache
caches correctly.
- *
- * @param pageName the name of the page to retrieve (this is the logical
page name, not the fully qualified class
- * name)
+ *
+ * @param pageName
+ * the name of the page to retrieve (this is the logical page
name, not the fully qualified class
+ * name)
* @return a page instance reserved for this request
- * @throws IllegalArgumentException if the name can not be resolved to a
page instance
+ * @throws IllegalArgumentException
+ * if the name can not be resolved to a page instance
*/
Page get(String pageName);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestPageCacheImpl.java
Mon Jul 12 18:47:41 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -22,6 +22,9 @@ import org.apache.tapestry5.services.Com
import java.util.Map;
+/**
+ * This is the original implementation, which is built around the {...@link
PagePool}.
+ */
public class RequestPageCacheImpl implements RequestPageCache,
ThreadCleanupListener
{
private final PagePool pagePool;
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/PageImpl.java
Mon Jul 12 18:47:41 2010
@@ -14,14 +14,15 @@
package org.apache.tapestry5.internal.structure;
+import java.util.List;
+import java.util.Locale;
+
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.internal.services.PersistentFieldManager;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.Defense;
-import org.apache.tapestry5.ioc.internal.util.OneShotLock;
-
-import static org.apache.tapestry5.ioc.internal.util.Defense.notNull;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.internal.util.OneShotLock;
import org.apache.tapestry5.ioc.services.PerThreadValue;
import org.apache.tapestry5.ioc.services.PerthreadManager;
import org.apache.tapestry5.runtime.Component;
@@ -29,9 +30,6 @@ import org.apache.tapestry5.runtime.Page
import org.apache.tapestry5.services.PersistentFieldBundle;
import org.slf4j.Logger;
-import java.util.List;
-import java.util.Locale;
-
public class PageImpl implements Page
{
private final String name;
@@ -57,8 +55,18 @@ public class PageImpl implements Page
* first needed,
* discarded at the end of the request.
*/
- private PersistentFieldBundle fieldBundle;
+ private final PerThreadValue<PersistentFieldBundle> fieldBundle;
+ /**
+ * @param name
+ * canonicalized page name
+ * @param locale
+ * locale for page and all components
+ * @param persistentFieldManager
+ * for access to cross-request persistent values
+ * @param perThreadManager
+ * for managing per-request mutable state
+ */
public PageImpl(String name, Locale locale, PersistentFieldManager
persistentFieldManager,
PerthreadManager perThreadManager)
{
@@ -67,6 +75,7 @@ public class PageImpl implements Page
this.persistentFieldManager = persistentFieldManager;
dirtyCount = perThreadManager.createValue("PageDirtyCount:" + name);
+ fieldBundle = perThreadManager.createValue("PersistentFieldBundle:" +
name);
}
@Override
@@ -77,7 +86,7 @@ public class PageImpl implements Page
public ComponentPageElement getComponentElementByNestedId(String nestedId)
{
- notNull(nestedId, "nestedId");
+ Defense.notNull(nestedId, "nestedId");
// TODO: Especially with the addition of all the caseless logic, and
with respect to how
// forms are implemented, it may be worthwhile to cache the key to
element mapping. I think
@@ -147,8 +156,6 @@ public class PageImpl implements Page
}
}
- fieldBundle = null;
-
return result;
}
@@ -160,7 +167,7 @@ public class PageImpl implements Page
listener.containingPageDidLoad();
loadComplete = true;
-
+
lock.lock();
}
@@ -191,10 +198,10 @@ public class PageImpl implements Page
public Object getFieldChange(String nestedId, String fieldName)
{
- if (fieldBundle == null)
- fieldBundle = persistentFieldManager.gatherChanges(name);
+ if (!fieldBundle.exists())
+ fieldBundle.set(persistentFieldManager.gatherChanges(name));
- return fieldBundle.getValue(nestedId, fieldName);
+ return fieldBundle.get().getValue(nestedId, fieldName);
}
public void decrementDirtyCount()
@@ -224,7 +231,7 @@ public class PageImpl implements Page
public void addResetListener(PageResetListener listener)
{
Defense.notNull(listener, "listener");
-
+
lock.check();
resetListeners.add(listener);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
Mon Jul 12 18:47:41 2010
@@ -516,8 +516,8 @@ public final class TapestryModule
configuration.add(folder, new
ClasspathAssetRequestHandler(streamer, assetResourceLocator, path));
}
- configuration.add(RequestConstants.CONTEXT_FOLDER, new
ContextAssetRequestHandler(streamer, contextAssetFactory
- .getRootResource()));
+ configuration.add(RequestConstants.CONTEXT_FOLDER,
+ new ContextAssetRequestHandler(streamer,
contextAssetFactory.getRootResource()));
configuration.add(RequestConstants.STACK_FOLDER,
stackAssetRequestHandler);
@@ -609,7 +609,8 @@ public final class TapestryModule
configuration.add("MixinAfter", new MixinAfterWorker());
configuration.add("Component", new ComponentWorker(resolver));
configuration.add("Mixin", new MixinWorker(resolver));
- configuration.addInstance("ActivationRequestParameter",
ActivationRequestParameterWorker.class, "before:OnEvent");
+ configuration.addInstance("ActivationRequestParameter",
ActivationRequestParameterWorker.class,
+ "before:OnEvent");
configuration.addInstance("OnEvent", OnEventWorker.class);
configuration.add("SupportsInformalParameters", new
SupportsInformalParametersWorker());
configuration.addInstance("InjectPage", InjectPageWorker.class);
@@ -1333,8 +1334,8 @@ public final class TapestryModule
ClasspathURLConverter classpathURLConverter)
{
- ValidationMessagesSourceImpl service = new
ValidationMessagesSourceImpl(configuration, classpathAssetFactory
- .getRootResource(), parser, componentMessagesSource,
classpathURLConverter);
+ ValidationMessagesSourceImpl service = new
ValidationMessagesSourceImpl(configuration,
+ classpathAssetFactory.getRootResource(), parser,
componentMessagesSource, classpathURLConverter);
updateListenerHub.addUpdateListener(service);
return service;
@@ -1546,8 +1547,8 @@ public final class TapestryModule
TranslatorAlternatesSource alternatesSource, @ComponentClasses
InvalidationEventHub hub)
{
- TranslatorSourceImpl service = new TranslatorSourceImpl(configuration,
alternatesSource
- .getTranslatorAlternates());
+ TranslatorSourceImpl service = new TranslatorSourceImpl(configuration,
+ alternatesSource.getTranslatorAlternates());
hub.addInvalidationListener(service);
@@ -2371,13 +2372,12 @@ public final class TapestryModule
configuration.add(SymbolConstants.FILE_CHECK_UPDATE_TIMEOUT, "50 ms");
// This should be overridden for particular applications. These are the
- // locales for
- // which we have (at least some) localized messages.
+ // locales for which we have (at least some) localized messages.
configuration.add(SymbolConstants.SUPPORTED_LOCALES,
"en,it,es,zh_CN,pt_PT,de,ru,hr,fi_FI,sv_SE,fr_FR,da,pt_BR,ja,el,bg,no_NB");
- configuration.add(SymbolConstants.TAPESTRY_VERSION, VersionUtils
-
.readVersionNumber("META-INF/maven/org.apache.tapestry/tapestry-core/pom.properties"));
+ configuration.add(SymbolConstants.TAPESTRY_VERSION,
+
VersionUtils.readVersionNumber("META-INF/maven/org.apache.tapestry/tapestry-core/pom.properties"));
configuration.add(SymbolConstants.COOKIE_MAX_AGE, "7 d");
@@ -2392,6 +2392,7 @@ public final class TapestryModule
configuration.add(SymbolConstants.PAGE_POOL_SOFT_WAIT, "10 ms");
configuration.add(SymbolConstants.PAGE_POOL_HARD_LIMIT, "20");
configuration.add(SymbolConstants.PAGE_POOL_ACTIVE_WINDOW, "10 m");
+ configuration.add(SymbolConstants.PAGE_POOL_ENABLED, "false");
configuration.add(SymbolConstants.SUPPRESS_REDIRECT_FROM_ACTION_REQUESTS,
"false");
@@ -2434,8 +2435,8 @@ public final class TapestryModule
configuration.add(SymbolConstants.CHARSET, "UTF-8");
- configuration.add(SymbolConstants.APPLICATION_CATALOG,
String.format("context:WEB-INF/${%s}.properties",
- InternalSymbols.APP_NAME));
+ configuration.add(SymbolConstants.APPLICATION_CATALOG,
+ String.format("context:WEB-INF/${%s}.properties",
InternalSymbols.APP_NAME));
configuration.add(SymbolConstants.EXCEPTION_REPORT_PAGE,
"ExceptionReport");
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/reload/web.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/reload/web.xml?rev=963429&r1=963428&r2=963429&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/reload/web.xml
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/reload/web.xml
Mon Jul 12 18:47:41 2010
@@ -24,6 +24,10 @@
<param-name>tapestry.app-package</param-name>
<param-value>org.apache.tapestry5.integration.reload</param-value>
</context-param>
+ <context-param>
+ <param-name>tapestry.page-pool-enabled</param-name>
+ <param-value>true</param-value>
+ </context-param>
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>