Applied patch (FELIX-920) to add a configuration option to only install
bundles, instead of always starting them too.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@742566 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
index c77b044..4082db0 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
@@ -20,7 +20,7 @@
/**
* -DirectoryWatcher-
- *
+ *
* This class runs a background task that checks a directory for new files or
* removed files. These files can be configuration files or jars.
*/
@@ -38,9 +38,12 @@
public final static String POLL = "felix.fileinstall.poll";
public final static String DIR = "felix.fileinstall.dir";
public final static String DEBUG = "felix.fileinstall.debug";
+ public final static String START_NEW_BUNDLES =
+ "felix.fileinstall.bundles.new.start";
File watchedDirectory;
long poll = 2000;
long debug;
+ boolean startBundles = true; // by default, we start bundles.
BundleContext context;
boolean reported;
@@ -58,12 +61,17 @@
}
this.watchedDirectory = new File(dir);
this.watchedDirectory.mkdirs();
+ Object value = properties.get(START_NEW_BUNDLES);
+ if (value != null)
+ {
+ startBundles = Boolean.parseBoolean((String) value);
+ }
}
/**
* Main run loop, will traverse the directory, and then handle the delta
* between installed and newly found/lost bundles and configurations.
- *
+ *
*/
public void run()
{
@@ -98,7 +106,7 @@
/**
* Handle the changes between the configurations already installed and the
* newly found/lost configurations.
- *
+ *
* @param current
* Existing installed configurations abspath -> File
* @param discovered
@@ -164,7 +172,7 @@
/**
* Set the configuration based on the config file.
- *
+ *
* @param f
* Configuration file
* @return
@@ -207,7 +215,7 @@
/**
* Remove the configuration.
- *
+ *
* @param f
* File where the configuration in whas defined.
* @return
@@ -269,7 +277,7 @@
/**
* Install bundles that were discovered and uninstall bundles that are gone
* from the current state.
- *
+ *
* @param current
* A map location -> path that holds the current state
* @param discovered
@@ -319,9 +327,11 @@
}
// Fragments can not be started. All other
- // bundles are always started because OSGi treats this
+ // bundles are started only if user has asked us to
+ // start bundles. No need to check status of bundles
+ // before starting, because OSGi treats this
// as a noop when the bundle is already started
- if (!isFragment(bundle))
+ if (startBundles && !isFragment(bundle))
{
try
{
@@ -335,11 +345,10 @@
}
else
{
- // Hmm. We found a bundlethat looks like it came from our
+ // Hmm. We found a bundle that looks like it came from our
// watched directory but we did not find it this round.
// Just remove it.
- if (bundle.getLocation().startsWith(
- watchedDirectory.getAbsolutePath()))
+ if (bundle.getLocation().startsWith(watchedDirectory.getAbsolutePath()))
{
try
{
@@ -365,12 +374,13 @@
InputStream in = new FileInputStream(file);
Bundle bundle = context.installBundle(path, in);
in.close();
-
- // We do not start this bundle yet. We wait after
- // refresh because this will minimize the disruption
- // as well as temporary unresolved errors.
- starters.add(bundle);
-
+ if (startBundles)
+ {
+ // We do not start this bundle yet. We wait after
+ // refresh because this will minimize the disruption
+ // as well as temporary unresolved errors.
+ starters.add(bundle);
+ }
log("Installed " + file.getAbsolutePath(), null);
}
catch (Exception e)
@@ -403,7 +413,7 @@
/**
* Log a message and optional throwable. If there is a log service we use
* it, otherwise we log to the console
- *
+ *
* @param message
* The message to log
* @param e
@@ -435,7 +445,7 @@
/**
* Answer the Log Service
- *
+ *
* @return
*/
LogService getLogService()
@@ -452,7 +462,7 @@
/**
* Traverse the directory and fill the map with the found jars and
* configurations keyed by the abs file path.
- *
+ *
* @param jars
* Returns the abspath -> file for found jars
* @param configs
@@ -479,7 +489,7 @@
/**
* Check if a bundle is a fragment.
- *
+ *
* @param bundle
* @return
*/
@@ -525,7 +535,7 @@
/**
* Answer the long from a property.
- *
+ *
* @param property
* @param dflt
* @return
@@ -559,4 +569,4 @@
// Ignore
}
}
-}
+}
\ No newline at end of file