Hi

If the trunk build fixes your problem, we should just relase configadmin. WDYT ?

Regards
Felix

Am 07.04.2013 um 14:29 schrieb David Jencks:

> I mentioned somewhere recently that my implementation of R5 features for DS 
> was stalled due to test failures running against released versions of Felix 
> config admin.  I've identified the problem more closely and wonder what to do.
> 
> The config admin problem appears to be solved by FELIX-3820. Here's some test 
> code that reproduces it (I put this in the DS ComponentConfigurationPID test 
> to run it)
> 
>    @Test
>    public void testConfigAdminClosed() throws Exception
>    {
>        Bundle b = installBundle();
>        b.start();
>        BundleContext bc = b.getBundleContext();
>        ServiceReference<ConfigurationAdmin> ref = bc.getServiceReference( 
> ConfigurationAdmin.class );
>        ConfigurationAdmin ca = bc.getService( ref );
>        Configuration conf = ca.getConfiguration( "foo.pid" );
>        bc.ungetService( ref );
>        String location = conf.getBundleLocation();
> 
>    }
> 
>    protected Bundle installBundle( ) throws BundleException
>    {
>        final InputStream bundleStream = bundle()
>                .set(Constants.BUNDLE_SYMBOLICNAME, "simplecomponent2")
>                .set(Constants.BUNDLE_VERSION, "0.0.11")
>            .build(withBnd());
> 
>        try
>        {
>            final String location = "test:SimpleComponent/" + 
> System.currentTimeMillis();
>            return bundleContext.installBundle( location, bundleStream );
>        }
>        finally
>        {
>            try
>            {
>                bundleStream.close();
>            }
>            catch ( IOException ioe )
>            {
>            }
>        }
>    }
> 
> 
> The line 
>        String location = conf.getBundleLocation();
> 
> gives an NPE like this:
> 
>    <error type="java.lang.NullPointerException">java.lang.NullPointerException
>       at 
> org.apache.felix.cm.impl.ConfigurationAdminImpl.hasPermission(ConfigurationAdminImpl.java:156)
>       at 
> org.apache.felix.cm.impl.ConfigurationAdminImpl.checkPermission(ConfigurationAdminImpl.java:170)
>       at 
> org.apache.felix.cm.impl.ConfigurationAdapter.getBundleLocation(ConfigurationAdapter.java:73)
>       at 
> org.apache.felix.scr.integration.ComponentConfigurationPidTest.testConfigAdmingClosed(ComponentConfigurationPidTest.java:137)
> 
> 
> IIUC the problem is that ungetting the CA ref nulls out the field that does 
> the logging in the Configuration or ConfigurationAdminImpl, so calling any 
> method on the configuration that tries to log something will give an NPE.
> 
> You can call conf.getBundleLocation() successfully as long as you still have 
> the CA ref.
> 
> I think this is an egregious bug in felix CA.  Did I miss something in the 
> spec that says this is OK and that configurations are only usable while you 
> hold the CA reference?
> 
> I can think of 3 courses of action:
> 
> 1. make the code structure worse in DS so that DS holds the ref until it is 
> done validating the configuration and extracting the properties. 
> 
> 2. require use of the R5 ca and try to get a CA release out with the 3820 fix 
> fairly soon, DS will then not work with any older felix CA's (not sure about 
> anyone else's' CA).
> 
> 3. backport the 3820 fix to earlier felix CA's and do bug fix releases on 
> them.  I'm not aware of this (back porting) ever happening in felix…  DS 
> users using felix CA  would have to upgrade but not change framework levels.
> 
> I've implemented (1) but I'm not very happy about how the code looks.
> 
> thoughts?
> 
> thanks 
> david jencks
> 
> 
> 
> 


--
Felix Meschberger | Principal Scientist | Adobe







Reply via email to