Liam Sharp created DERBY-7150: --------------------------------- Summary: derby.log locked after database shutdown preventing deletion Key: DERBY-7150 URL: https://issues.apache.org/jira/browse/DERBY-7150 Project: Derby Issue Type: Bug Affects Versions: 10.16.1.1 Environment: Windows Reporter: Liam Sharp
On Windows I'm unable to delete derby.log after shutting down the database. I've created a demo maven project [here|https://github.com/screamingfrog/hello-world-cli/tree/derby-locking-logfile], that if run on Windows, produces the following: {{2023-02-03 13:16:58,070 [main] INFO - derby.system.home will be set to: C:\Users\Administrator\derby-test}} {{2023-02-03 13:16:58,073 [main] INFO - Folder exists, deleting}} {{2023-02-03 13:16:58,073 [main] INFO - Initalising driver}} {{2023-02-03 13:16:58,189 [main] INFO - Creating connection jdbc:derby:EmbeddedDBAudit;create=true}} {{2023-02-03 13:16:58,955 [main] INFO - Shutting down connection jdbc:derby:EmbeddedDBAudit;shutdown=true}} {{2023-02-03 13:16:58,978 [main] WARN - Failed to delete file C:\Users\Administrator\derby-test\derby.log}} Code inline is here: {{{}package com.github.screamingfrog;{}}}{{{}import java.io.File;{}}} {{import java.sql.DriverManager;}} {{{}import java.sql.SQLException;{}}}{{{}import org.apache.logging.log4j.LogManager;{}}} {{{}import org.apache.logging.log4j.Logger;{}}}{{{}public class App {}}} {{{}}{{ private static final Logger LOGGER = LogManager.getLogger(App.class);}} {{ }} {{ private static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";}}{{ private static final String CONNECTION_URL = "jdbc:derby:EmbeddedDBAudit";}} {{ private static final String CREATE_CONNECTION_URL = CONNECTION_URL + ";create=true";}} {{ private static final String SHUTDOWN_CONNECTION_URL = CONNECTION_URL + ";shutdown=true";}}{{ private static File derbySystemFolder;}}{{ public static void main(}} {{ String[] args) }} {{ {}} {{ try }} {{ {}} {{ initDerbyHomeAndDriver();}} {{ createConnection();}} {{ shutdownConnectionAndCleanup();}} {{ }}} {{ catch (SQLException e) }} {{ {}} {{ LOGGER.error("SQLException: " + e, e);}} {{ }}} {{ }}}{{ private static void initDerbyHomeAndDriver() }} {{ {}} {{ setDerbyHome();}} {{ initDerbyDriverInstance();}} {{ }}}{{ private static void createConnection() throws SQLException }} {{ {}} {{ LOGGER.info("Creating connection " + CREATE_CONNECTION_URL);}} {{ DriverManager.getConnection(CREATE_CONNECTION_URL);}} {{ }}}{{ private static void shutdownConnectionAndCleanup() }} {{ {}} {{ LOGGER.info("Shutting down connection " + SHUTDOWN_CONNECTION_URL);}} {{ try }} {{ {}} {{ DriverManager.getConnection(SHUTDOWN_CONNECTION_URL);}} {{ }}} {{ catch (SQLException e) }} {{ {}} {{ if (!e.getSQLState().equals("08006"))}} {{ {}} {{ LOGGER.error("Failed to shutdown database " + e, e);}} {{ }}} {{ }}}{{ deleteFolder(derbySystemFolder);}} {{ }}}{{ private static void setDerbyHome() }} {{ {}} {{ derbySystemFolder = new File (System.getProperty("user.home") + File.separator + "derby-test");}} {{ LOGGER.info("derby.system.home will be set to: " + derbySystemFolder);}} {{ }} {{ if (derbySystemFolder.exists()) }} {{ {}} {{ LOGGER.info("Folder exists, deleting");}} {{ deleteFolder(derbySystemFolder);}} {{ }}} {{ System.setProperty("derby.system.home", derbySystemFolder.getAbsolutePath());}} {{ }}}{{ private static void initDerbyDriverInstance() }} {{ {}} {{ LOGGER.info("Initalising driver");}} {{ try }} {{ {}} {{ Class.forName(DRIVER).newInstance();}} {{ }}} {{ catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) }} {{ {}} {{ LOGGER.error("Failed to init " + DRIVER + " " + e, e);}} {{ }}} {{ }}}{{ private static void deleteFolder(}} {{ final File folder) }} {{ {}} {{ LOGGER.debug("Deleting folder " + folder);}} {{ File[] files = folder.listFiles();}} {{ if (files != null) }} {{ {}} {{ for (File f : files) }} {{ {}} {{ if (f.isDirectory()) }} {{ {}} {{ deleteFolder(f);}} {{ } }} {{ else }} {{ {}} {{ LOGGER.debug("Deleting file " + f);}} {{ if (! f.delete())}} {{ {}} {{ LOGGER.warn("Failed to delete file " + f);}} {{ }}} {{ }}} {{ }}} {{ }}} {{ folder.delete();}} {{ } }} {{}}} Looks like this might be a long standing issue as I found this [StackOverflow|https://stackoverflow.com/questions/47582819/unable-to-delete-derby-system-directory-for-embedded-database] from 2017. -- This message was sent by Atlassian Jira (v8.20.10#820010)