Thanks.

So that's expected behaviour - and all makes sense.

Regards

Mark

On 25/01/2008, Jeremy Volkman <[EMAIL PROTECTED]> wrote:
>
> Mark,
>
> Since your service interface (IA.java) is contained within bundleA,
> bundleB requires a package import from bundleA.  The effect that
> you're seeing is that the old version of bundleA remains in the system
> and is still used by bundleB after you call "update".  Therefore you
> now have two instances of bundleA in the system: the old one, still
> used by bundleB, and the new refreshed one.
>
> Since you called 'refresh', the old bundleA was stopped, and so were
> any registered services (which is why you see 'removedService').  The
> new bundleA was also started, and a new IA service was registered.
> However, since bundleB is still using the package import from the old
> bundleA, it does not get notified of the new bundleA's service (refer
> to ServiceListener vs. AllServiceListener).
>
> Calling 'refresh' instructs the framework to perform the steps
> outlined at
> http://www2.osgi.org/javadoc/r4/org/osgi/service/packageadmin/PackageAdmin.html#refreshPackages(org.osgi.framework.Bundle[])
> .
> This in turn stops bundleB, gets rid of the old bundleA and links
> bundleB to the new bundleA's package source.  When bundleB is
> restarted and linked to the new bundleA, it can once again see the IA
> service.
>
> Sorry if that was a bit confusing.. maybe someone else can clarify a bit
> more.
>
> -Jeremy
>
> On Jan 25, 2008 11:33 AM, Mark <[EMAIL PROTECTED]> wrote:
> >
> > This is driving me mad. I have two bundles A and B. B track the service
> > offered by A.
> >
> > However if I call update on A then I get a remove Service notification
> but
> > no add Service notification - that is until I issue a refresh command ?
> is
> > this a bug?
> >
> > I have written the same simple code 10 time .. see the results.
> >
> > I have attached the two bundles and the two eclipse plugin projects (as
> one
> > zip) - just in case a Eclipse/OSGi guru like yourself can figure it out?
> >
> > ========================================
> >
> >  C:\eg>java -jar equinox.osgi.jar -console
> >
> > osgi> ss
> >
> > Framework is launched.
> >
> > id      State       Bundle
> > 0       ACTIVE      org.eclipse.osgi_3.4.0.v20071207
> >
> > osgi> install file:bundleA_1.0.0.jar
> > Bundle id is 1
> >
> > osgi> install file:bundleB_1.0.0.jar
> > Bundle id is 2
> >
> > osgi> ss
> >
> > Framework is launched.
> >
> > id      State       Bundle
> > 0       ACTIVE      org.eclipse.osgi_3.4.0.v20071207
> > 1       INSTALLED   bundleA_1.0.0
> > 2       INSTALLED   bundleB_1.0.0
> >
> > osgi> start 1
> >
> > osgi> start 2
> > addingService
> >
> > osgi> stop 1
> > removedService
> >
> > osgi> start 1
> > addingService
> >
> > osgi> update 1
> > removedService <----- no add !
> >
> > osgi> stop 2
> >
> > osgi> start 2
> >
> > osgi> refresh <- Only get add after refresh
> >
> > osgi> addingService
> >
> >
> > osgi>
> >
> >
> >
> > On 25/01/2008, Neil Bartlett <[EMAIL PROTECTED] > wrote:
> > >
> > >
> > > Hi Mark,
> > >
> > >
> > > Many thanks for your kind words!
> > >
> > >
> > > Regarding the service tracker problem... that's not the behaviour I
> would
> > expect to see, and I've just put together a small test case which prints
> a
> > message in the addingService, removedService and modifiedService methods
> of
> > the ServiceTracker. When I update the bundle that registered the
> service, I
> > see the following:
> > >
> > >
> > > osgi> update 5
> > > Removed service
> > > Added service
> > >
> > > osgi>
> > >
> > >
> > >
> > > Which seems to be the way it should work. I suggest posting a message
> to
> > the equinox-dev mailing list (
> > https://dev.eclipse.org/mailman/listinfo/equinox-dev) explaining the
> problem
> > in detail and including a minimal code sample that reproduces the
> problem.
> > >
> > >
> > > Regards,
> > > Neil
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > On 25 Jan 2008, at 13:42, Mark wrote:
> > >
> > > Neil,
> > >
> > > First off I have to thank you in a big way, because it was you
> articles
> > that got me up and running on OSGI.
> > >
> > > I am also glad that you are putting together a book... because I was
> > thinking about it myself...in practice or in action!, would you like
> some
> > help?
> > >
> > > ..Anyway the reason for this mail...
> > >
> > > I was looking at the Listeners Considered Harmful: The "Whiteboard"
> > Pattern white paper, and I put together a very simple two bundle example
> (on
> > Equinox),
> > >
> > > Bundle A (offers a service)
> > > Bundle B (consumes service A, using a Service Tracker)
> > >
> > > So far so good, and not exactly rocket science.
> > >
> > > However this morning I discovered that if you update A - then you must
> > refresh A in order for B to receive the added service event.
> > >
> > > This came as a surprise, go I Googled a while, and came up short. So I
> was
> > wondering if you had some words of widom for me on this ?
> > >
> > > Kind Regards
> > >
> > > Mark
> > >
> > >
> >
> >
> >
> > _______________________________________________
> > equinox-dev mailing list
> > equinox-dev@eclipse.org
> > https://dev.eclipse.org/mailman/listinfo/equinox-dev
> >
> >
> _______________________________________________
> equinox-dev mailing list
> equinox-dev@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/equinox-dev
>
_______________________________________________
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Reply via email to