1 12 package org.eclipse.core.runtime.internal.adaptor; 13 14 import java.io.*; 15 import java.nio.channels.FileLock ; 16 import java.nio.channels.OverlappingFileLockException ; 17 import org.eclipse.osgi.util.NLS; 18 19 22 public class Locker_JavaNio implements Locker { 23 private File lockFile; 24 private FileLock fileLock; 25 private RandomAccessFile raFile; 26 27 public Locker_JavaNio(File lockFile) { 28 this.lockFile = lockFile; 29 } 30 31 public synchronized boolean lock() throws IOException { 32 raFile = new RandomAccessFile(lockFile, "rw"); try { 34 fileLock = raFile.getChannel().tryLock(); 35 } catch (IOException ioe) { 36 if (BasicLocation.DEBUG) 38 System.out.println(NLS.bind(EclipseAdaptorMsg.location_cannotLock, lockFile)); 39 String specificMessage = NLS.bind(EclipseAdaptorMsg.location_cannotLockNIO, new Object [] {lockFile, ioe.getMessage(), "\"-D" + BasicLocation.PROP_OSGI_LOCKING + "=none\""}); throw new IOException(specificMessage); 42 } catch (OverlappingFileLockException e) { 43 fileLock = null; 45 } finally { 46 if (fileLock != null) 47 return true; 48 raFile.close(); 49 raFile = null; 50 } 51 return false; 52 } 53 54 public synchronized void release() { 55 if (fileLock != null) { 56 try { 57 fileLock.release(); 58 } catch (IOException e) { 59 } 61 fileLock = null; 62 } 63 if (raFile != null) { 64 try { 65 raFile.close(); 66 } catch (IOException e) { 67 } 69 raFile = null; 70 } 71 } 72 } 73 | Popular Tags |