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();