summaryrefslogtreecommitdiff
path: root/java/src/IceUtilInternal/FileLock.java
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2014-10-20 11:40:05 -0230
committerMatthew Newhook <matthew@zeroc.com>2014-10-20 11:40:05 -0230
commitb51469b41167fb86ae2059a15cf0475c53fdda7b (patch)
treefc85d6ca2efd89c67e1e4e7438f437c3e08313f4 /java/src/IceUtilInternal/FileLock.java
parentFixed (ICE-5695) - IceSSL: misleading exception (diff)
downloadice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.bz2
ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.xz
ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.zip
Down with ant. From the gradle to the grave.
Diffstat (limited to 'java/src/IceUtilInternal/FileLock.java')
-rw-r--r--java/src/IceUtilInternal/FileLock.java169
1 files changed, 0 insertions, 169 deletions
diff --git a/java/src/IceUtilInternal/FileLock.java b/java/src/IceUtilInternal/FileLock.java
deleted file mode 100644
index 5ff24ccf0f7..00000000000
--- a/java/src/IceUtilInternal/FileLock.java
+++ /dev/null
@@ -1,169 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-package IceUtilInternal;
-
-import java.io.File;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileChannel;
-import java.lang.reflect.Method;
-
-public final class FileLock
-{
- //
- // The constructor opens the given file (eventually creating it)
- // and acquires a lock on the file or throws FileLockException if
- // the file couldn't be locked.
- //
- // If the lock can be acquired, the Java VM name is written to the
- // file.
- //
- public FileLock(String path)
- {
- _file = new File(path);
-
- FileChannel channel;
- try
- {
- _randFile = new RandomAccessFile(_file, "rw");
- channel = _randFile.getChannel();
- }
- catch(java.io.FileNotFoundException e)
- {
- throw new IceUtil.FileLockException(path);
- }
-
- java.nio.channels.FileLock lock;
- try
- {
- lock = channel.tryLock();
- }
- catch(Exception ex)
- {
- throw new IceUtil.FileLockException(path, ex);
- }
-
- if(lock == null)
- {
- throw new IceUtil.FileLockException(path);
- }
-
- //
- // In Windows we don't write the process pid to the file, as is not posible
- // to read the file from other process while it is locked here.
- //
- if(!System.getProperty("os.name").startsWith("Windows"))
- {
- try
- {
- //
- // Java doesn't provide get pid operation. This code
- // writes the Java VM name instead of the pid.
- //
- // The output is JVM dependent. With the Sun
- // implementation it's `pid@hostname'
- //
- try
- {
- //
- // We access java.lang.management classes using reflection
- // because these classes are not available with Android
- // Dalvik JVM.
- //
- if(!System.getProperty("java.vm.name").startsWith("Dalvik"))
- {
- Class<?> fC = IceInternal.Util.findClass("java.lang.management.ManagementFactory", null);
- Class<?> mC = IceInternal.Util.findClass("java.lang.management.RuntimeMXBean", null);
-
- Method getRuntimeMXBean = fC.getDeclaredMethod("getRuntimeMXBean", (Class<?>[])null);
-
- Method getName = mC.getDeclaredMethod("getName", (Class<?>[])null);
-
- Object mxBean = getRuntimeMXBean.invoke(null);
- _randFile.writeUTF((String)getName.invoke(mxBean));
- }
- else
- {
- //
- // In Android with Dalvik we can use android.os.Process to get the
- // process pid. That is done using reflection because it is specific
- // for Android Dalvik VM.
- //
- Class<?> pC = IceInternal.Util.findClass("android.os.Process", null);
- Method myPid = pC.getDeclaredMethod("myPid", (Class<?>[])null);
- _randFile.writeUTF(((Integer)myPid.invoke(null)).toString());
- }
- }
- catch(NoSuchMethodException ex)
- {
- }
- catch(IllegalAccessException ex)
- {
- }
- catch(java.lang.reflect.InvocationTargetException ex)
- {
- }
- //
- // Don't close _randFile here or the lock will be released. It is called
- // during release see comments there.
- //
- }
- catch(java.io.IOException ex)
- {
- release();
- throw new IceUtil.FileLockException(path, ex);
- }
- }
- }
-
- //
- // Remove the lock if it is owned by the class instance.
- //
- public void release()
- {
- if(System.getProperty("os.name").startsWith("Windows"))
- {
- if(_randFile != null)
- {
- //
- // In Windows we need to close the file handler before
- // we try to delete the file. Note that the call to close
- // also release the file lock.
- //
- try
- {
- _randFile.close();
- }
- catch(java.io.IOException ex)
- {
- }
- _randFile = null;
- }
- }
- //
- // on UNIX the call to delete remove the file and that
- // release the lock.
- //
- // In Windows the call to delete will success if at that point
- // the file has not been opened by any process.
- //
- if(_file != null)
- {
- _file.delete();
- _file = null;
- }
- }
-
- //
- // We need to keep these refrences to delete the lock file during release
- //
- private File _file;
- private RandomAccessFile _randFile;
-
-}