package org.argeo.slc.jemmytest; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.felix.framework.Felix; import org.apache.felix.framework.cache.BundleCache; import org.apache.felix.framework.util.FelixConstants; import org.apache.felix.framework.util.StringMap; import org.apache.felix.main.AutoActivator; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; public class Main { /** * @param args */ public static void main(String[] args) { try { // Create a temporary bundle cache directory and // make sure to clean it up on exit. final File cachedir = File.createTempFile( "felix.example.servicebased", null); cachedir.delete(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { deleteFileOrDir(cachedir); } }); String mavenBase = "file:/home/mbaudier/.m2/repository/"; Map configMap = new StringMap(false); configMap .put( Constants.FRAMEWORK_SYSTEMPACKAGES, "org.osgi.framework; version=1.4.0," + "org.osgi.service.packageadmin; version=1.2.0," + "org.osgi.service.startlevel; version=1.1.0," + "org.osgi.service.url; version=1.0.0," + "org.osgi.util.tracker; version=1.3.3," /*+ "org.apache.felix.example.servicebased.host.service; version=1.0.0,"*/ + "javax.swing"); configMap .put( AutoActivator.AUTO_START_PROP + ".1", mavenBase + "org/apache/felix/org.apache.felix.shell/1.0.2/org.apache.felix.shell-1.0.2.jar " + mavenBase + "org/apache/felix/org.apache.felix.shell.tui/1.0.2/org.apache.felix.shell.tui-1.0.2.jar " + mavenBase + "org/argeo/dep/jemmy/org.argeo.dep.jemmy.nb61/0.2.0/org.argeo.dep.jemmy.nb61-0.2.0.jar " + mavenBase + "org/argeo/slc/org.argeo.slc.autoui/0.10.3-SNAPSHOT/org.argeo.slc.autoui-0.10.3-SNAPSHOT.jar"); configMap.put(FelixConstants.LOG_LEVEL_PROP, "1"); configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, cachedir .getAbsolutePath()); // Create list to hold custom framework activators. List list = new ArrayList(); // Add activator to process auto-start/install properties. list.add(new AutoActivator(configMap)); // Add our own activator. list.add(new JemmyTestActivator()); BundleContext context = null; try { // Now create an instance of the framework. Felix felix = new Felix(configMap, list); felix.start(); context = felix.getBundleContext(); // Bundle jemmyTestBundle = context // .installBundle(mavenBase // + // "org/argeo/slc/sandbox/org.argeo.slc.sandbox.jemmytest/0.1.1-SNAPSHOT/org.argeo.slc.sandbox.jemmytest-0.1.1-SNAPSHOT.jar"); // jemmyTestBundle.start(); } catch (Exception ex) { System.err.println("Could not create framework: " + ex); ex.printStackTrace(); System.exit(-1); } // ServiceReference ref = context // .getServiceReference("org.argeo.slc.autoui.AutoUiApplication"); ServiceReference ref = context .getServiceReference("java.lang.Runnable"); Object service = context.getService(ref); JemmyTestActivator.stdOut("service=" + service.getClass()); Runnable app = (Runnable) service; app.run(); // app.execute(null); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } // Felix felix; // // JemmyTestActivator activator; // // // 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, "target/cache"); // // try { // // Create host activator; // // activator = new JemmyTestActivator(); // List list = new ArrayList(); // // list.add(activator); // list.add(new Activator()); // list.add(new org.apache.felix.shell.impl.Activator()); // list.add(new org.apache.felix.bundlerepository.Activator()); // // // Now create an instance of the framework with // // our configuration properties and activator. // felix = new Felix(configMap, list); // // // Now start Felix instance. // felix.start(); // // Bundle jemmyBundle = felix // .getBundleContext() // .installBundle( // "file:/home/mbaudier/.m2/repository/org/argeo/dep/jemmy/org.argeo.dep.jemmy.nb61/0.2.0/org.argeo.dep.jemmy.nb61-0.2.0.jar"); // jemmyBundle.start(); // // // // Bundle autoUiBundle = felix // // .getBundleContext() // // .installBundle( // // // "reference:file:/home/mbaudier/dev/src/slc/org.argeo.slc.autoui/"); // // autoUiBundle.start(); // // Bundle[] bundles = felix.getBundleContext().getBundles(); // for (int i = 0; i < bundles.length; i++) { // Bundle bundle = bundles[i]; // System.out.println("" + bundle.getBundleId() + "\t" // + bundle.getSymbolicName() + "\t" + bundle.getState() // + "\t" + bundle.getLocation()); // } // // // felix.stop(); // } catch (Exception ex) { // System.err.println("Could not create framework: " + ex); // ex.printStackTrace(); // } // } /** * Utility method used to delete the profile directory when run as a * stand-alone application. * * @param file * The file to recursively delete. */ private static void deleteFileOrDir(File file) { if (file.isDirectory()) { File[] childs = file.listFiles(); for (int i = 0; i < childs.length; i++) { deleteFileOrDir(childs[i]); } } file.delete(); } }