DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
| Code Block |
|---|
public class Felix extends AbstractBundle
{
public Felix(MutablePropertyResolverMap configMutableconfigMutableMap, List activatorList);
public void stopAndWait();
}
|
...
| Code Block |
|---|
public static void main(String[] argv) throws Exception
{
// (1) Load system properties.
Main.loadSystemProperties();
// (2) Read configuration properties.
Properties configProps = Main.loadConfigProperties();
// (3) Copy framework properties from the system properties.
Main.copySystemProperties(configProps);
// (4) See if the profile name property was specified.
String profileName = configProps.getProperty(BundleCache.CACHE_PROFILE_PROP);
// (4) See if the profile directory property was specified.
String profileDirName = configProps.getProperty(BundleCache.CACHE_PROFILE_DIR_PROP);
// Print welcome banner.
System.out.println("\nWelcome to Felix.");
System.out.println("=================\n");
// (5) If no profile or profile directory is specified in the
// properties, then ask for a profile name.
if ((profileName == null) && (profileDirName == null))
{
System.out.print("Enter profile name: ");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try
{
profileName = in.readLine();
}
catch (IOException ex)
{
System.err.println("Could not read input.");
System.exit(-1);
}
System.out.println("");
if (profileName.length() != 0)
{
configProps.setProperty(BundleCache.CACHE_PROFILE_PROP, profileName);
}
}
// (6) A profile directory or name must be specified.
if ((profileDirName == null) && (profileName.length() == 0))
{
System.err.println("You must specify a profile name or directory.");
System.exit(-1);
}
try
{
// (7) Now create an instance of the framework.
m_felix = new Felix(
new MutablePropertyResolverImpl(
new StringMap(configProps, false)),
null);
m_felix.start();
}
catch (Exception ex)
{
System.err.println("Could not create framework: " + ex);
ex.printStackTrace();
System.exit(-1);
}
}
|
...
| Code Block |
|---|
package example; import java.util.Map; import org.osgi.framework.Constants; import org.apache.felix.framework.Felix; import org.apache.felix.framework.cache.BundleCache; import org.apache.felix.framework.util.MutablePropertyResolverImpl; import org.apache.felix.framework.util.StringMap; import org.apache.felix.framework.util.FelixConstants; public class Main { private static Felix m_felix = null; public static void main(String[] argv) throws Exception { // Print welcome banner. System.out.println("\nWelcome to Felix."); System.out.println("=================\n"); Map configMap = new StringMap(false); 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(FelixConstants.AUTO_START_PROP + ".1", "file:bundle/org.apache.felix.shell-1.0.0.jar " + "file:bundle/org.apache.felix.shell.tui-1.0.0.jar"); configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache"); try { // Now create an instance of the framework. m_felix = new Felix( new MutablePropertyResolverImpl(configMap), null); m_felix.start(); } catch (Exception ex) { System.err.println("Could not create framework: " + ex); ex.printStackTrace(); System.exit(-1); } } } |
...
| Code Block |
|---|
m_felix = new Felix(
new MutablePropertyResolverImpl(configMap),
configMap, null);
m_felix.start();
|
The last steps create the framework instance and start it. The configuration property map is converted to an instance of a PropertyResolver before being passed into the Felix constructor.
...
| Code Block |
|---|
public class HostApplication
{
private HostActivator m_activator = null;
private Felix m_felix = null;
public HostApplication()
{
// 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");
// Explicitly specify the directory to use for caching bundles.
configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache");
try
{
// Create host activator;
m_activator = new HostActivator();
List list = new ArrayList();
list.add(m_activator);
// Now create an instance of the framework with
// our configuration properties and activator.
m_felix = new Felix(
new MutablePropertyResolverImpl(configMap),
list);
// Now start Felix instance.
m_felix.start();
}
catch (Exception ex)
{
System.err.println("Could not create framework: " + ex);
ex.printStackTrace();
}
}
public Bundle[] getInstalledBundles()
{
// Use the system bundle activator to gain external
// access to the set of installed bundles.
return m_activator.getBundles();
}
public void shutdownApplication()
{
// Shut down the felix framework when stopping the
// host application.
m_felix.shutdown();
}
}
|
...
| Code Block |
|---|
package host.core; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import host.service.lookup.Lookup; import org.apache.felix.framework.Felix; import org.apache.felix.framework.util.FelixConstants; import org.apache.felix.framework.util.StringMap; import org.apache.felix.framework.util.MutablePropertyResolverImpl; import org.apache.felix.framework.cache.BundleCache; public class HostApplication { private HostActivator m_activator = null; private Felix m_felix = null; private Map m_lookupMap = new HashMap(); public HostApplication() { // Initialize the map for the property lookup service. m_lookupMap.put("name1", "value1"); m_lookupMap.put("name2", "value2"); m_lookupMap.put("name3", "value3"); m_lookupMap.put("name4", "value4"); // 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 the host provided service interface package and the 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," + "host.service.lookup; version=1.0.0"); // Explicitly specify the directory to use for caching bundles. configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache"); try { // Create host activator; m_activator = new HostActivator(m_lookupMap); List list = new ArrayList(); list.add(m_activator); // Now create an instance of the framework with // our configuration properties and activator. m_felix = new Felix( new MutablePropertyResolverImpl(configMap), list); // Now start Felix instance. m_felix.start(); } catch (Exception ex) { System.err.println("Could not create framework: " + ex); ex.printStackTrace(); } } public void shutdownApplication() { // Shut down the felix framework when stopping the // host application. m_felix.shutdown(); } } |
...
| Code Block |
|---|
package host.core; import java.util.List; import java.util.ArrayList; import java.util.Map; import host.service.command.Command; import org.apache.felix.framework.Felix; import org.apache.felix.framework.util.FelixConstants; import org.apache.felix.framework.util.StringMap; import org.apache.felix.framework.util.MutablePropertyResolverImpl; import org.apache.felix.framework.cache.BundleCache; import org.osgi.util.tracker.ServiceTracker; public class HostApplication { private HostActivator m_activator = null; private Felix m_felix = null; private ServiceTracker m_tracker = null; public HostApplication() { // 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 the bundle provided service interface package and the 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," + "host.service.command; version=1.0.0"); // Explicitly specify the directory to use for caching bundles. configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache"); try { // Create host activator; m_activator = new HostActivator(m_lookupMap); List list = new ArrayList(); list.add(m_activator); // Now create an instance of the framework with // our configuration properties and activator. m_felix = new Felix( new MutablePropertyResolverImpl(configMap), list); // Now start Felix instance. m_felix.start(); } catch (Exception ex) { System.err.println("Could not create framework: " + ex); ex.printStackTrace(); } m_tracker = new ServiceTracker( m_activator.getContext(), Command.class.getName(), null); m_tracker.open(); } public boolean execute(String name, String commandline) { // See if any of the currently tracked command services // match the specified command name, if so then execute it. Object[] services = m_tracker.getServices(); for (int i = 0; (services != null) && (i < services.length); i++) { try { if (((Command) services[i]).getName().equals(name)) { return ((Command) services[i]).execute(commandline); } } catch (Exception ex) { // Since the services returned by the tracker could become // invalid at any moment, we will catch all exceptions, log // a message, and then ignore faulty services. System.err.println(ex); } } return false; } public void shutdownApplication() { // Shut down the felix framework when stopping the // host application. m_felix.shutdown(); } } |
...