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;
private DatabaseUserAgent userAgent;
- private FileChannel lockFileChannel;
+ private RandomAccessFile raLockFile;
private FileLock lock;
@Override
public synchronized void start() throws ProCoreException {
try {
- try {
- lockFileChannel = lockFile.getFileSystem().provider().newFileChannel(lockFile,
- EnumSet.of(StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE));
- } catch (FileAlreadyExistsException e) {
- throw new ProCoreException("The database in folder " + folder.toAbsolutePath() + " is already in use!", e);
- }
-
- 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);
}
}
try {
safeLoggingClose(lock, lockFile);
lock = null;
- safeLoggingClose(lockFileChannel, lockFile);
- lockFileChannel = null;
+ safeLoggingClose(raLockFile, lockFile);
+ raLockFile = null;
Files.deleteIfExists(lockFile);
isRunning = false;
} catch (IOException e) {