in main/src/main/java/org/apache/servicemix/kernel/main/Main.java [443:573]
private static void processAutoProperties(BundleContext context) {
// Check if we want to convert URLs to maven style
boolean convertToMavenUrls = Boolean.parseBoolean(m_configProps.getProperty(PROPERTY_CONVERT_TO_MAVEN_URL, "true"));
// Retrieve the Start Level service, since it will be needed
// to set the start level of the installed bundles.
StartLevel sl = (StartLevel) context.getService(
context.getServiceReference(org.osgi.service.startlevel.StartLevel.class.getName()));
// The auto-install property specifies a space-delimited list of
// bundle URLs to be automatically installed into each new profile;
// the start level to which the bundles are assigned is specified by
// appending a ".n" to the auto-install property name, where "n" is
// the desired start level for the list of bundles.
for (Iterator i = m_configProps.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
// Ignore all keys that are not the auto-install property.
if (!key.startsWith(PROPERTY_AUTO_INSTALL)) {
continue;
}
// If the auto-install property does not have a start level,
// then assume it is the default bundle start level, otherwise
// parse the specified start level.
int startLevel = sl.getInitialBundleStartLevel();
if (!key.equals(PROPERTY_AUTO_INSTALL)) {
try {
startLevel = Integer.parseInt(key.substring(key.lastIndexOf('.') + 1));
}
catch (NumberFormatException ex) {
System.err.println("Invalid property: " + key);
}
}
StringTokenizer st = new StringTokenizer(m_configProps.getProperty(key), "\" ", true);
if (st.countTokens() > 0) {
String location = null;
do {
location = nextLocation(st);
if (location != null) {
try {
String[] parts = convertToMavenUrlsIfNeeded(location, convertToMavenUrls);
Bundle b = context.installBundle(parts[0], new URL(parts[1]).openStream());
sl.setBundleStartLevel(b, startLevel);
}
catch (Exception ex) {
System.err.println("Auto-properties install: " + ex);
}
}
}
while (location != null);
}
}
// The auto-start property specifies a space-delimited list of
// bundle URLs to be automatically installed and started into each
// new profile; the start level to which the bundles are assigned
// is specified by appending a ".n" to the auto-start property name,
// where "n" is the desired start level for the list of bundles.
// The following code starts bundles in two passes, first it installs
// them, then it starts them.
for (Iterator i = m_configProps.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
// Ignore all keys that are not the auto-start property.
if (!key.startsWith(PROPERTY_AUTO_START)) {
continue;
}
// If the auto-start property does not have a start level,
// then assume it is the default bundle start level, otherwise
// parse the specified start level.
int startLevel = sl.getInitialBundleStartLevel();
if (!key.equals(PROPERTY_AUTO_START)) {
try {
startLevel = Integer.parseInt(key.substring(key.lastIndexOf('.') + 1));
}
catch (NumberFormatException ex) {
System.err.println("Invalid property: " + key);
}
}
StringTokenizer st = new StringTokenizer(m_configProps.getProperty(key), "\" ", true);
if (st.countTokens() > 0) {
String location = null;
do {
location = nextLocation(st);
if (location != null) {
try {
String[] parts = convertToMavenUrlsIfNeeded(location, convertToMavenUrls);
Bundle b = context.installBundle(parts[0], new URL(parts[1]).openStream());
sl.setBundleStartLevel(b, startLevel);
}
catch (Exception ex) {
System.err.println("Auto-properties install:" + ex);
}
}
}
while (location != null);
}
}
// Now loop through and start the installed bundles.
for (Iterator i = m_configProps.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
if (key.startsWith(PROPERTY_AUTO_START)) {
StringTokenizer st = new StringTokenizer(m_configProps.getProperty(key), "\" ", true);
if (st.countTokens() > 0) {
String location = null;
do {
location = nextLocation(st);
if (location != null) {
// Installing twice just returns the same bundle.
try {
String[] parts = convertToMavenUrlsIfNeeded(location, convertToMavenUrls);
Bundle b = context.installBundle(parts[0], new URL(parts[1]).openStream());
if (b != null) {
b.start();
}
}
catch (Exception ex) {
System.err.println("Auto-properties start: " + ex);
}
}
}
while (location != null);
}
}
}
}