I haven't done anything to get it to start. I didn't think the classes would be available until "Starting" state given that the context isn't available until then. When I look in the console, after occurrence of the NPE, its state is "Active".
So I guess a class in a bundle can't depend on getting access to the BundleContext of the bundle in which it resides? From: David Jencks [mailto:[email protected]] Sent: Wednesday, July 23, 2014 3:57 PM To: [email protected] Subject: Re: Null BundleContext in class It sounds like the bundle is resolved but not started. What have you done to try to get the bundle to start? All the classes from a resolved bundle are available without it starting. david jencks On Jul 23, 2014, at 12:58 PM, "Leschke, Scott" <[email protected]<mailto:[email protected]>> wrote: I'm seeing some behavior using Karaf/Felix that I find odd. I have a Blueprint service that fails to instantiate when the Blueprint container tries to create it. The service is itself trying to create an an object (JDO PersistenceManagerFactory) using the JDO API and DataNucleus JDO implementation The root cause of the failure appears to be that one of the DN bundles is attempting to get its own BundleContext but gets an NPE instead. The only way that this could occur to my knowledge is if the bundle isn't in an appropriate state (STARTING at a minimum). I'm not sure why the OSGi framework wouldn't have already started the bundle in question (org.datanucleus) since the invoking bundle (org.datanucleus.api.jdo) has explicit dependencies declared on the packages it exports, specifically package org.datanucleus.plugin. Is this framework behavior reasonable? Additional detail is below. Any thoughts greatly appreciated. Caused by: java.lang.NullPointerException at org.datanucleus.plugin.OSGiPluginRegistry.registerExtensions(OSGiPluginRegistry.java:104) at org.datanucleus.plugin.OSGiPluginRegistry.registerExtensionPoints(OSGiPluginRegistry.java:89) at org.datanucleus.plugin.PluginManager.<init>(PluginManager.java:63) at org.datanucleus.plugin.PluginManager.createPluginManager(PluginManager.java:430) at org.datanucleus.AbstractNucleusContext.<init>(AbstractNucleusContext.java:85) at org.datanucleus.PersistenceNucleusContextImpl.<init>(PersistenceNucleusContextImpl.java:164) at org.datanucleus.PersistenceNucleusContextImpl.<init>(PersistenceNucleusContextImpl.java:153) at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.<init>(JDOPersistenceManagerFactory.java:426) Lines 100-104 of class org.datanucleus.plugin.OSGiPluginRegistry are shown below. Clearly 'ctx" must be null. BundleContext ctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); // parse the plugin files DocumentBuilder docBuilder = OSGiBundleParser.getDocumentBuilder(); org.osgi.framework.Bundle[] osgiBundles = ctx.getBundles();
