[ 
https://issues.apache.org/jira/browse/ARTEMIS-1058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16725358#comment-16725358
 ] 

ASF GitHub Bot commented on ARTEMIS-1058:
-----------------------------------------

Github user clebertsuconic commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2473#discussion_r243083234
  
    --- Diff: 
artemis-web/src/main/java/org/apache/activemq/artemis/component/WebServerComponent.java
 ---
    @@ -237,28 +236,39 @@ public void start() throws Exception {
        public void internalStop() throws Exception {
           server.stop();
           if (webContexts != null) {
    +
              File tmpdir = null;
    +         StringBuilder strBuilder = new StringBuilder();
    +         boolean found = false;
              for (WebAppContext context : webContexts) {
                 tmpdir = context.getTempDirectory();
     
    -            if (tmpdir != null && !context.isPersistTempDirectory()) {
    +            if (tmpdir != null && tmpdir.exists() && 
!context.isPersistTempDirectory()) {
                    //tmpdir will be removed by deleteOnExit()
    -               //somehow when broker is stopped and restarted quickly
    -               //this tmpdir won't get deleted sometimes
    -               boolean fileDeleted = TimeUtils.waitOnBoolean(false, 5000, 
tmpdir::exists);
    -
    -               if (!fileDeleted) {
    -                  //because the execution order of shutdown hooks are
    -                  //not determined, so it's possible that the deleteOnExit
    -                  //is executed after this hook, in that case we force a 
delete.
    -                  FileUtil.deleteDirectory(tmpdir);
    -                  logger.debug("Force to delete temporary file on 
shutdown: " + tmpdir.getAbsolutePath());
    -                  if (tmpdir.exists()) {
    -                     ActiveMQWebLogger.LOGGER.tmpFileNotDeleted(tmpdir);
    -                  }
    +               //However because the URLClassLoader never release/close 
its opened
    +               //jars the jar file won't be able to get deleted on Windows 
platform
    +               //until after the process fully terminated. To fix this 
here arranges
    +               //a separate process to try clean up the temp dir
    +               FileUtil.deleteDirectory(tmpdir);
    +               if (tmpdir.exists()) {
    +                  ActiveMQWebLogger.LOGGER.tmpFileNotDeleted(tmpdir);
    +                  strBuilder.append(tmpdir);
    +                  strBuilder.append(",");
    +                  found = true;
                    }
                 }
              }
    +
    +         if (found) {
    +            String artemisHome = System.getProperty("artemis.home");
    --- End diff --
    
    can't you get the property from other means? Fileconfiguration for instance?


> Jars in web tmp dir locked on Windows
> -------------------------------------
>
>                 Key: ARTEMIS-1058
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1058
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 1.5.3
>         Environment: Windows 
>            Reporter: Howard Gao
>            Assignee: Howard Gao
>            Priority: Minor
>             Fix For: unscheduled
>
>
> The embedded jetty web server's WebAppClassloader holds up webapp's jar files 
> and does not release them after close. For that reason the web app's temp dir 
> cannot be cleaned up on Windows. (Other platforms like Linux doesn't prevent 
> a force delete of files even they are not released).
> As long as this behavior exists we need to have a workaround to let
> the tmp dir be cleaned up.
> It is possible that we use a 'customized' classloader to replace jetty's
> WebAppClassloader, in which we manually iterate every JarFile resources
> and close them.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to