struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yasserzam...@apache.org
Subject [struts] 01/02: delete temp files on close instead of on JVM exists
Date Mon, 17 Sep 2018 06:36:14 GMT
This is an automated email from the ASF dual-hosted git repository.

yasserzamani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 4714fe889c76198b8f2c14ec8924e467db9dab10
Author: Yasser Zamani <yasserzamani@apache.org>
AuthorDate: Thu Sep 6 12:59:21 2018 +0430

    delete temp files on close instead of on JVM exists
    
    (cherry picked from commit b802baa)
---
 .../xwork2/util/fs/JarEntryRevision.java           | 27 ++++------------------
 .../xwork2/util/fs/StrutsJarURLConnection.java     | 20 +++++++++++++---
 .../xwork2/util/fs/JarEntryRevisionTest.java       | 18 +++++++++++++++
 3 files changed, 39 insertions(+), 26 deletions(-)

diff --git a/core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java b/core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java
index a0fea58..9fb0534 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/fs/JarEntryRevision.java
@@ -37,9 +37,7 @@ public class JarEntryRevision extends Revision {
     private long lastModified;
 
     public static Revision build(URL fileUrl, FileManager fileManager) {
-        StrutsJarURLConnection conn = null;
-        try {
-            conn = StrutsJarURLConnection.openConnection(fileUrl);
+        try (StrutsJarURLConnection conn = StrutsJarURLConnection.openConnection(fileUrl))
{
             conn.setUseCaches(false);
             URL url = fileManager.normalizeToFileProtocol(fileUrl);
             if (url != null) {
@@ -51,14 +49,6 @@ public class JarEntryRevision extends Revision {
             LOG.warn("Could not create JarEntryRevision for [{}]!", fileUrl, e);
             return null;
         }
-        finally {
-            if(null != conn) {
-                try {
-                    conn.getInputStream().close();
-                } catch (IOException ignored) {
-                }
-            }
-        }
     }
 
     private JarEntryRevision(URL jarFileURL, long lastModified) {
@@ -70,21 +60,12 @@ public class JarEntryRevision extends Revision {
     }
 
     public boolean needsReloading() {
-        StrutsJarURLConnection conn = null;
         long lastLastModified = lastModified;
-        try {
-            conn = StrutsJarURLConnection.openConnection(jarFileURL);
+        try (StrutsJarURLConnection conn = StrutsJarURLConnection.openConnection(jarFileURL))
{
             conn.setUseCaches(false);
             lastLastModified = conn.getJarEntry().getTime();
-        } catch (IOException ignored) {
-        }
-        finally {
-            if(null != conn) {
-                try {
-                    conn.getInputStream().close();
-                } catch (IOException ignored) {
-                }
-            }
+        } catch (Throwable e) {
+            LOG.warn("Could not check if needsReloading for [{}]!", jarFileURL, e);
         }
 
         return lastModified < lastLastModified;
diff --git a/core/src/main/java/com/opensymphony/xwork2/util/fs/StrutsJarURLConnection.java
b/core/src/main/java/com/opensymphony/xwork2/util/fs/StrutsJarURLConnection.java
index 44a376a..e733ac7 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/fs/StrutsJarURLConnection.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/fs/StrutsJarURLConnection.java
@@ -44,7 +44,7 @@ import java.util.jar.JarFile;
  * While {@link JarURLConnection#parseSpecs(URL)} is private, then we had to extend {@link
URLConnection} instead
  * @since 2.5.15
  */
-class StrutsJarURLConnection extends URLConnection {
+class StrutsJarURLConnection extends URLConnection implements AutoCloseable {
     private static final String FILE_URL_PREFIX = "file:";
 
     private JarURLConnection jarURLConnection;
@@ -123,8 +123,8 @@ class StrutsJarURLConnection extends URLConnection {
                             Path tmpFile = Files.createTempFile("jar_cache", null);
                             try {
                                 Files.copy(in, tmpFile, StandardCopyOption.REPLACE_EXISTING);
-                                JarFile jarFile = new JarFile(tmpFile.toFile(), true, JarFile.OPEN_READ);
-                                tmpFile.toFile().deleteOnExit();
+                                JarFile jarFile = new JarFile(tmpFile.toFile(), true, JarFile.OPEN_READ
+                                        | JarFile.OPEN_DELETE);
                                 return jarFile;
                             } catch (Throwable thr) {
                                 try {
@@ -171,6 +171,20 @@ class StrutsJarURLConnection extends URLConnection {
         }
     }
 
+    @Override
+    public void close() throws Exception {
+        try {
+            getInputStream().close();
+        } catch (IOException ignored) {
+        }
+        if (jarURLConnection == null) {
+            try {
+                jarFile.close();
+            } catch (IOException ignored) {
+            }
+        }
+    }
+
     static StrutsJarURLConnection openConnection(URL url) throws IOException {
         return new StrutsJarURLConnection(url);
     }
diff --git a/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
b/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
index 54a10b9..6969ccd 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
@@ -21,7 +21,9 @@ package com.opensymphony.xwork2.util.fs;
 import com.opensymphony.xwork2.FileManager;
 import com.opensymphony.xwork2.FileManagerFactory;
 import com.opensymphony.xwork2.XWorkTestCase;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -30,6 +32,8 @@ import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLStreamHandler;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.jar.Attributes;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
@@ -113,6 +117,20 @@ public class JarEntryRevisionTest extends XWorkTestCase {
         assertTrue(entry.needsReloading());
     }
 
+    @Override
+    protected void tearDown() throws Exception {
+        Path tmpFile = Files.createTempFile("jar_cache", null);
+        Path tmpFolder = tmpFile.getParent();
+        int count = FileUtils.listFiles(tmpFolder.toFile(), new WildcardFileFilter("jar_cache*"),
+                null).size();
+        if (tmpFile.toFile().delete()) {
+            count--;
+        }
+        assertEquals(0, count);
+
+        super.tearDown();
+    }
+
 
     /**
      * WW-4901 Simulating container implementation of {@link URL#openConnection()}


Mime
View raw message