You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/09/01 02:01:53 UTC
svn commit: r991402 - in /tapestry/tapestry5/trunk:
tapestry-core/src/main/java/org/apache/tapestry5/internal/services/
tapestry-core/src/main/java/org/apache/tapestry5/internal/util/
tapestry-core/src/main/java/org/apache/tapestry5/test/ tapestry-core...
Author: hlship
Date: Wed Sep 1 00:01:53 2010
New Revision: 991402
URL: http://svn.apache.org/viewvc?rev=991402&view=rev
Log:
TAP5-1188: Refactory URLChangeTracker from tapestry-core to tapestry-ioc
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java (contents, props changed)
- copied, changed from r991401, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/URLChangeTracker.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java (contents, props changed)
- copied, changed from r991401, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/util/URLChangeTrackerTest.java
Removed:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/URLChangeTracker.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/util/URLChangeTrackerTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceCacheImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImplTest.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java Wed Sep 1 00:01:53 2010
@@ -29,13 +29,13 @@ import javassist.NotFoundException;
import javassist.Translator;
import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.internal.services.ClassFactoryClassPool;
import org.apache.tapestry5.ioc.internal.services.ClassFactoryImpl;
import org.apache.tapestry5.ioc.internal.services.CtClassSource;
import org.apache.tapestry5.ioc.internal.services.CtClassSourceImpl;
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.ClassFabUtils;
import org.apache.tapestry5.ioc.services.ClassFactory;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImpl.java Wed Sep 1 00:01:53 2010
@@ -21,11 +21,11 @@ import java.util.Locale;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.func.Worker;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.services.InvalidationEventHub;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentTemplateSourceImpl.java Wed Sep 1 00:01:53 2010
@@ -19,11 +19,11 @@ import org.apache.tapestry5.internal.eve
import org.apache.tapestry5.internal.parser.ComponentTemplate;
import org.apache.tapestry5.internal.parser.TemplateToken;
import org.apache.tapestry5.internal.util.MultiKey;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.annotations.Primary;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.services.InvalidationEventHub;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java Wed Sep 1 00:01:53 2010
@@ -21,11 +21,11 @@ import java.util.Map;
import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
import org.apache.tapestry5.internal.util.MultiKey;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.LocalizedNameGenerator;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.services.messages.PropertiesFileParser;
/**
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceCacheImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceCacheImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceCacheImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceCacheImpl.java Wed Sep 1 00:01:53 2010
@@ -15,9 +15,9 @@
package org.apache.tapestry5.internal.services;
import org.apache.tapestry5.internal.event.InvalidationEventHubImpl;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.services.ResourceDigestGenerator;
import org.apache.tapestry5.services.UpdateListener;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ValidationMessagesSourceImpl.java Wed Sep 1 00:01:53 2010
@@ -14,11 +14,11 @@
package org.apache.tapestry5.internal.services;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.MessageFormatter;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.services.UpdateListener;
import org.apache.tapestry5.services.ValidationMessagesSource;
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java Wed Sep 1 00:01:53 2010
@@ -14,14 +14,10 @@
package org.apache.tapestry5.test;
-import static java.lang.Thread.sleep;
import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
-import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.net.URL;
import java.util.Arrays;
@@ -317,30 +313,6 @@ public abstract class TapestryTestCase e
return newMock(Validator.class);
}
- /**
- * Writes a change to a file.
- */
- protected final void touch(File f) throws Exception
- {
- long startModified = f.lastModified();
-
- while (true)
- {
- OutputStream o = new FileOutputStream(f);
- o.write(0);
- o.close();
-
- long newModified = f.lastModified();
-
- if (newModified != startModified)
- return;
-
- // Sleep 1/20 second and try again
-
- sleep(50);
- }
- }
-
/** @deprecated May be removed in Tapestry 5.3 */
protected final void train_addField(ClassTransformation transformation, int modifiers, String type,
String suggestedName, String actualName)
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImplTest.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentMessagesSourceImplTest.java Wed Sep 1 00:01:53 2010
@@ -20,11 +20,11 @@ import java.util.Locale;
import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
+import org.apache.tapestry5.ioc.internal.util.URLChangeTracker;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.services.messages.ComponentMessagesSource;
Copied: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java (from r991401, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/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?p2=tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/URLChangeTracker.java&r1=991401&r2=991402&rev=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/URLChangeTracker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java Wed Sep 1 00:01:53 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,
@@ -12,9 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.util;
+package org.apache.tapestry5.ioc.internal.util;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.services.ClassFabUtils;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
@@ -37,56 +36,63 @@ public class URLChangeTracker
private final Map<File, Long> fileToTimestamp = CollectionFactory.newConcurrentMap();
private final boolean granularitySeconds;
-
- private final ClasspathURLConverter classpathURLConverter;
+
+ private final ClasspathURLConverter classpathURLConverter;
/**
* Creates a new URL change tracker with millisecond-level granularity.
*
- * @param classpathURLConverter used to convert URLs from one protocol to another
+ * @param classpathURLConverter
+ * used to convert URLs from one protocol to another
*/
public URLChangeTracker(ClasspathURLConverter classpathURLConverter)
{
this(classpathURLConverter, false);
-
+
}
/**
* 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 classpathURLConverter
+ * used to convert URLs from one protocol to another
+ * @param granularitySeconds
+ * whether or not to use second granularity (as opposed to millisecond granularity)
*/
public URLChangeTracker(ClasspathURLConverter classpathURLConverter, boolean granularitySeconds)
{
this.granularitySeconds = granularitySeconds;
-
+
this.classpathURLConverter = classpathURLConverter;
}
/**
* Stores a new URL into the tracker, or returns the previous time stamp for a previously added URL. Filters out all
* non-file URLs.
- *
- * @param url of the resource to add, or null if not known
+ *
+ * @param url
+ * of the resource to add, or null if not known
* @return the current timestamp for the URL (possibly rounded off for granularity reasons), or 0 if the URL is
* null
*/
public long add(URL url)
{
- if (url == null) return 0;
-
+ if (url == null)
+ return 0;
+
URL converted = classpathURLConverter.convert(url);
- if (!converted.getProtocol().equals("file")) return timestampForNonFileURL(converted);
+ if (!converted.getProtocol().equals("file"))
+ return timestampForNonFileURL(converted);
File resourceFile = ClassFabUtils.toFileFromFileProtocolURL(converted);
- if (fileToTimestamp.containsKey(resourceFile)) return fileToTimestamp.get(resourceFile);
+ if (fileToTimestamp.containsKey(resourceFile))
+ return fileToTimestamp.get(resourceFile);
long timestamp = readTimestamp(resourceFile);
- // A quick and imperfect fix for TAPESTRY-1918. When a file
+ // A quick and imperfect fix for TAPESTRY-1918. When a file
// is added, add the directory containing the file as well.
fileToTimestamp.put(resourceFile, timestamp);
@@ -99,7 +105,6 @@ public class URLChangeTracker
fileToTimestamp.put(dir, dirTimestamp);
}
-
return timestamp;
}
@@ -143,7 +148,8 @@ public class URLChangeTracker
long newTimestamp = readTimestamp(entry.getKey());
long current = entry.getValue();
- if (current == newTimestamp) continue;
+ if (current == newTimestamp)
+ continue;
result = true;
entry.setValue(newTimestamp);
@@ -157,7 +163,8 @@ public class URLChangeTracker
*/
private long readTimestamp(File file)
{
- if (!file.exists()) return FILE_DOES_NOT_EXIST_TIMESTAMP;
+ if (!file.exists())
+ return FILE_DOES_NOT_EXIST_TIMESTAMP;
return applyGranularity(file.lastModified());
}
@@ -169,7 +176,8 @@ public class URLChangeTracker
// are only accurate to one second. The extra level of detail creates false positives
// for changes, and undermines HTTP response caching in the client.
- if (granularitySeconds) return timestamp - (timestamp % 1000);
+ if (granularitySeconds)
+ return timestamp - (timestamp % 1000);
return timestamp;
}
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java Wed Sep 1 00:01:53 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,9 +22,13 @@ import org.apache.tapestry5.ioc.def.Modu
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.services.*;
+import static java.lang.Thread.sleep;
import static org.easymock.EasyMock.isA;
import org.slf4j.Logger;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
@@ -52,11 +56,12 @@ public class IOCTestCase extends TestBas
{
for (Method method : clazz.getMethods())
{
- if (method.getName().equals(methodName)) return method;
+ if (method.getName().equals(methodName))
+ return method;
}
- throw new IllegalArgumentException(
- String.format("Class %s does not provide a method named '%s'.", clazz.getName(), methodName));
+ throw new IllegalArgumentException(String.format("Class %s does not provide a method named '%s'.",
+ clazz.getName(), methodName));
}
protected final Method findMethod(Object subject, String methodName)
@@ -295,7 +300,7 @@ public class IOCTestCase extends TestBas
}
protected final <T> void train_getService(ObjectLocator locator, String serviceId, Class<T> serviceInterface,
- T service)
+ T service)
{
expect(locator.getService(serviceId, serviceInterface)).andReturn(service);
}
@@ -341,7 +346,7 @@ public class IOCTestCase extends TestBas
}
protected final <T> void train_provide(ObjectProvider provider, Class<T> objectType,
- AnnotationProvider annotationProvider, ObjectLocator locator, T object)
+ AnnotationProvider annotationProvider, ObjectLocator locator, T object)
{
expect(provider.provide(objectType, annotationProvider, locator)).andReturn(object);
}
@@ -352,7 +357,7 @@ public class IOCTestCase extends TestBas
}
protected final <T extends Annotation> void train_getAnnotation(AnnotationProvider annotationProvider,
- Class<T> annotationClass, T annotation)
+ Class<T> annotationClass, T annotation)
{
expect(annotationProvider.getAnnotation(annotationClass)).andReturn(annotation);
}
@@ -429,4 +434,30 @@ public class IOCTestCase extends TestBas
{
expect(symbolSource.valueForSymbol(symbolName)).andReturn(value).atLeastOnce();
}
+
+ /**
+ * Writes a change to a file. The contents of the file are lost. May repeatedly modify
+ * the file, and does not return until the last modified time for the file actually changes (how long that takes
+ * is JDK, OS and file system dependent).
+ */
+ protected final void touch(File f) throws Exception
+ {
+ long startModified = f.lastModified();
+
+ while (true)
+ {
+ OutputStream o = new FileOutputStream(f);
+ o.write(0);
+ o.close();
+
+ long newModified = f.lastModified();
+
+ if (newModified != startModified)
+ return;
+
+ // Sleep 1/20 second and try again
+
+ sleep(50);
+ }
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java?rev=991402&r1=991401&r2=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java Wed Sep 1 00:01:53 2010
@@ -24,6 +24,7 @@ import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtMethod;
+import org.apache.tapestry5.ioc.test.IOCTestCase;
import org.apache.tapestry5.ioc.test.TestBase;
import org.apache.tapestry5.services.UpdateListenerHub;
import org.testng.annotations.BeforeClass;
@@ -36,7 +37,7 @@ import com.example.ReloadableService;
* Test the ability to perform live class reloading of a service implementation.
*/
@SuppressWarnings("unchecked")
-public class ReloadTest extends TestBase
+public class ReloadTest extends IOCTestCase
{
private static final String PACKAGE = "com.example";
@@ -48,6 +49,8 @@ public class ReloadTest extends TestBase
public static boolean eagerLoadServiceWasInstantiated;
+ private File classFile;
+
@BeforeClass
public void setup() throws Exception
{
@@ -63,6 +66,8 @@ public class ReloadTest extends TestBase
classLoader = new URLClassLoader(new URL[]
{ classesURL }, Thread.currentThread().getContextClassLoader());
+
+ classFile = new File(classesDir, "com/example/ReloadableServiceImpl.class");
}
@Test
@@ -82,9 +87,7 @@ public class ReloadTest extends TestBase
fireUpdateCheck(registry);
- // Sleep long enough that the Java millisecond clock advances.
-
- Thread.currentThread().sleep(1500);
+ touch(classFile);
createImplementationClass("updated");
@@ -110,8 +113,6 @@ public class ReloadTest extends TestBase
assertEquals(reloadable.getStatus(), "before delete");
- File classFile = new File(classesDir, "com/example/ReloadableServiceImpl.class");
-
assertTrue(classFile.exists(), "The class file must exist.");
classFile.delete();
@@ -144,7 +145,7 @@ public class ReloadTest extends TestBase
assertEquals(reloadable.getStatus(), "initial proxy");
- Thread.currentThread().sleep(1500);
+ touch(classFile);
createImplementationClass("updated proxy");
@@ -178,9 +179,9 @@ public class ReloadTest extends TestBase
ReloadableService reloadable = registry.getService(ReloadableService.class);
- createInvalidImplentationClass();
+ touch(classFile);
- Thread.currentThread().sleep(1500);
+ createInvalidImplentationClass();
fireUpdateCheck(registry);
@@ -243,7 +244,6 @@ public class ReloadTest extends TestBase
@Test
public void eager_load_service_with_proxy()
{
-
eagerLoadServiceWasInstantiated = false;
Registry r = new RegistryBuilder().add(EagerProxyReloadModule.class).build();
Copied: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java (from r991401, tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/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?p2=tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/util/URLChangeTrackerTest.java&r1=991401&r2=991402&rev=991402&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/util/URLChangeTrackerTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java Wed Sep 1 00:01:53 2010
@@ -1,10 +1,10 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 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
+// 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,20 +12,21 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry5.internal.util;
+package org.apache.tapestry5.ioc.internal.util;
+
+import java.io.File;
+import java.net.URL;
import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl;
import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
-import org.apache.tapestry5.test.TapestryTestCase;
+import org.apache.tapestry5.ioc.test.IOCTestCase;
+import org.apache.tapestry5.ioc.test.TestBase;
import org.testng.annotations.Test;
-import java.io.File;
-import java.net.URL;
-
-public class URLChangeTrackerTest extends TapestryTestCase
+public class URLChangeTrackerTest extends IOCTestCase
{
private final ClasspathURLConverter converter = new ClasspathURLConverterImpl();
-
+
@Test
public void contains_change_when_empty()
{
@@ -102,7 +103,8 @@ public class URLChangeTrackerTest extend
{
File.createTempFile("changetracker1", ".tmp");
- if (dir.lastModified() != timestamp) break;
+ if (dir.lastModified() != timestamp)
+ break;
// Sometime Java need a moment to catch up in terms of
// file system changes. Sleep for a few milliseconds
Propchange: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java
------------------------------------------------------------------------------
svn:eol-style = native