You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/09/01 20:57:43 UTC
svn commit: r991653 - in /tapestry/tapestry5/trunk/tapestry-ioc/src:
main/java/org/apache/tapestry5/ioc/internal/
main/java/org/apache/tapestry5/ioc/internal/util/
test/java/org/apache/tapestry5/ioc/internal/util/
Author: hlship
Date: Wed Sep 1 18:57:43 2010
New Revision: 991653
URL: http://svn.apache.org/viewvc?rev=991653&view=rev
Log:
Add a number of optimizations to live service reloading logic, to reduce the number of file time modified checks
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java?rev=991653&r1=991652&r2=991653&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AbstractReloadableObjectCreator.java Wed Sep 1 18:57:43 2010
@@ -177,18 +177,6 @@ public abstract class AbstractReloadable
}
}
- private URL getURLForClass(String className) throws ClassNotFoundException
- {
- String path = ClassFabUtils.getPathForClassNamed(className);
-
- URL result = baseClassLoader.getResource(path);
-
- if (result == null)
- throw new ClassNotFoundException(String.format("Unable to locate URL for class %s.", className));
-
- return result;
- }
-
private boolean shouldLoadClassNamed(String name)
{
return classesToLoad.contains(name);
@@ -260,9 +248,8 @@ public abstract class AbstractReloadable
URL url = baseClassLoader.getResource(path);
- // This does nothing unless the URL is non-null and file protocol
-
- changeTracker.add(url);
+ if (url != null && url.getProtocol().equals("file"))
+ changeTracker.add(url);
}
private boolean isInnerClassName(String className)
@@ -270,14 +257,6 @@ public abstract class AbstractReloadable
return className.indexOf('$') >= 0;
}
- /** Is the class an inner class of some other class already marked to be loaded by the special class loader? */
- private boolean isInnerClass(String className)
- {
- int dollarx = className.indexOf("$");
-
- return dollarx < 0 ? false : classesToLoad.contains(className.substring(0, dollarx));
- }
-
/** Does nothing. */
public void start(ClassPool pool) throws NotFoundException, CannotCompileException
{
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java?rev=991653&r1=991652&r2=991653&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java Wed Sep 1 18:57:43 2010
@@ -38,23 +38,25 @@ public class URLChangeTracker
private final boolean granularitySeconds;
+ private final boolean trackFolderChanges;
+
private final ClasspathURLConverter classpathURLConverter;
- private static final ClasspathURLConverter DEFAULT_CONVERTER = new ClasspathURLConverterImpl();
+ public static final ClasspathURLConverter DEFAULT_CONVERTER = new ClasspathURLConverterImpl();
/**
* Creates a tracker using the default (does nothing) URL converter, with default (millisecond)
- * granularity.
+ * granularity and folder tracking disabled.
*
* @since 5.2.1
*/
public URLChangeTracker()
{
- this(DEFAULT_CONVERTER);
+ this(DEFAULT_CONVERTER, false, false);
}
/**
- * Creates a new URL change tracker with millisecond-level granularity.
+ * Creates a new URL change tracker with millisecond-level granularity and folder checking enabled.
*
* @param classpathURLConverter
* used to convert URLs from one protocol to another
@@ -66,7 +68,8 @@ public class URLChangeTracker
}
/**
- * Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity.
+ * Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity and
+ * folder checking enabled.
*
* @param classpathURLConverter
* used to convert URLs from one protocol to another
@@ -75,9 +78,27 @@ public class URLChangeTracker
*/
public URLChangeTracker(ClasspathURLConverter classpathURLConverter, boolean granularitySeconds)
{
- this.granularitySeconds = granularitySeconds;
+ this(classpathURLConverter, granularitySeconds, true);
+ }
+ /**
+ * Creates a new URL change tracker, using either millisecond-level granularity or second-level granularity.
+ *
+ * @param classpathURLConverter
+ * used to convert URLs from one protocol to another
+ * @param granularitySeconds
+ * whether or not to use second granularity (as opposed to millisecond granularity)
+ * @param trackFolderChanges
+ * if true, then adding a file URL will also track the folder containing the file (this
+ * is useful when concerned about additions to a folder)
+ * @since 5.2.1
+ */
+ public URLChangeTracker(ClasspathURLConverter classpathURLConverter, boolean granularitySeconds,
+ boolean trackFolderChanges)
+ {
+ this.granularitySeconds = granularitySeconds;
this.classpathURLConverter = classpathURLConverter;
+ this.trackFolderChanges = trackFolderChanges;
}
/**
@@ -111,12 +132,15 @@ public class URLChangeTracker
fileToTimestamp.put(resourceFile, timestamp);
- File dir = resourceFile.getParentFile();
-
- if (!fileToTimestamp.containsKey(dir))
+ if (trackFolderChanges)
{
- long dirTimestamp = readTimestamp(dir);
- fileToTimestamp.put(dir, dirTimestamp);
+ File dir = resourceFile.getParentFile();
+
+ if (!fileToTimestamp.containsKey(dir))
+ {
+ long dirTimestamp = readTimestamp(dir);
+ fileToTimestamp.put(dir, dirTimestamp);
+ }
}
return timestamp;
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java?rev=991653&r1=991652&r2=991653&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java Wed Sep 1 18:57:43 2010
@@ -177,7 +177,7 @@ public class URLChangeTrackerTest extend
@Test
public void second_level_granularity() throws Exception
{
- URLChangeTracker t = new URLChangeTracker(converter, true);
+ URLChangeTracker t = new URLChangeTracker(converter, true, true);
File f = File.createTempFile("changetracker0", ".tmp");
URL url = f.toURL();