Author: mgrigorov
Date: Thu Jun 30 13:27:04 2011
New Revision: 1141529

URL: http://svn.apache.org/viewvc?rev=1141529&view=rev
Log:
WICKET-3851 Remove usage of System.gc() in Wicket code


Added:
    
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
Modified:
    
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java

Modified: 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java?rev=1141529&r1=1141528&r2=1141529&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
(original)
+++ 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
Thu Jun 30 13:27:04 2011
@@ -30,6 +30,8 @@ import org.apache.wicket.util.io.Streams
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * File utility methods.
@@ -38,6 +40,8 @@ import org.apache.wicket.util.time.Time;
  */
 public class Files
 {
+       private static final Logger logger = 
LoggerFactory.getLogger(Files.class);
+
        // protocols for urls
        private static final String URL_FILE_PREFIX = "file:";
        private static final String URL_LOCAL_JAR_FILE_PREFIX = "jar:file:";
@@ -99,7 +103,11 @@ public class Files
        }
 
        /**
-        * Deletes a file, dealing with a particularly nasty bug on Windows.
+        * Deletes a file.
+        * <p>
+        * If the file cannot be deleted for any reason then at most 10 retries 
are attempted with delay
+        * of 100ms. If the file still cannot be deleted then it is scheduled 
to be deleted at JVM exit
+        * time.
         * 
         * @param file
         *            File to delete
@@ -107,13 +115,13 @@ public class Files
         */
        public static boolean remove(final java.io.File file)
        {
-               // Delete current file
-               if (!file.delete())
+               int retries = 10;
+
+               boolean deleted = false;
+
+               while ((deleted = file.delete()) == false && retries > 0)
                {
-                       // NOTE: fix for java/win bug. see:
-                       // 
http://forum.java.sun.com/thread.jsp?forum=4&thread=158689&tstart=
-                       // 0&trange=15
-                       System.gc();
+                       retries--;
                        try
                        {
                                Thread.sleep(100);
@@ -121,11 +129,17 @@ public class Files
                        catch (InterruptedException ignored)
                        {
                        }
+               }
 
-                       // Try one more time to delete the file
-                       return file.delete();
+               if (deleted == false && logger.isWarnEnabled())
+               {
+                       logger.warn(
+                               "Cannot delete file '{}' for unknown reason. 
The file will be scheduled for deletion at JVM exit time.",
+                               file);
+                       file.deleteOnExit();
                }
-               return true;
+
+               return deleted;
        }
 
        /**
@@ -249,16 +263,17 @@ public class Files
                        }
                }
        }
-       
+
        /**
-        * for urls that point to local files (e.g. 'file:' or 'jar:file:') this
-        * methods returns a reference to the local file
-        *
-        * @param url url of the resource
+        * for urls that point to local files (e.g. 'file:' or 'jar:file:') 
this methods returns a
+        * reference to the local file
+        * 
+        * @param url
+        *            url of the resource
         * 
         * @return reference to a local file if url contains one, 
<code>null</code> otherwise
         * 
-        * @see #getLocalFileFromUrl(String) 
+        * @see #getLocalFileFromUrl(String)
         */
        public static File getLocalFileFromUrl(URL url)
        {
@@ -266,14 +281,15 @@ public class Files
        }
 
        /**
-        * for urls that point to local files (e.g. 'file:' or 'jar:file:') this
-        * methods returns a reference to the local file
-        *
-        * @param url url of the resource
+        * for urls that point to local files (e.g. 'file:' or 'jar:file:') 
this methods returns a
+        * reference to the local file
+        * 
+        * @param url
+        *            url of the resource
         * 
         * @return reference to a local file if url contains one, 
<code>null</code> otherwise
         * 
-        * @see #getLocalFileFromUrl(URL) 
+        * @see #getLocalFileFromUrl(URL)
         */
        public static File getLocalFileFromUrl(String url)
        {

Added: 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java?rev=1141529&view=auto
==============================================================================
--- 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
 (added)
+++ 
wicket/trunk/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java
 Thu Jun 30 13:27:04 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.wicket.util.file;
+
+import java.io.IOException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link Files}
+ */
+public class FilesTest extends Assert
+{
+
+       /**
+        * @throws IOException
+        */
+       @Test
+       public void remove() throws IOException
+       {
+               java.io.File file = 
java.io.File.createTempFile("wicket-test--", ".tmp");
+               assertTrue("The just created file should exist!", 
file.exists());
+
+               boolean removed = Files.remove(file);
+               assertFalse("The just removed file should not exist!", 
file.exists());
+               assertTrue("Files.remove(file) should remove the file", 
removed);
+       }
+}


Reply via email to