[
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)