| /* |
| * Copyright (c) 2004-2009 QOS.ch All rights reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| * SOFTWARE. |
| */ |
| package org.slf4j.test_osgi; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Properties; |
| |
| import org.apache.felix.framework.Felix; |
| import org.apache.felix.framework.util.FelixConstants; |
| import org.apache.felix.framework.util.StringMap; |
| import org.apache.felix.main.AutoProcessor; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.BundleException; |
| import org.osgi.framework.Constants; |
| |
| /** |
| * Runs a hosted version of Felix for testing purposes. Any bundle errors are |
| * reported via the FrameworkListener passed to the constructor. |
| * |
| * @author Ceki Gücü |
| */ |
| public class FelixHost { |
| |
| private Felix felix = null; |
| |
| Properties otherProps = new Properties(); |
| |
| final FrameworkErrorListener frameworkErrorListener; |
| final CheckingBundleListener myBundleListener; |
| |
| public FelixHost(FrameworkErrorListener frameworkErrorListener, |
| CheckingBundleListener myBundleListener) { |
| this.frameworkErrorListener = frameworkErrorListener; |
| this.myBundleListener = myBundleListener; |
| } |
| |
| public void doLaunch() { |
| // Create a case-insensitive configuration property map. |
| Map configMap = new StringMap(false); |
| // Configure the Felix instance to be embedded. |
| // configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true"); |
| // Add core OSGi packages to be exported from the class path |
| // via the system bundle. |
| configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES, |
| "org.osgi.framework; version=1.3.0," |
| + "org.osgi.service.packageadmin; version=1.2.0," |
| + "org.osgi.service.startlevel; version=1.0.0," |
| + "org.osgi.service.url; version=1.0.0"); |
| |
| configMap.put(Constants.FRAMEWORK_STORAGE_CLEAN, |
| Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); |
| |
| // Explicitly specify the directory to use for caching bundles. |
| // configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache"); |
| |
| try { |
| // Create host activator; |
| |
| List list = new ArrayList(); |
| |
| // list.add(new HostActivator()); |
| configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, |
| "org.xml.sax, org.xml.sax.helpers, javax.xml.parsers, javax.naming"); |
| configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list); |
| configMap.put("felix.log.level", "4"); |
| |
| // Now create an instance of the framework with |
| // our configuration properties and activator. |
| felix = new Felix(configMap); |
| felix.init(); |
| |
| // otherProps.put(Constants.FRAMEWORK_STORAGE, "bundles"); |
| |
| otherProps.put(AutoProcessor.AUTO_DEPLOY_DIR_PROPERY, |
| AutoProcessor.AUTO_DEPLOY_DIR_VALUE); |
| otherProps.put(AutoProcessor.AUTO_DEPLOY_ACTION_PROPERY, |
| AutoProcessor.AUTO_DEPLOY_START_VALUE + "," |
| + AutoProcessor.AUTO_DEPLOY_INSTALL_VALUE); |
| |
| BundleContext felixBudleContext = felix.getBundleContext(); |
| |
| AutoProcessor.process(otherProps, felixBudleContext); |
| // listen to errors |
| felixBudleContext.addFrameworkListener(frameworkErrorListener); |
| felixBudleContext.addBundleListener(myBundleListener); |
| // Now start Felix instance. |
| felix.start(); |
| System.out.println("felix started"); |
| |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| } |
| } |
| |
| public void stop() throws BundleException { |
| felix.stop(); |
| } |
| |
| public Bundle[] getInstalledBundles() { |
| // Use the system bundle activator to gain external |
| // access to the set of installed bundles. |
| return null;// m_activator.getBundles(); |
| } |
| } |