summaryrefslogtreecommitdiff
path: root/java/src/IceUtilInternal/FileLock.java
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2013-07-04 14:55:55 +0200
committerJose <jose@zeroc.com>2013-07-04 14:55:55 +0200
commita389f9ab232809518f35d73b4371bb50302cd444 (patch)
tree5ace0bacb79db48dfdca127bc58b48537c752b67 /java/src/IceUtilInternal/FileLock.java
parentFixed ICE-5362 - RPATH incorrect for OS X (diff)
downloadice-a389f9ab232809518f35d73b4371bb50302cd444.tar.bz2
ice-a389f9ab232809518f35d73b4371bb50302cd444.tar.xz
ice-a389f9ab232809518f35d73b4371bb50302cd444.zip
ICE-5340 - Fix updates
Diffstat (limited to 'java/src/IceUtilInternal/FileLock.java')
-rw-r--r--java/src/IceUtilInternal/FileLock.java49
1 files changed, 40 insertions, 9 deletions
diff --git a/java/src/IceUtilInternal/FileLock.java b/java/src/IceUtilInternal/FileLock.java
index 6a540a48f86..cdac5522cce 100644
--- a/java/src/IceUtilInternal/FileLock.java
+++ b/java/src/IceUtilInternal/FileLock.java
@@ -15,6 +15,8 @@ import java.io.FileWriter;
import java.nio.channels.FileChannel;
import java.nio.channels.OverlappingFileLockException;
+import java.lang.reflect.Method;
+
public final class FileLock
{
//
@@ -70,23 +72,52 @@ public final class FileLock
// The output is JVM dependent. With the Sun
// implementation it's `pid@hostname'
//
- Class<?> fC = IceInternal.Util.findClass("java.lang.management.ManagementFactory", null);
- Class<?> mC = IceInternal.Util.findClass("java.lang.management.RuntimeMXBean", null);
-
- java.lang.reflect.Method getRuntimeMXBean = fC.getDeclaredMethod("getRuntimeMXBean", (Class<?>[])null);
-
- java.lang.reflect.Method getName = mC.getDeclaredMethod("getName", (Class<?>[])null);
+ 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);
- Object mxBean = getRuntimeMXBean.invoke(null);
+ Method getRuntimeMXBean = fC.getDeclaredMethod("getRuntimeMXBean", (Class<?>[])null);
- _randFile.writeUTF((String)getName.invoke(mxBean));
+ 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.lang.Exception ex)
+ catch(java.io.IOException ex)
{
release();
throw new IceUtil.FileLockException(path, ex);