+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.argeo.slc.lib.detached;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private ResourceLoader resourceLoader = null;
private Resource osgiFramework = null;
- private String osgibootBundleName = "org.argeo.slc.osgiboot";
+ private String osgibootBundleName = "org.argeo.osgi.boot";
private String equinoxBundleName = "org.eclipse.osgi";
private String xmlapisBundleName = "com.springsource.org.apache.xmlcommons";
private String xercesBundleName = "com.springsource.org.apache.xerces";
+ private List<String> excludeBundleNames = new ArrayList<String>();
+ private List<String> includeBundleUrls = new ArrayList<String>();
+
/**
* Required by Spring for JDK 1.4. see
* http://forum.springsource.org/showthread.php?t=74555
public DetachedLauncher() {
// Override defaults
setSynchronous(false);
- setMainClass("org.argeo.slc.osgiboot.Launcher");
+ setMainClass("org.argeo.osgi.boot.Launcher");
}
public void afterPropertiesSet() throws Exception {
StringBuffer osgiLocations = new StringBuffer("");
bundles: for (Bundle bundle : bundleContext.getBundles()) {
String name = bundle.getSymbolicName();
- String location = bundle.getLocation();
+
+ if (excludeBundleNames.contains(name)) {
+ if (log.isDebugEnabled())
+ log.debug("Exclude bundle " + name);
+ continue bundles;// skip excluded
+ }
+
+ String originalLocation = bundle.getLocation();
+ if (log.isTraceEnabled())
+ log.trace("Original location of bundle " + name + ": "
+ + originalLocation);
+ String location = removeInitialReference(originalLocation);
// Special bundles
if (osgibootBundleName.equals(name))
- getClasspath().add(findOsgiboot(bundle));
+ getClasspath().add(asResource(location));
else if (equinoxBundleName.equals(name))
continue bundles;// skip framework
else if (xmlapisBundleName.equals(name) && prependXmlJars)
- getPBootClasspath().add(asResource(bundle.getLocation()));
+ getPBootClasspath().add(asResource(location));
else if (xercesBundleName.equals(name) && prependXmlJars)
- getPBootClasspath().add(asResource(bundle.getLocation()));
+ getPBootClasspath().add(asResource(location));
if (location.startsWith("file:")) {
File file = new File(location.substring("file:".length()));
if (osgiLocations.length() != 0)
osgiLocations.append(File.pathSeparatorChar);
- osgiLocations.append(file.getPath().replace('/',
- File.separatorChar));
+ location = file.getPath().replace('/', File.separatorChar);
+ osgiLocations.append(location);
+ if (log.isTraceEnabled())
+ log.trace("Added bundle " + name
+ + " to argeo.osgi.locations: " + location);
} else {
if (osgiBundles.length() != 0)
osgiBundles.append(',');
- osgiBundles.append(location.replace('/', File.separatorChar));
+ location = location.replace('/', File.separatorChar);
+ osgiBundles.append(location);
+ if (log.isTraceEnabled())
+ log.trace("Added bundle " + name + " to osgi.bundles: "
+ + location);
}
}
+ for (String url : includeBundleUrls) {
+ if (osgiBundles.length() != 0)
+ osgiBundles.append(',');
+ osgiBundles.append(url);
+ if (log.isDebugEnabled())
+ log.debug("Include url" + url);
+ }
+
getSystemProperties().setProperty("osgi.bundles",
osgiBundles.toString());
- getSystemProperties().setProperty("slc.osgi.locations",
+ getSystemProperties().setProperty("argeo.osgi.locations",
osgiLocations.toString());
+
+ super.afterPropertiesSet();
}
- protected Resource findOsgiboot(Bundle bundle) {
- String location = bundle.getLocation();
+ protected String removeInitialReference(String location) {
if (location.startsWith("initial@reference:file:"))
location = System.getProperty("osgi.install.area")
+ location.substring("initial@reference:file:".length());
if (location.charAt(location.length() - 1) == '/')
location.substring(0, location.length() - 1);
- return asResource(location);
+ return location;
}
protected Resource asResource(String location) {
this.prependXmlJars = prependXmlJars;
}
+ public void setExcludeBundleNames(List<String> excludeBundleNames) {
+ this.excludeBundleNames = excludeBundleNames;
+ }
+
+ public void setIncludeBundleUrls(List<String> includeBundleUrls) {
+ this.includeBundleUrls = includeBundleUrls;
+ }
+
}