X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2Finternal%2FAcornDatabase.java;h=a423fbdbe23b815871688fb17cb2c6fb165550f7;hp=db83f1395d005babeb09dbd500f5034d2326f503;hb=25c9cc192b2611646b0a476bf205484500e92997;hpb=4881fb88d55e80473a6f3117b0d0b8265a3b66b2 diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/internal/AcornDatabase.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/internal/AcornDatabase.java index db83f1395..a423fbdbe 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/internal/AcornDatabase.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/internal/AcornDatabase.java @@ -2,16 +2,14 @@ package org.simantics.acorn.internal; import java.io.File; import java.io.IOException; -import java.nio.channels.FileChannel; +import java.io.RandomAccessFile; import java.nio.channels.FileLock; import java.nio.file.DirectoryStream; -import java.nio.file.FileAlreadyExistsException; import java.nio.file.FileVisitOption; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; -import java.nio.file.StandardOpenOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.EnumSet; import java.util.Properties; @@ -41,7 +39,7 @@ public class AcornDatabase implements Database { private DatabaseUserAgent userAgent; - private FileChannel lockFileChannel; + private RandomAccessFile raLockFile; private FileLock lock; @@ -119,19 +117,17 @@ public class AcornDatabase implements Database { @Override public synchronized void start() throws ProCoreException { try { - lockFileChannel = lockFile.getFileSystem().provider().newFileChannel(lockFile, - EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.WRITE)); - - lock = lockFileChannel.tryLock(); + raLockFile = new RandomAccessFile(lockFile.toFile(), "rw"); + lock = raLockFile.getChannel().tryLock(); if (lock == null) { - safeLoggingClose(lockFileChannel, lockFile); + safeLoggingClose(raLockFile, lockFile); throw new ProCoreException("The database in folder " + folder.toAbsolutePath() + " is already in use!"); } - isRunning = true; } catch (IOException e) { LOGGER.error("Failed to start database at " + folder.toAbsolutePath(), e); - safeLoggingClose(lockFileChannel, lockFile); + safeLoggingClose(raLockFile, lockFile); + throw new ProCoreException("Failed to start database at " + folder.toAbsolutePath(), e); } } @@ -147,8 +143,8 @@ public class AcornDatabase implements Database { try { safeLoggingClose(lock, lockFile); lock = null; - safeLoggingClose(lockFileChannel, lockFile); - lockFileChannel = null; + safeLoggingClose(raLockFile, lockFile); + raLockFile = null; Files.deleteIfExists(lockFile); isRunning = false; } catch (IOException e) {