You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/11/06 00:44:58 UTC
svn commit: r711745 -
/servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java
Author: gnodet
Date: Wed Nov 5 15:44:57 2008
New Revision: 711745
URL: http://svn.apache.org/viewvc?rev=711745&view=rev
Log:
SMX4KNL-130: Support configurable lock directory for container level locking (patch submitted by Jamie Goodyear)
Modified:
servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java
Modified: servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java?rev=711745&r1=711744&r2=711745&view=diff
==============================================================================
--- servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java (original)
+++ servicemix/smx4/kernel/trunk/main/src/main/java/org/apache/servicemix/kernel/main/SimpleFileLock.java Wed Nov 5 15:44:57 2008
@@ -26,12 +26,23 @@
public class SimpleFileLock implements Lock {
+ private static final String PROPERTY_LOCK_DIR = "servicemix.lock.dir";
+ private static final String PROP_SERVICEMIX_BASE = "servicemix.base";
private RandomAccessFile lockFile;
private FileLock lock;
public SimpleFileLock(Properties props) {
try {
- File base = new File(props.getProperty("servicemix.base"));
+ String lock = props.getProperty(PROPERTY_LOCK_DIR);
+
+ if (lock != null) {
+ File servicemixLock = getServiceMixLock(new File(lock), props);
+ props.setProperty(PROPERTY_LOCK_DIR, servicemixLock.getPath());
+ } else {
+ props.setProperty(PROPERTY_LOCK_DIR, System.getProperty(PROP_SERVICEMIX_BASE));
+ }
+
+ File base = new File(props.getProperty(PROPERTY_LOCK_DIR));
lockFile = new RandomAccessFile(new File(base, "lock"), "rw");
} catch (IOException e) {
throw new RuntimeException("Could not create file lock", e);
@@ -52,4 +63,42 @@
}
lock = null;
}
+
+ private static File getServiceMixLock(File lock,Properties props) {
+ File rc = null;
+
+ String path = lock.getPath();
+ if (path != null) {
+ rc = validateDirectoryExists(path, "Invalid " + PROPERTY_LOCK_DIR + " system property");
+ }
+
+ if (rc == null) {
+ path = props.getProperty(PROP_SERVICEMIX_BASE);
+ if (path != null) {
+ rc = validateDirectoryExists(path, "Invalid " + PROP_SERVICEMIX_BASE + " property");
+ }
+ }
+
+ if (rc == null) {
+ rc = lock;
+ }
+ return rc;
+ }
+
+ private static File validateDirectoryExists(String path, String errPrefix) {
+ File rc;
+ try {
+ rc = new File(path).getCanonicalFile();
+ } catch (IOException e) {
+ throw new IllegalArgumentException(errPrefix + " '" + path + "' : " + e.getMessage());
+ }
+ if (!rc.exists()) {
+ throw new IllegalArgumentException(errPrefix + " '" + path + "' : does not exist");
+ }
+ if (!rc.isDirectory()) {
+ throw new IllegalArgumentException(errPrefix + " '" + path + "' : is not a directory");
+ }
+ return rc;
+ }
+
}