Perhaps you can give me some way to download it and recreate it…that's probably 
the quickest way. Of course, try to simplify it if you can…

-> richard

On Aug 9, 2012, at 06:29 , Dan Gravell <[email protected]> wrote:

> Sorry: forgot to include my code... I am performing a refresh
> (see blockingRefreshBundles()). Before this code runs I am using OBR to
> resolve a set of requirements. I then perform the update via the resolver.
> 'startedBundles' are the bundles that were started at the time the update
> runs:
> 
> for (Bundle bundle : startedBundles) {
> try {
> if(!FelixObrUtils.isFragment(bundle))
> sysBundle.getBundleContext().getBundle(bundle.getBundleId()).stop();
> } catch (BundleException e) {
> LOG.error("Failed to stop " + bundle.getSymbolicName(), e);
> }
> }
> resolver.deploy(0);
> blockingRefreshBundles(null, sysBundle.getBundleContext());
> for (Bundle bundle : startedBundles) {
> try {
> if(!FelixObrUtils.isFragment(bundle))
> sysBundle.getBundleContext().getBundle(bundle.getBundleId()).start();
> } catch (BundleException e) {
> LOG.error("Failed to restart " + bundle.getSymbolicName(), e);
> }
> }
> 
> protected void blockingRefreshBundles(Collection<Bundle> restartedBundles,
> final BundleContext bundleContext) {
> final FrameworkWiring frameworkWiring =
> bundleContext.getBundle(0).adapt(FrameworkWiring.class);
> if(null!=frameworkWiring) {
> final CountDownLatch latch = new CountDownLatch(1);
> frameworkWiring.refreshBundles(restartedBundles, new FrameworkListener() {
> @Override
> public void frameworkEvent(FrameworkEvent arg0) {
> if(arg0.getType()==FrameworkEvent.PACKAGES_REFRESHED) latch.countDown();
> }
> });
> try {
> latch.await();
> } catch (InterruptedException e) {
> LOG.error("Interrupted while waiting for packages to refresh. Will continue
> anyway");
> }
> } else {
> LOG.warn("Couldn't adapt system bundle to framework wiring so will not
> refresh bundles");
> }
> }
> 
> Just a thought - might there be a problem in re-using the old references to
> 'startedBundles'? Following the update, should I refresh these instances?
> 
> Dan
> 
> On Thu, Aug 9, 2012 at 11:19 AM, Felix Meschberger <[email protected]>wrote:
> 
>> Hi
>> 
>> I would assume you need to call PackageAdmin.refreshPackages() after
>> updating the bundles, such that all providers and consumers get to know the
>> latest updates.
>> 
>> If you just to Bundle.update the call to PackageAdmin.refreshPackages must
>> also be done explicitly. If you are using installation tools such as File
>> Install this call would be done automatically by the installation tool
>> along with updating the bundles.
>> 
>> Regards
>> Felix
>> 
>> Am 09.08.2012 um 11:59 schrieb Dan Gravell:
>> 
>>> Hi all. I'm getting some NoClassDefFoundErrors and other
>> exceptions/errors
>>> after updating some bundles. The bundles work fine before. Restarting
>> Felix
>>> clears the problem (no more NCDFE) and the newly updating bundles work
>> fine
>>> once again.
>>> 
>>> I'd like to be able to support updating while running, if possible.
>>> 
>>> Here's a sample stacktrace:
>>> 
>>> 2012-08-09 10:44:56,095 [ERROR]  Error while executing
>>> AutomaticFixerCoverArtCommand (AggregatedPolic
>>> yCommand.java:65, thread policy pool 0)
>>> java.lang.ExceptionInInitializerError
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.dimensionsOf(CoverArtUtils.java
>>> :163)
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.openImageDimension(CoverArtUtil
>>> s.java:187)
>>>       [...]
>>> Caused by: java.lang.NullPointerException
>>>       at
>>> 
>> org.apache.felix.framework.BundleRevisionImpl.getResourcesLocal(BundleRevisionImpl.java:510)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.findResourcesByDelegation(BundleWiringImpl.java:1127)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.getResourcesByDelegation(BundleWiringImpl.java:1037)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5.getResources(BundleWiringImpl.java:1778)
>>>       at
>>> 
>> org.eclipse.jetty.osgi.boot.internal.webapp.OSGiWebappClassLoader.getResources(OSGiWebappClassLoader.java:115)
>>>       at
>>> java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:340)
>>>       at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:432)
>>>       at
>>> 
>> javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(IIORegistry.java:206)
>>>       at javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:138)
>>>       at
>>> javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:159)
>>>       at javax.imageio.ImageIO.<clinit>(ImageIO.java:64)
>>> 
>>> 2012-08-09 10:44:57,061 [ERROR]  Error while executing
>>> AutomaticFixerCoverArtCommand (AggregatedPolicyCommand.java:65, thread
>>> policy pool 1)
>>> java.lang.NoClassDefFoundError: Could not initialize class
>>> javax.imageio.ImageIO
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.dimensionsOf(CoverArtUtils.java:163)
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.openImageDimension(CoverArtUtils.java:187)
>>>       [... no caused by trace here...]
>>> 
>>> Immediately before that I get something I only see once I enable Felix
>>> debug logging:
>>> 
>>> ERROR: Bundle com.elsten.bliss.ui [34] Unable to get module class path.
>>> (java.lang.NullPointerExcepti
>>> on)
>>> java.lang.NullPointerException
>>>       at
>>> 
>> org.apache.felix.framework.BundleRevisionImpl.calculateContentPath(BundleRevisionImpl.java
>>> :410)
>>>       at
>>> 
>> org.apache.felix.framework.BundleRevisionImpl.initializeContentPath(BundleRevisionImpl.jav
>>> a:347)
>>>       at
>>> 
>> org.apache.felix.framework.BundleRevisionImpl.getContentPath(BundleRevisionImpl.java:333)
>>>       at
>>> 
>> org.apache.felix.framework.BundleRevisionImpl.getResourcesLocal(BundleRevisionImpl.java:49
>>> 3)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.findResourcesByDelegation(BundleWiringImpl.jav
>>> a:1127)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.getResourcesByDelegation(BundleWiringImpl.java
>>> :1037)
>>>       at
>>> 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5.getResources(BundleWiri
>>> ngImpl.java:1778)
>>>       at
>>> 
>> org.eclipse.jetty.osgi.boot.internal.webapp.OSGiWebappClassLoader.getResources(OSGiWebappC
>>> lassLoader.java:115)
>>>       at
>>> java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:340)
>>>       at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:432)
>>>       at
>>> 
>> javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(IIORegistry.java:206)
>>>       at javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:138)
>>>       at
>>> javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:159)
>>>       at javax.imageio.ImageIO.<clinit>(ImageIO.java:64)
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.dimensionsOf(CoverArtUtils.java
>>> :163)
>>>       at
>>> 
>> com.elsten.bliss.music.policy.coverartpolicy.CoverArtUtils.openImageDimension(CoverArtUtil
>>> s.java:187)
>>> 
>>> There are many of these NCDFEs but only one of those NPEs in
>>> BundleRevisionImpl. Once those have been thrown, "all hell seems to break
>>> loose" and I start getting NCDFEs for other classes including my own.
>> Does
>>> the original exception cause these downstream ones or are they unrelated?
>>> 
>>> During the update the Import-Package statements for javax.imageio.*
>> remain
>>> stable.
>>> 
>>> Let me know if more contextual logs are useful. I can provide the actual
>>> code that's running if it helps (it's large though).
>>> 
>>> Dan
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to