Hi Alex,

Thanks for testing it out.
I've committed the fix to trunk.
BTW I was also using the single bundle distro when testing this out...

Best regards,

David

2009/12/9 Alexander Broekhuis <[email protected]>:
> Hi,
>
> Thx for the patch. This fixes my problem.
>
> Can it be that the problems does not occur when using the multi bundle
> distribution? I am using the singlebundle version.
> Not sure why I don't see it with the snapshot version. Can it be because of
> the two jar files (dosgi and discovery) vs one file now?
>
> Anyway, looking at the OSGi javadoc, the condition seems to be expected.
>
> Again, thanx for the quick fix!
>
> On Wed, Dec 9, 2009 at 12:16 PM, David Bosschaert <
> [email protected]> wrote:
>
>> Hi Alexander,
>>
>> I tried to reproduce your issue on both Windows XP and Linux (Ubuntu
>> 9.10) with JDK 1.6 but wasn't able to.
>>
>> As an experiment I modified the start and updated methods to be
>> synchronized in the Activator. I've attached source and .class files
>> in a zip.
>> Would you mind modifying your
>> cxf-dosgi-ri-discovery-distributed-1.1.jar file with the attached
>> Activator and see if that fixes it for you?
>>
>> BTW this file didn't change since early July so there shouldn't really
>> be any difference between 1.1 and the 1.1-SNAPSHOT that you had been
>> using before.
>>
>> Thanks,
>>
>> David
>>
>> 2009/12/9 Alexander Broekhuis <[email protected]>:
>> > David,
>> >
>> > I tested with the discovery demo. On equinox as well as felix. It fails,
>> but
>> > not always. I can get it to always work, if I add the zookeeper.cfg to
>> the
>> > load directory after starting all services. But as soon as the cfg is in
>> the
>> > cache, a restart fails again.
>> >
>> > I looked at the source, and the only thing I can see is indeed a race
>> > condition at the updated callback. I guess services are registered before
>> > the register method is completely done and returned. So the config
>> manager
>> > already starts updating the managed services which leads to the
>> nullpointer.
>> >
>> > After reading the OSGi javadoc I think the start method has to be
>> > synchronized. From
>> >
>> http://www.osgi.org/javadoc/r2/org/osgi/service/cm/ManagedService.html#updated%28java.util.Dictionary%29
>> > :
>> > - The Configuration Admin service must call this method on a thread other
>> > than the thread which initiated the callback. This implies that
>> implementors
>> > of Managed Service can be assured that the callback will not take place
>> > during registration when they execute the registration in a synchronized
>> > method.
>> >
>> > While the stop is synchronized, the start isn't. Can this be the problem?
>> >
>> > Thanx in advance!
>> >
>> >
>> > On Mon, Dec 7, 2009 at 4:47 PM, David Bosschaert <
>> [email protected]
>> >> wrote:
>> >
>> >> Hi Alexander,
>> >>
>> >> I just walked through the Discovery Demo as described here:
>> >> http://cxf.apache.org/dosgi-discovery-demo-page.html
>> >> and it works fine for me.
>> >>
>> >> Looking at the source code where you get the exception:
>> >> > java.lang.NullPointerException
>> >> >    at
>> >> >
>> >>
>> org.apache.cxf.dosgi.discovery.zookeeper.Activator.updated(Activator.java:60)
>> >>
>> >> to me it seems like the updated() callback is made before the
>> >> bundle.start() has returned. Hmmm, there might be a race condition
>> >> here ...
>> >>
>> >> Is it possible for you to provide a test case that consistently fails?
>> >> Otherwise, did you walk through the Discovery Demot page mentioned
>> >> above? Does that work for you?
>> >>
>> >> Thanks,
>> >>
>> >> David
>> >>
>> >> 2009/12/7 Alexander Broekhuis <[email protected]>:
>> >> > Hi all,
>> >> >
>> >> > When using the 1.1 release, I get a nullpointer if discovery is used:
>> >> >
>> >> > *ERROR* {org.osgi.service.cm.
>> >> > ManagedService}={service.pid=org.apache.cxf.dosgi.discovery.zookeeper,
>> >> > zookeeper.port=2181, zookeeper.timeout=3000, service.id=38}:
>> Unexpected
>> >> > problem updating configuration
>> >> > java.lang.NullPointerException
>> >> >    at
>> >> >
>> >>
>> org.apache.cxf.dosgi.discovery.zookeeper.Activator.updated(Activator.java:60)
>> >> >    at
>> >> >
>> >>
>> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:959)
>> >> >    at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
>> >> >
>> >> > I used the 1.1 snapshot before, and never had this problem with
>> >> discovery.
>> >> > Is there something I forgot?
>> >> >
>> >> > I am using the singlebundle release with the latest (3.2.1) zookeeper.
>> >> >
>> >> > --
>> >> > Met vriendelijke groet,
>> >> >
>> >> > Alexander Broekhuis
>> >> >
>> >>
>> >
>> >
>> >
>> > --
>> > Met vriendelijke groet,
>> >
>> > Alexander Broekhuis
>> >
>>
>
>
>
> --
> Met vriendelijke groet,
>
> Alexander Broekhuis
>

Reply via email to