karaf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Frederic ARNOUD (JIRA)" <j...@apache.org>
Subject [jira] [Created] (KARAF-4802) Auto Deploy does not release resource
Date Fri, 21 Oct 2016 14:32:58 GMT
Frederic ARNOUD created KARAF-4802:

             Summary: Auto Deploy does not release resource
                 Key: KARAF-4802
                 URL: https://issues.apache.org/jira/browse/KARAF-4802
             Project: Karaf
          Issue Type: Bug
          Components: karaf-core
    Affects Versions: 4.0.7, 4.0.5
         Environment: JDK 1.8.0_102 / Win10 (x64)

            Reporter: Frederic ARNOUD

In org.apache.karaf.deployer.blueprint-4.0.7-sources.jar:

		=> call {{sun.net.www.protocol.file.FileURLConnection#getLastModified()}}
		=> call {{sun.net.www.protocol.file.FileURLConnection#initializeHeaders()}}
		=> call {{sun.net.www.protocol.file.FileURLConnection#connect()}}
			line 57: {{this.connected}} is {{false}}
			line 61: {{this.isDirectory}} is {{false}}
			*Here they open the input stream:*
			line 69: open input stream and keep it in this.is

Bad code at line (since they try to open the stream):
	sun/net/www/protocol/file/FileURLConnection.java:90 with a nice empty try/catch!

AFAIK, there's no way to know if stream was open or not.
I checked {{HttpURLConnection}}, it does the same (and {{HttpsURLConnection}} also).

*IMHO you should add a function like this one:*
    protected static long getLastModified(URL url) throws IOException {
        URLConnection urlConnection = url.openConnection();
        try(InputStream is = urlConnection.getInputStream()) {
            return urlConnection.getLastModified();

To avoid risk to open remote stream twice, I did this in my code (in function similar to {{transform(URL,
        final URLConnection urlConnection = url.openConnection();
        // keep original last modification date
        final long lastModified = urlConnection.getLastModified();
        try (InputStream in = urlConnection.getInputStream()) {
            source = readAllBytes(in);

Since no object reference the InputStream, InputStream class will automatically close the
stream while processing the finalization.
Before this process, we cannot delete file in deploy directory.

(sorry I did not find component for this class)

Same issue should appear in other deployer (not checked).

This message was sent by Atlassian JIRA

View raw message