You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Miguel Matos <ra...@gmail.com> on 2008/04/09 21:19:56 UTC

ClassLoading problems with Felix embed in a bundle ...

Hello!
I am trying to embed Felix  as a bundle. This is related to some issues 
that I want to solve but the problem is not here.

I followed the wiki about how to embed Felix and everything gone fine, 
i.e, my app is running the way I want.

However as I say I need to embed Felix as an OSGi bundle but I'm having 
the (classical) classloading problems.


Basicaly I built a simple bundle in whose Activator I do all the 
necessary steps to embed Felix as in the tutorial.
To this point everything goes fine.
But I also want to export some services through the system bundle. To do 
this I register a simple service within the embed Felix Activator, and 
adjust the manifest
accordingly.

However when I try to start a bundle in the embed Felix (not in the 
"main instance") that uses the exported service it fails with a 
classnotfoundexception as show below:
(Lines with #### are comments made by me right now)

-> vgw start file:/tmp/hw.jar
Hello World...
####Checking for all services
BundleSystem Bundle
        Property objectClass            
org.osgi.service.startlevel.StartLevel
        Property service.id  -> 1
BundleSystem Bundle
        Property objectClass            
org.osgi.service.packageadmin.PackageAdmin
        Property service.id  -> 2
BundleSystem Bundle
        Property myey  -> myalue
####My service is here!!!!
        Property objectClass            voc.vh.iface.Lookup
        Property service.id  -> 3
#### This is the class of the service object retrieved with 
BundleContext#getService(...)
O is voc.vh.LookupImpl@a761fe
#### This are the interfaces implemented by the above object
EC isClazz: voc.vh.iface.Lookup
#### This is the result of invoking a method into the obtained object 
through reflection
Hello BLA BLA
#### And those are the exceptions obtained when I try to cast the 
obtained object to its interface
org.osgi.framework.BundleException: Activator start error.
        at org.apache.felix.framework.Felix._startBundle(Felix.java:1652)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1542)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:369)
        at 
voc.vh.HostApplication.startVirtualizedApplication(HostApplication.java:120)
        at voc.vh.HostApplication.execute(HostApplication.java:171)
        at 
org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:276)
        at 
org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:180)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoClassDefFoundError: voc/vh/iface/Lookup
        at voc.tt.HelloWorld.start(HelloWorld.java:81)
        at 
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:591)
        at org.apache.felix.framework.Felix._startBundle(Felix.java:1608)
        ... 7 more
Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
        at 
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:200)
        at 
org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)
        at 
org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:109)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 10 more
Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
        at 
org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:109)
        at 
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:507)
        at 
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:468)
        at 
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:187)
        ... 14 more
Bundle Started



Attached are the relevant code:

Lookup:  is the service interface
LookupImpl: is the implementation of that interface
HostActivator: is the activator for the hosting bundle
HostApplication: is the main class of the bundle that embeds felix
manifest_hostBundle: is the manifest for the above bundle
manifest_helloWorld: is the manifest for the client bundle of the service
HelloWorld: is the only class of the bundle that is launched inside the 
embed Felix

Please note that if the HostApplication is run as a normal java 
application  everything goes fine.
Sorry if the information is overwhelming, any help will be appreciated.

mm

Re: ClassLoading problems with Felix embed in a bundle ...

Posted by Karl Pauls <ka...@gmail.com>.
Try to embed the felix jar inside of your bundle instead of importing
it from the outside i.e.,

Bundle-Activator: voc.vh.HostApplication
Bundle-Classpath: .,felix.jar
Bundle-Name: Virtual OSGi Containers
Bundle-SymbolicName: VOC

(this assumes that you put the felix jar inside the root of your bundle)

Then it should work.

Alternatively, you could make the voc.vh.iface available via the
normal classpath and the system bundle package list.

regards,

Karl

On Wed, Apr 9, 2008 at 9:19 PM, Miguel Matos <ra...@gmail.com> wrote:
> Hello!
>  I am trying to embed Felix  as a bundle. This is related to some issues
> that I want to solve but the problem is not here.
>
>  I followed the wiki about how to embed Felix and everything gone fine, i.e,
> my app is running the way I want.
>
>  However as I say I need to embed Felix as an OSGi bundle but I'm having the
> (classical) classloading problems.
>
>
>  Basicaly I built a simple bundle in whose Activator I do all the necessary
> steps to embed Felix as in the tutorial.
>  To this point everything goes fine.
>  But I also want to export some services through the system bundle. To do
> this I register a simple service within the embed Felix Activator, and
> adjust the manifest
>  accordingly.
>
>  However when I try to start a bundle in the embed Felix (not in the "main
> instance") that uses the exported service it fails with a
> classnotfoundexception as show below:
>  (Lines with #### are comments made by me right now)
>
>  -> vgw start file:/tmp/hw.jar
>  Hello World...
>  ####Checking for all services
>  BundleSystem Bundle
>        Property objectClass
> org.osgi.service.startlevel.StartLevel
>        Property service.id  -> 1
>  BundleSystem Bundle
>        Property objectClass
> org.osgi.service.packageadmin.PackageAdmin
>        Property service.id  -> 2
>  BundleSystem Bundle
>        Property myey  -> myalue
>  ####My service is here!!!!
>        Property objectClass            voc.vh.iface.Lookup
>        Property service.id  -> 3
>  #### This is the class of the service object retrieved with
> BundleContext#getService(...)
>  O is voc.vh.LookupImpl@a761fe
>  #### This are the interfaces implemented by the above object
>  EC isClazz: voc.vh.iface.Lookup
>  #### This is the result of invoking a method into the obtained object
> through reflection
>  Hello BLA BLA
>  #### And those are the exceptions obtained when I try to cast the obtained
> object to its interface
>  org.osgi.framework.BundleException: Activator start error.
>        at org.apache.felix.framework.Felix._startBundle(Felix.java:1652)
>        at org.apache.felix.framework.Felix.startBundle(Felix.java:1542)
>        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:369)
>        at
> voc.vh.HostApplication.startVirtualizedApplication(HostApplication.java:120)
>        at voc.vh.HostApplication.execute(HostApplication.java:171)
>        at
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:276)
>        at
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:180)
>        at java.lang.Thread.run(Thread.java:619)
>  Caused by: java.lang.NoClassDefFoundError: voc/vh/iface/Lookup
>        at voc.tt.HelloWorld.start(HelloWorld.java:81)
>        at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:591)
>        at org.apache.felix.framework.Felix._startBundle(Felix.java:1608)
>        ... 7 more
>  Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
>        at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:200)
>        at
> org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)
>        at
> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:109)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>        ... 10 more
>  Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
>        at
> org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:109)
>        at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:507)
>        at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:468)
>        at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:187)
>        ... 14 more
>  Bundle Started
>
>
>
>  Attached are the relevant code:
>
>  Lookup:  is the service interface
>  LookupImpl: is the implementation of that interface
>  HostActivator: is the activator for the hosting bundle
>  HostApplication: is the main class of the bundle that embeds felix
>  manifest_hostBundle: is the manifest for the above bundle
>  manifest_helloWorld: is the manifest for the client bundle of the service
>  HelloWorld: is the only class of the bundle that is launched inside the
> embed Felix
>
>  Please note that if the HostApplication is run as a normal java application
> everything goes fine.
>  Sorry if the information is overwhelming, any help will be appreciated.
>
>  mm
>
> package voc.vh;
>
>  import java.util.Dictionary;
>
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>
>  import voc.vh.iface.Lookup;
>
>
>  public class HostActivator implements BundleActivator
>  {
>     private BundleContext m_context = null;
>
>     public void start(BundleContext context)
>     {
>         m_context = context;
>
>                 Dictionary d = new java.util.Hashtable();
>                 d.put("myey", "myalue");
>                 context.registerService(Lookup.class.getName(),
>                                 new LookupImpl(), d);
>     }
>
>     public void stop(BundleContext context)
>     {
>         m_context = null;
>     }
>  }
> package voc.vh;
>
>  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.osgi.framework.Bundle;
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>  import org.osgi.framework.BundleException;
>  import org.osgi.framework.Constants;
>  import org.osgi.framework.ServiceRegistration;
>
>  public class HostApplication implements BundleActivator {
>
>         private Felix m_felix = null;
>
>         private ServiceRegistration serviceRegistration = null;
>
>         public static void main(String[] args) {
>                 HostApplication ha = new HostApplication();
>
>                 ha.startVirtualHost();
>                 ha.startVirtualizedApplication("file:/tmp/hw.jar");
>
>                 // ha.shutdownApplication();
>         }
>
>         public void startVirtualHost() {
>                 // Create a case-insensitive configuration property map.j
>                 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,"
>                                                 + "voc.vh.iface,"
>                                                 +
> "org.apache.felix.shell.impl");
>                 // Explicitly specify the directory to use for caching
> bundles.
>                 configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP,
> "/tmp/felixCache");
>
>                 try {
>                         // Create host activator;
>                         HostActivator ha = new HostActivator();
>
>                         List list = new ArrayList();
>                         list.add(ha);
>
>                         // Now create an instance of the framework with
>                         // our configuration properties and activator.
>                         m_felix = new Felix(configMap, list);
>
>                         // Now start Felix instance.
>                         m_felix.start();
>
>                 } catch (Exception ex) {
>                         System.err.println("Could not create framework: " +
> ex);
>                         ex.printStackTrace();
>                 }
>
>                 System.out.println("Felix Started");
>         }
>
>         public void startVirtualizedApplication(String path) {
>
>                 try {
>                         BundleContext bc = m_felix.getBundleContext();
>                         Bundle b = bc.installBundle(path);
>
>                         b.start();
>
>                 } catch (BundleException e) {
>                         // TODO Auto-generated catch block
>                         e.printStackTrace();
>                 }
>
>                 System.out.println("Bundle Started");
>         }
>
>         public void shutdownApplication() {
>                 // Shut down the felix framework when stopping the
>                 // host application.
>                 try {
>                         m_felix.stop();
>                 } catch (BundleException e) {
>                         // TODO Auto-generated catch block
>                         e.printStackTrace();
>                 }
>         }
>
>         // /// BundleActivator Implementation
>         public void start(BundleContext bc) throws Exception {
>
>                 startVirtualHost();
>                 startVirtualizedApplication("file:/tmp/hw.jar");
>         }
>
>         public void stop(BundleContext bc) throws Exception {
>                 bc = null;
>                 serviceRegistration.unregister();
>                 System.out.println("Host stopped");
>         }
>  }
> package voc.vh;
>
>  import voc.vh.iface.Lookup;
>
>  public class LookupImpl implements Lookup {
>
>         public void hello(String name) {
>                 System.out.println("Hello " + name + "!");
>         }
>  }
>
> package voc.vh.iface;
>
>  public interface Lookup {
>
>         public void hello(String name);
>  }
>
> Bundle-Activator: voc.tt.HelloWorld
>  Import-Package: org.osgi.framework,voc.vh.iface
>  Bundle-Name: Hello World
>  Bundle-SymbolicName: helloworld
>
> Bundle-Activator: voc.vh.HostApplication
>  Import-Package:
> org.osgi.framework,org.apache.felix.shell,org.apache.felix.framework,org.apache.felix.framework.util,org.apache.felix.shell.impl.Util,org.osgi.util.tracker
>  Bundle-Name: Virtual OSGi Containers
>  Bundle-SymbolicName: VOC
>
> package voc.tt;
>
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>  import org.osgi.framework.ServiceReference;
>
>  import voc.vh.iface.Lookup;
>
>  public class HelloWorld implements BundleActivator{
>
>         public void start(BundleContext bc) throws Exception {
>                 System.out.println("Hello World...");
>
>
>
>  //
>                 for (ServiceReference sr  :
> bc.getAllServiceReferences(null, null)) {
>
>
>                         System.out.println("Bundle" +
> sr.getBundle().getSymbolicName());
>                         for (String p : sr.getPropertyKeys()) {
>                                 if (p.equalsIgnoreCase("objectClass")) {
>                                         System.out.print("\tProperty " + p
> );
>
>                                         for (String x : (String[])
> sr.getProperty(p)) {
>
> System.out.println("\t\t"+x);
>                                         }
>                                 }
>                                 else
>                                         System.out.println("\tProperty " + p
> + "  -> " + sr.getProperty(p));
>                         }
>
>                 }
>                 ServiceReference bla =
> bc.getServiceReference("voc.vh.iface.Lookup");
>                 Object o = bc.getService(bla);
>
>                 System.out.println("O is " + o);
>
>                 System.out.print("EC is" );
>                  for ( Class clazz : o.getClass().getInterfaces()){
>                          System.out.println("Clazz: " + clazz.getName());
>                  }
>
>                 o.getClass().getDeclaredMethod("hello", new
> Class[]{String.class}).invoke(o, new String[]{"BLA BLA"});
>  //              (o.getClass().getDeclaredMethods()[0).invoke("hello", "BLA
> BLA"));
>
>                 Lookup l = (Lookup) o;
>  //              (Lookup) o;
>  //              Lookup  look  = (Lookup)
> bc.getService(bc.getServiceReference("voc.vh.iface.Lookup"));
>  //
>  //              l.hello("BLA BLA");
>         }
>
>         public void stop(BundleContext arg0) throws Exception {
>                 System.out.println("Bye World...");
>         }
>
>         public void hello(String name) {
>                 System.out.println("Hello " + name + "!");
>         }
>  }
>



-- 
Karl Pauls
karlpauls@gmail.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: ClassLoading problems with Felix embed in a bundle ...

Posted by stephane frenot <st...@insa-lyon.fr>.
Hello miguel,
you need to patch felix to do this,
you need to transmit classloaders references from the host to the virtuals.

I can make the patch available to the community if needed.

/stephane

On Wed, Apr 9, 2008 at 9:19 PM, Miguel Matos <ra...@gmail.com> wrote:

> Hello!
> I am trying to embed Felix  as a bundle. This is related to some issues
> that I want to solve but the problem is not here.
>
> I followed the wiki about how to embed Felix and everything gone fine,
> i.e, my app is running the way I want.
>
> However as I say I need to embed Felix as an OSGi bundle but I'm having
> the (classical) classloading problems.
>
>
> Basicaly I built a simple bundle in whose Activator I do all the necessary
> steps to embed Felix as in the tutorial.
> To this point everything goes fine.
> But I also want to export some services through the system bundle. To do
> this I register a simple service within the embed Felix Activator, and
> adjust the manifest
> accordingly.
>
> However when I try to start a bundle in the embed Felix (not in the "main
> instance") that uses the exported service it fails with a
> classnotfoundexception as show below:
> (Lines with #### are comments made by me right now)
>
> -> vgw start file:/tmp/hw.jar
> Hello World...
> ####Checking for all services
> BundleSystem Bundle
>       Property objectClass
>  org.osgi.service.startlevel.StartLevel
>       Property service.id  -> 1
> BundleSystem Bundle
>       Property objectClass
>  org.osgi.service.packageadmin.PackageAdmin
>       Property service.id  -> 2
> BundleSystem Bundle
>       Property myey  -> myalue
> ####My service is here!!!!
>       Property objectClass            voc.vh.iface.Lookup
>       Property service.id  -> 3
> #### This is the class of the service object retrieved with
> BundleContext#getService(...)
> O is voc.vh.LookupImpl@a761fe
> #### This are the interfaces implemented by the above object
> EC isClazz: voc.vh.iface.Lookup
> #### This is the result of invoking a method into the obtained object
> through reflection
> Hello BLA BLA
> #### And those are the exceptions obtained when I try to cast the obtained
> object to its interface
> org.osgi.framework.BundleException: Activator start error.
>       at org.apache.felix.framework.Felix._startBundle(Felix.java:1652)
>       at org.apache.felix.framework.Felix.startBundle(Felix.java:1542)
>       at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:369)
>       at
> voc.vh.HostApplication.startVirtualizedApplication(HostApplication.java:120)
>       at voc.vh.HostApplication.execute(HostApplication.java:171)
>       at
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:276)
>       at
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:180)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NoClassDefFoundError: voc/vh/iface/Lookup
>       at voc.tt.HelloWorld.start(HelloWorld.java:81)
>       at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:591)
>       at org.apache.felix.framework.Felix._startBundle(Felix.java:1608)
>       ... 7 more
> Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
>       at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:200)
>       at
> org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)
>       at
> org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:109)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>       ... 10 more
> Caused by: java.lang.ClassNotFoundException: voc.vh.iface.Lookup
>       at
> org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:109)
>       at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:507)
>       at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:468)
>       at
> org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:187)
>       ... 14 more
> Bundle Started
>
>
>
> Attached are the relevant code:
>
> Lookup:  is the service interface
> LookupImpl: is the implementation of that interface
> HostActivator: is the activator for the hosting bundle
> HostApplication: is the main class of the bundle that embeds felix
> manifest_hostBundle: is the manifest for the above bundle
> manifest_helloWorld: is the manifest for the client bundle of the service
> HelloWorld: is the only class of the bundle that is launched inside the
> embed Felix
>
> Please note that if the HostApplication is run as a normal java
> application  everything goes fine.
> Sorry if the information is overwhelming, any help will be appreciated.
>
> mm
>
> package voc.vh;
>
> import java.util.Dictionary;
>
> import org.osgi.framework.BundleActivator;
> import org.osgi.framework.BundleContext;
>
> import voc.vh.iface.Lookup;
>
>
> public class HostActivator implements BundleActivator
> {
>    private BundleContext m_context = null;
>
>    public void start(BundleContext context)
>    {
>        m_context = context;
>
>                Dictionary d = new java.util.Hashtable();
>                d.put("myey", "myalue");
>                context.registerService(Lookup.class.getName(),
>                                new LookupImpl(), d);
>    }
>
>    public void stop(BundleContext context)
>    {
>        m_context = null;
>    }
> }
> package voc.vh;
>
> 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.osgi.framework.Bundle;
> import org.osgi.framework.BundleActivator;
> import org.osgi.framework.BundleContext;
> import org.osgi.framework.BundleException;
> import org.osgi.framework.Constants;
> import org.osgi.framework.ServiceRegistration;
>
> public class HostApplication implements BundleActivator {
>
>        private Felix m_felix = null;
>
>        private ServiceRegistration serviceRegistration = null;
>
>        public static void main(String[] args) {
>                HostApplication ha = new HostApplication();
>
>                ha.startVirtualHost();
>                ha.startVirtualizedApplication("file:/tmp/hw.jar");
>
>                // ha.shutdownApplication();
>        }
>
>        public void startVirtualHost() {
>                // Create a case-insensitive configuration property map.j
>                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,"
>                                                + "voc.vh.iface,"
>                                                +
> "org.apache.felix.shell.impl");
>                // Explicitly specify the directory to use for caching
> bundles.
>                configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP,
> "/tmp/felixCache");
>
>                try {
>                        // Create host activator;
>                        HostActivator ha = new HostActivator();
>
>                        List list = new ArrayList();
>                        list.add(ha);
>
>                        // Now create an instance of the framework with
>                        // our configuration properties and activator.
>                        m_felix = new Felix(configMap, list);
>
>                        // Now start Felix instance.
>                        m_felix.start();
>
>                } catch (Exception ex) {
>                        System.err.println("Could not create framework: " +
> ex);
>                        ex.printStackTrace();
>                }
>
>                System.out.println("Felix Started");
>        }
>
>        public void startVirtualizedApplication(String path) {
>
>                try {
>                        BundleContext bc = m_felix.getBundleContext();
>                        Bundle b = bc.installBundle(path);
>
>                        b.start();
>
>                } catch (BundleException e) {
>                        // TODO Auto-generated catch block
>                        e.printStackTrace();
>                }
>
>                System.out.println("Bundle Started");
>        }
>
>        public void shutdownApplication() {
>                // Shut down the felix framework when stopping the
>                // host application.
>                try {
>                        m_felix.stop();
>                } catch (BundleException e) {
>                        // TODO Auto-generated catch block
>                        e.printStackTrace();
>                }
>        }
>
>        // /// BundleActivator Implementation
>        public void start(BundleContext bc) throws Exception {
>
>                startVirtualHost();
>                startVirtualizedApplication("file:/tmp/hw.jar");
>        }
>
>        public void stop(BundleContext bc) throws Exception {
>                bc = null;
>                serviceRegistration.unregister();
>                System.out.println("Host stopped");
>        }
> }
> package voc.vh;
>
> import voc.vh.iface.Lookup;
>
> public class LookupImpl implements Lookup {
>
>        public void hello(String name) {
>                System.out.println("Hello " + name + "!");
>        }
> }
>
> package voc.vh.iface;
>
> public interface Lookup {
>
>        public void hello(String name);
> }
>
> Bundle-Activator: voc.tt.HelloWorld
> Import-Package: org.osgi.framework,voc.vh.iface
> Bundle-Name: Hello World
> Bundle-SymbolicName: helloworld
>
> Bundle-Activator: voc.vh.HostApplication
> Import-Package:
> org.osgi.framework,org.apache.felix.shell,org.apache.felix.framework,org.apache.felix.framework.util,org.apache.felix.shell.impl.Util,org.osgi.util.tracker
> Bundle-Name: Virtual OSGi Containers
> Bundle-SymbolicName: VOC
>
> package voc.tt;
>
> import org.osgi.framework.BundleActivator;
> import org.osgi.framework.BundleContext;
> import org.osgi.framework.ServiceReference;
>
> import voc.vh.iface.Lookup;
>
> public class HelloWorld implements BundleActivator{
>
>        public void start(BundleContext bc) throws Exception {
>                System.out.println("Hello World...");
>
>
>
> //
>                for (ServiceReference sr  :
>  bc.getAllServiceReferences(null, null)) {
>
>
>                        System.out.println("Bundle" +
> sr.getBundle().getSymbolicName());
>                        for (String p : sr.getPropertyKeys()) {
>                                if (p.equalsIgnoreCase("objectClass")) {
>                                        System.out.print("\tProperty " + p
> );
>
>                                        for (String x : (String[])
> sr.getProperty(p)) {
>
>  System.out.println("\t\t"+x);
>                                        }
>                                }
>                                else
>                                        System.out.println("\tProperty " +
> p + "  -> " + sr.getProperty(p));
>                        }
>
>                }
>                ServiceReference bla =
> bc.getServiceReference("voc.vh.iface.Lookup");
>                Object o = bc.getService(bla);
>
>                System.out.println("O is " + o);
>
>                System.out.print("EC is" );
>                 for ( Class clazz : o.getClass().getInterfaces()){
>                         System.out.println("Clazz: " + clazz.getName());
>                 }
>
>                o.getClass().getDeclaredMethod("hello", new
> Class[]{String.class}).invoke(o, new String[]{"BLA BLA"});
> //              (o.getClass().getDeclaredMethods()[0).invoke("hello", "BLA
> BLA"));
>
>                Lookup l = (Lookup) o;
> //              (Lookup) o;
> //              Lookup  look  = (Lookup)
> bc.getService(bc.getServiceReference("voc.vh.iface.Lookup"));
> //
> //              l.hello("BLA BLA");
>        }
>
>        public void stop(BundleContext arg0) throws Exception {
>                System.out.println("Bye World...");
>        }
>
>        public void hello(String name) {
>                System.out.println("Hello " + name + "!");
>        }
> }
>



-- 
http://perso.citi.insa-lyon.fr/sfrenot
work here : http://tinyurl.com/2ts4xf
sleep here : http://tinyurl.com/33p2gt
play here : http://tinyurl.com/3yarjz