I understand why you want it simplified but I don't think I can - part of
the reason I think this is occurring is because it's a pretty complex beast
with threads and bundles all over the place.

I will send you some download instructions and instructions to run... what
OS are you on? Is a plain folder structure in a ZIP easiest?

Dan

On Thu, Aug 9, 2012 at 2:58 PM, Richard S. Hall <[email protected]>wrote:

> 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