felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Hall" <he...@ungoverned.org>
Subject Re: bundle.update becomes ineffective after loading class via class loader
Date Tue, 25 Jan 2011 19:47:23 GMT
On 1/25/11 14:17, Reto Bachmann-Gmuer wrote:
> Hello
>
> When I attempt to load a class with
> this.getClass.getClassLoader.load("foo.Hello") this prevents future updates
> of the bundle exporting foo from being effective, services in that package
> will not be running with the updated class until felix is restarted or
> packageAdmin.refreshPackages called.
>
> Is this a known problem?

This is not a "problem", that's how the spec defines it. If an exported 
package is being used by some bundle, then an update to the exported 
bundle does not take effect until it is refreshed. This allows you to do 
multiple updates without having to refresh dependent bundles multiple times.

-> richard

>
> Example clerezza cosnole transcript
>
> zz>val b = bundleContext.getBundle(165)
> b: org.osgi.framework.Bundle = tmp.foor [165]
> zz>import java.io._
> import java.io._
> zz>b.update(new FileInputStream("/tmp/last2.jar"))
> -->  component changed version (looking at webpage generated by the jaxrs
> service foo.Service)
>
> zz>b.update(new FileInputStream("/tmp/last1.jar"))
> -->  component changed version
>
> zz>val cl = this.getClass.getClassLoader()
> cl: java.lang.ClassLoader =
> scala.tools.nsc.interpreter.AbstractFileClassLoader@748a57a3
> zz>cl.loadClass("foo.Hello")
> java.lang.ClassNotFoundException: foo.Hello
>      at
> scala.tools.nsc.interpreter.AbstractFileClassLoader.onull$1(AbstractFileClassLoader.scala:21)
>      at
> scala.tools.nsc.interpreter.AbstractFileClassLoader$$anonfun$getBytesForClass$1.apply(AbstractFileClassLoader.scala:26)
>      at
> scala.tools.nsc.interpreter.AbstractFileClassLoader$$anonfun$getBytesForClass$1.apply(AbstractFileClassLoader.scala:25)
>      at
> scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
>      at scala.collection.immutable.List.foreach(List.scala:45)
>      at
> scala.tools.nsc.interpreter.AbstractFileClassLoader.getBytesForClass(AbstractFileClassLoader.scala:25)
>      at
> scala.tools.nsc.interpreter.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:33)
>      at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
> ...
> zz>b.update(new FileInputStream("/tmp/last2.jar"))
> -->  no effect on component
>
>
> Cheers,
> reto
>

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


Mime
View raw message