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]

