This is the host application.... import java.io.IOException; 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.cache.BundleCache; import org.apache.felix.framework.util.MutablePropertyResolver; import org.apache.felix.framework.util.MutablePropertyResolverImpl; 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.Constants; import org.osgi.util.tracker.ServiceTracker; import org.springframework.osgi.samples.simpleservice.MyService; public class FelixHost { private HostActivator m_activator = null; private Felix m_felix = null; private ServiceTracker m_tracker = null; public FelixHost() { Map configMap = new StringMap(false); Properties p = new Properties(); try { p.load(this.getClass().getClassLoader().getResourceAsStream( "roland.properties")); } catch (IOException e) { e.printStackTrace(); } p.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," + "org.springframework.osgi.samples.simpleservice ;"); p.put(BundleCache.CACHE_PROFILE_DIR_PROP, "/home/sameera/.felix/new1"); try { m_felix = new Felix(); m_activator = new HostActivator(); List<BundleActivator> act = new ArrayList(); act.add(m_activator); MutablePropertyResolver resolver = new MutablePropertyResolverImpl( p); m_felix.start(resolver, act); System.out.println("Felix started."); } catch (Exception ex) { System.err.println("Could not create framework: " + ex); ex.printStackTrace(); } m_tracker = new ServiceTracker(m_activator.getContext(), MyService.class.getName(), null); m_tracker.open(); } public String callService() { Object[] services = m_tracker.getServices(); System.out.println("sevices length :" + services.length); for (int i = 0; (services != null) && (i < services.length); i++) { try { return ((MyService) services[i]).stringValue(); } catch (Exception ex) { System.out.println(ex); } } return "):"; } public Bundle[] getInstalledBundles() { return m_activator.getContext().getBundles(); } public BundleContext getContext() { return m_activator.getContext(); } public void shutdownApplication() { System.out.println("Shutting down Felix."); m_felix.shutdown(); } } and from another class .... FelixHost host = new FelixHost(); BundleContext context = host.getContext(); Bundle bundle = context.installBundle("file:/work/bundle.jar"); bundle.start(); Additionally the activator ... import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class HostActivator implements BundleActivator { private BundleContext m_context = null; public void start(BundleContext context) { m_context = context; } public void stop(BundleContext context) { m_context = null; } public BundleContext getContext() { return m_context; } } Thank you. Sameera On 4/25/07, Richard S. Hall <[EMAIL PROTECTED]> wrote:
I cannot see what is going wrong...it definitely appears to be getting a different manifest file, because the bundle version number giving you an exception is ${pom...} rather than a real version. Perhaps you should let us see your code for launching Felix and installing the bundle. -> richard Sameera Withanage wrote: > I checked all the manifest entries in all jar files and found no entries. > But the entries I found were in pom.xml. > > I think something wrong the way I launched Felix, because standalone is > working fine. > > I'm loading bundle from a jar. It is from the simple-service-bundle > sample > comes with spring-osgi. > > -----Bundle Content--- > > META-INF/ > META-INF/MANIFEST.MF > META-INF/spring/ > META-INF/spring/simpleservice-osgi.xml > META-INF/spring/simpleservice.xml > META-INF/maven/ > META-INF/maven/org.springframework.osgi.samples/ > > META-INF/maven/org.springframework.osgi.samples/simple-service-bundle/ > > META-INF/maven/org.springframework.osgi.samples/simple-service-bundle/pom.xml > > > META-INF/maven/org.springframework.osgi.samples/simple-service-bundle/pom.properties > > org/ > org/springframework/ > org/springframework/osgi/ > org/springframework/osgi/samples/ > org/springframework/osgi/samples/simpleservice/ > org/springframework/osgi/samples/simpleservice/impl/ > > org/springframework/osgi/samples/simpleservice/impl/MyServiceImpl.class > org/springframework/osgi/samples/simpleservice/MyService.class > > -----Manifest file---- > > Manifest-Version: 1.0 > Archiver-Version: Plexus Archiver > Created-By: Apache Maven > Built-By: sameera > Build-Jdk: 1.5.0_09 > Extension-Name: simple-service-bundle > Specification-Title: The Spring-OSGi project makes it easy to build Sp > ring applications > that run in an OSGi framework. A Spring applicati > on written in this > way provides better separation of modules, the a > bility to > dynamically add, remove, and update modules in a running > system, the > ability to deploy multiple versions of a module simulta > neously (and > have clients automatically bind to the appropriate one > ), and a dynamic > service model. > Specification-Vendor: Spring Framework > Implementation-Vendor: Spring Framework > Implementation-Title: simple-service-bundle > Implementation-Version: 1.0-m1 > Bundle-Version: 1.0 > Bundle-Vendor: Spring Framework > Bundle-DocURL: http://www.springframework.org/osgi > Bundle-ClassPath: .,target/classes/ > Bundle-SymbolicName: org.springframework.osgi.samples.simpleservice > Bundle-Name: Simple-Service-Sample > Export-Package: org.springframework.osgi.samples.simpleservice > > ----Simpleservice.xml --- > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd"> > > <bean name="simpleService" class=" > org.springframework.osgi.samples.simpleservice.impl.MyServiceImpl" /> > > </beans> > > ----Simpleservice-OSGi.xml --- > > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:osgi="http://www.springframework.org/schema/osgi" > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd > http://www.springframework.org/schema/osgi > http://www.springframework.org/schema/osgi/spring-osgi.xsd"> > > <osgi:service id="simpleServiceOsgi" ref="simpleService" > > interface="org.springframework.osgi.samples.simpleservice.MyService" /> > > </beans> > > ------------------------------------------- > > Thank you > > Sameera > > > On 4/24/07, Stuart McCulloch <[EMAIL PROTECTED]> wrote: >> >> On 25/04/07, Sameera Withanage <[EMAIL PROTECTED]> wrote: >> > I'm using the Felix built from trunk. >> > >> > Here is the exception... >> > >> > java.lang.NumberFormatException: For input string: "${pom" >> >> Looks like it's using a manifest that hasn't been filtered by maven >> and still has the ${pom....} variable, which of course is not valid. >> The warnings from spring-osgi are possibly related - build issue? >> >> Are you loading this bundle from a jar or directory? >> >> Could you provide a jar / directory listing along with the manifest? >> >> > at java.lang.NumberFormatException.forInputString( >> > NumberFormatException.java :48) >> > at java.lang.Integer.parseInt(Integer.java:447) >> > at java.lang.Integer.parseInt(Integer.java:497) >> > at org.osgi.framework.Version.<init>(Version.java:127) >> > at org.osgi.framework.Version.parseVersion (Version.java:208) >> > at org.apache.felix.framework.Felix.createModule(Felix.java:3112) >> > at org.apache.felix.framework.Felix.createBundleInfo(Felix.java >> :3057) >> > at org.apache.felix.framework.Felix.installBundle >> (Felix.java:1961) >> > at org.apache.felix.framework.Felix.start(Felix.java:443) >> > at com.aeturnum.athiva.rnd.FelixHost.<init>(FelixHost.java:82) >> > at com.aeturnum.athiva.rnd.Main.main(Main.java:17) >> > org.osgi.framework.BundleException : Could not create bundle object. >> > at org.apache.felix.framework.Felix.installBundle(Felix.java :2012) >> > at org.apache.felix.framework.Felix.start(Felix.java:443) >> > at com.aeturnum.athiva.rnd.FelixHost.<init>( FelixHost.java:82) >> > at com.aeturnum.athiva.rnd.Main.main(Main.java:17) >> > Caused by: java.lang.NumberFormatException: For input string: "${pom" >> > at java.lang.NumberFormatException.forInputString( >> > NumberFormatException.java :48) >> > at java.lang.Integer.parseInt(Integer.java:447) >> > at java.lang.Integer.parseInt(Integer.java:497) >> > at org.osgi.framework.Version.<init>(Version.java:127) >> > at org.osgi.framework.Version.parseVersion (Version.java:208) >> > at org.apache.felix.framework.Felix.createModule(Felix.java:3112) >> > at org.apache.felix.framework.Felix.createBundleInfo(Felix.java >> :3057) >> > at org.apache.felix.framework.Felix.installBundle >> (Felix.java:1961) >> > ... 3 more >> > >> > >> > And additionally once I start a spring bundle it gives this >> warnings and >> not >> > registering services exported from it. >> > >> > WARNING: META-INF/spring.handlers ( >> > org.apache.felix.moduleloader.ResourceNotFoundException: >> > META-INF/spring.handlers) >> > WARNING: META-INF/spring.schemas ( >> > org.apache.felix.moduleloader.ResourceNotFoundException: >> > META-INF/spring.schemas) >> > >> > I'm still new to relate this exception to some place, but this bundle >> works >> > fine in standalone felix and it registers the services as well. >> > >> > Thank you >> > >> > Sameera >> > >> > >> > On 4/24/07, Richard S. Hall <[EMAIL PROTECTED]> wrote: >> > > >> > > Could you post the exception? >> > > >> > > Also, are you using Felix built from trunk or 0.8.0-incubator ? >> > > >> > > -> richard >> > > >> > > Sameera Withanage wrote: >> > > > Hi, >> > > > >> > > > I'm embedding Felix in a host application following the examples >> given >> > > in >> > > > Felix site. When I'm trying to install a bundle, for instance >> > > > spring-osgi, >> > > > it gives NumberformatException. I installed the same set of >> bundles >> > > using >> > > > standalone Felix console and all started successfully. I couldn't >> > > > figure out >> > > > why the same is not happening at embedded version. >> > > > >> > > > I tried removing all the META-INF/maven folders from jar >> bundles and >> > > > found >> > > > all bundles are starting, but it seems not practicle to always >> edit >> > > > bundles. >> > > > >> > > > Any help would be greatly appreciated. >> > > > >> > > > Sameera >> > > > >> > > >> > >> >> >> -- >> Cheers, Stuart >> >