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
> >>
> >
>