You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/04/19 02:18:40 UTC

svn commit: r1094828 - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/main/java/org/apache/tapestry5/services/ tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/serv...

Author: hlship
Date: Tue Apr 19 00:18:40 2011
New Revision: 1094828

URL: http://svn.apache.org/viewvc?rev=1094828&view=rev
Log:
TAP5-1508: Disable the UpdateListenerHub and CheckForUpdatesFilter when in production mode

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java
      - copied, changed from r1094827, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java?rev=1094828&r1=1094827&r2=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CheckForUpdatesFilter.java Tue Apr 19 00:18:40 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2011 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
+// 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,9 +14,13 @@
 
 package org.apache.tapestry5.internal.services;
 
+import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.Invokable;
+import org.apache.tapestry5.ioc.annotations.IntermediateType;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier;
+import org.apache.tapestry5.ioc.util.TimeInterval;
 import org.apache.tapestry5.services.*;
 
 import java.io.IOException;
@@ -60,11 +64,22 @@ public class CheckForUpdatesFilter imple
     private long lastCheck = 0;
 
     /**
-     * @param updateListenerHub invoked, at intervals, to spur the process of detecting changes
-     * @param checkInterval     interval, in milliseconds, between checks
-     * @param updateTimeout     time, in  milliseconds, to wait to obtain update lock.
+     * @param updateListenerHub
+     *            invoked, at intervals, to spur the process of detecting changes
+     * @param checkInterval
+     *            interval, in milliseconds, between checks
+     * @param updateTimeout
+     *            time, in milliseconds, to wait to obtain update lock.
      */
-    public CheckForUpdatesFilter(UpdateListenerHub updateListenerHub, long checkInterval, long updateTimeout)
+    public CheckForUpdatesFilter(UpdateListenerHub updateListenerHub,
+
+    @Symbol(SymbolConstants.FILE_CHECK_INTERVAL)
+    @IntermediateType(TimeInterval.class)
+    long checkInterval,
+
+    @Symbol(SymbolConstants.FILE_CHECK_UPDATE_TIMEOUT)
+    @IntermediateType(TimeInterval.class)
+    long updateTimeout)
     {
         this.updateListenerHub = updateListenerHub;
         this.checkInterval = checkInterval;
@@ -97,12 +112,14 @@ public class CheckForUpdatesFilter imple
             }
         };
 
-        // Obtain a read lock while handling the request. This will not impair parallel operations, except when a file check
+        // Obtain a read lock while handling the request. This will not impair parallel operations, except when a file
+        // check
         // is needed (the exclusive write lock will block threads attempting to get a read lock).
 
         boolean result = barrier.withRead(invokable);
 
-        if (exceptionHolder.hasValue()) throw exceptionHolder.get();
+        if (exceptionHolder.hasValue())
+            throw exceptionHolder.get();
 
         return result;
     }

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=1094828&r1=1094827&r2=1094828&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 Tue Apr 19 00:18:40 2011
@@ -197,6 +197,7 @@ import org.apache.tapestry5.ioc.services
 import org.apache.tapestry5.ioc.services.ClassFactory;
 import org.apache.tapestry5.ioc.services.Coercion;
 import org.apache.tapestry5.ioc.services.CoercionTuple;
+import org.apache.tapestry5.ioc.services.DefaultImplementationBuilder;
 import org.apache.tapestry5.ioc.services.LazyAdvisor;
 import org.apache.tapestry5.ioc.services.MasterObjectProvider;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
@@ -204,6 +205,7 @@ import org.apache.tapestry5.ioc.services
 import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
 import org.apache.tapestry5.ioc.services.PropertyAccess;
 import org.apache.tapestry5.ioc.services.PropertyShadowBuilder;
+import org.apache.tapestry5.ioc.services.ServiceOverride;
 import org.apache.tapestry5.ioc.services.StrategyBuilder;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.ioc.services.ThreadLocale;
@@ -999,7 +1001,8 @@ public final class TapestryModule
      * the request</dd>
      * <dt>CheckForUpdates</dt>
      * <dd>Periodically fires events that checks to see if the file system sources for any cached data has changed (see
-     * {@link org.apache.tapestry5.internal.services.CheckForUpdatesFilter}).
+     * {@link org.apache.tapestry5.internal.services.CheckForUpdatesFilter}). Starting in 5.3, this filter will be null
+     * in production mode (it will only be active in development mode).
      * <dt>ErrorFilter</dt>
      * <dd>Catches request errors and lets the {@link org.apache.tapestry5.services.RequestExceptionHandler} handle them
      * </dd>
@@ -1012,15 +1015,8 @@ public final class TapestryModule
      */
     public void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration, Context context,
 
-    @Symbol(SymbolConstants.FILE_CHECK_INTERVAL)
-    @IntermediateType(TimeInterval.class)
-    long checkInterval,
-
-    @Symbol(SymbolConstants.FILE_CHECK_UPDATE_TIMEOUT)
-    @IntermediateType(TimeInterval.class)
-    long updateTimeout,
-
-    UpdateListenerHub updateListenerHub)
+    @Symbol(SymbolConstants.PRODUCTION_MODE)
+    boolean productionMode)
     {
         RequestFilter staticFilesFilter = new StaticFilesFilter(context);
 
@@ -1049,8 +1045,14 @@ public final class TapestryModule
             }
         };
 
-        configuration.add("CheckForUpdates",
-                new CheckForUpdatesFilter(updateListenerHub, checkInterval, updateTimeout), "before:*");
+        if (productionMode)
+        {
+            configuration.add("CheckForUpdates", null, "before:*");
+        }
+        else
+        {
+            configuration.addInstance("CheckForUpdates", CheckForUpdatesFilter.class, "before:*");
+        }
 
         configuration.add("StaticFiles", staticFilesFilter);
 
@@ -1059,7 +1061,6 @@ public final class TapestryModule
         configuration.add("StoreIntoGlobals", storeIntoGlobals, "after:StaticFiles", "before:ErrorFilter");
 
         configuration.add("EndOfRequest", fireEndOfRequestEvent, "after:StoreIntoGlobals", "before:ErrorFilter");
-
     }
 
     /**
@@ -2948,4 +2949,28 @@ public final class TapestryModule
     {
         return new LinkTransformerInterceptor(linkTransformer, delegate);
     }
+
+    /**
+     * In production mode, overrides {@link UpdateListenerHub} to be an empty placeholder.
+     */
+    @Contribute(ServiceOverride.class)
+    public static void productionModeOverrides(MappedConfiguration<Class, Object> configuration,
+            @Symbol(SymbolConstants.PRODUCTION_MODE)
+            boolean productionMode)
+    {
+        if (productionMode)
+        {
+            configuration.add(UpdateListenerHub.class, new UpdateListenerHub()
+            {
+                public void fireCheckForUpdates()
+                {
+                }
+
+                public void addUpdateListener(UpdateListener listener)
+                {
+
+                }
+            });
+        }
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java?rev=1094828&r1=1094827&r2=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java Tue Apr 19 00:18:40 2011
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2011 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
+// 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,
@@ -19,8 +19,9 @@ import org.apache.tapestry5.ioc.MappedCo
 
 public class AppModule
 {
-    public static void contributeApplicationDefaults(MappedConfiguration<String, String> conf)
+    public static void contributeApplicationDefaults(MappedConfiguration<String, Object> conf)
     {
         conf.add(SymbolConstants.FILE_CHECK_INTERVAL, "0ms");
+        conf.add(SymbolConstants.PRODUCTION_MODE, false);
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImplTest.java?rev=1094828&r1=1094827&r2=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImplTest.java Tue Apr 19 00:18:40 2011
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 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
+// 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,
@@ -78,7 +78,7 @@ public class ComponentInstantiatorSource
         replay();
 
         ComponentInstantiatorSourceImpl e = new ComponentInstantiatorSourceImpl(logger, contextLoader, transformer,
-                                                                                null, converter);
+                null, converter);
 
         assertEquals(e.inControlledPackage("foo.bar.Baz"), false);
 
@@ -102,7 +102,6 @@ public class ComponentInstantiatorSource
 
         verify();
     }
- 
 
     /**
      * This allows tests the exists() method.
@@ -121,7 +120,7 @@ public class ComponentInstantiatorSource
         assertTrue(source.exists(SYNTH_COMPONENT_CLASSNAME));
 
         getMocksControl().resetToNice();
-        
+
         Named named = (Named) createComponent(SYNTH_COMPONENT_CLASSNAME);
 
         assertEquals(named.getName(), "Original");
@@ -133,7 +132,8 @@ public class ComponentInstantiatorSource
 
         while (true)
         {
-            if (readDTM(url) != dtm) break;
+            if (readDTM(url) != dtm)
+                break;
 
             // Keep re-writing the file until we see the DTM change.
 
@@ -220,10 +220,11 @@ public class ComponentInstantiatorSource
 
         URL url = extraClasspath.toURL();
 
-        extraLoader = new URLClassLoader(new URL[] { url }, contextLoader);
+        extraLoader = new URLClassLoader(new URL[]
+        { url }, contextLoader);
         RegistryBuilder builder = new RegistryBuilder(extraLoader);
 
-        builder.add(TapestryModule.class);
+        builder.add(TapestryModule.class, ForceDevelopmentModeModule.class);
 
         registry = builder.build();
 

Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java (from r1094827, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java&r1=1094827&r2=1094828&rev=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/reload/services/AppModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ForceDevelopmentModeModule.java Tue Apr 19 00:18:40 2011
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2011 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
+// 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,
@@ -12,15 +12,20 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry5.integration.reload.services;
+package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.ioc.MappedConfiguration;
+import org.apache.tapestry5.ioc.annotations.Contribute;
+import org.apache.tapestry5.ioc.services.ApplicationDefaults;
+import org.apache.tapestry5.ioc.services.SymbolProvider;
 
-public class AppModule
+public class ForceDevelopmentModeModule
 {
-    public static void contributeApplicationDefaults(MappedConfiguration<String, String> conf)
+    @Contribute(SymbolProvider.class)
+    @ApplicationDefaults
+    public static void enableDevelopmentMode(MappedConfiguration<String, Object> configuration)
     {
-        conf.add(SymbolConstants.FILE_CHECK_INTERVAL, "0ms");
+        configuration.add(SymbolConstants.PRODUCTION_MODE, false);
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java?rev=1094828&r1=1094827&r2=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java Tue Apr 19 00:18:40 2011
@@ -82,7 +82,7 @@ public class InternalBaseTestCase extend
     {
         RegistryBuilder builder = new RegistryBuilder();
 
-        builder.add(TapestryModule.class);
+        builder.add(TapestryModule.class, ForceDevelopmentModeModule.class);
 
         registry = builder.build();
 

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java?rev=1094828&r1=1094827&r2=1094828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/services/UpdateListenerHub.java Tue Apr 19 00:18:40 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011 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.
@@ -30,6 +30,8 @@ import org.apache.tapestry5.ioc.ObjectLo
  * A <em>weak reference</em> to the listener is kept; this ensures that registering as a listener will not prevent a
  * listener instance from being reclaimed by the garbage collector (this is useful as proxies created by
  * {@link ObjectLocator#proxy(Class, Class)} may register as listeners, but still be ephemeral).
+ * <p>
+ * Starting in Tapestry 5.3, this services does <em>nothing</em> in production mode.
  * 
  * @since 5.1.0.0
  */