It is certainly a failure from the current thread (that is, the thread which is activating the bundle). It can succeed from another thread if the framework impl is willing to wait a while to see if the current state change operation completes.
-- BJ Hargrave Senior Technical Staff Member, IBM OSGi Fellow and CTO of the OSGi Alliance hargr...@us.ibm.com office: +1 386 848 1781 mobile: +1 386 848 3788 From: Shigekuni Kondo <kondo.shigek...@lab.ntt.co.jp> To: OSGi Developer Mail List <osgi-dev@mail.osgi.org>, Date: 2012/07/08 21:04 Subject: Re[2]: [osgi-dev] Q of Bundle.start(int) process Sent by: osgi-dev-boun...@mail.osgi.org Hi Tom, Thank you very much for your replying. I'm sorry my reply is late. # I took holidays in the last week. I got it. I think that the operation in your reply makes sense. The Bundle.uninstall for the bundle whose state is STARTING should be failure (thrown BundleException) regardless of whether the caller thread is same thread or another. Best regards, Shigekuni Kondo On Fri, 29 Jun 2012 07:58:47 -0500 Thomas Watson <tjwat...@us.ibm.com> wrote: > > I'm not sure how other frameworks behave, but Equinox will not allow a > bundle to uninstall itself while the framework is calling the > BundleActivator.start. A BundleException of type STATECHANGE_ERROR would > be thrown from Bundle.uninstall and the state of the bundle would remain in > the STARTING state. If the exception was caught and ignored by the > BundleActivator.start method then the bundle activation would success and > the state would transition to ACTIVE. If the exception was not caught then > the start would fail and the state would transition to STOPPING->RESOLVED. > > I don't think this is spelled out clearly in the specification, but I think > it is reasonable given the fact that the state transition lock for the > bundle cannot be successfully obtained in order to proceed with the > uninstall operation. > > Tom > > > > > > From: Shigekuni Kondo <kondo.shigek...@lab.ntt.co.jp> > > To: OSGi Developer Mail List <osgi-dev@mail.osgi.org>, > > Date: 06/29/2012 01:55 AM > > Subject: [osgi-dev] Q of Bundle.start(int) process > > > > > > > Hi OSGi Experts, > > > I have a question of Bundle.start(int) process. > > [Condition] > BundleA: > Bundle.uninstall() for own bundle is called in BundleActiovator.start > (context). > ------------ > public class Activator implements BundleActivator { > public void start(BundleContext context) throws Exception { > context.getBundle().uninstall(); > } > ... > } > ------------- > # I know that this bundle has no meaning... > > > [Question] > When Bundle.start() for BundleA is called, how should > the framework handle it? > > > As far as I checked the core spec (R4.3), my understanding is as below. > --- > 0. The BundleA's state is INSTALLED. > 1. BundleA.start() is called. > 2. The state of BundleA is set to RESOLVED (and BundleEvent.RESOLVED > is fired). > # In this case, BundleA can be resolved. > 3. The state of BundleA is set to STARTING (and BundleEvent.STARTING > is fired). > 4. BundleA.uninstall() is called in BundleActiovator.start(context). > 5. The framework tries to stop BundleA, but it fails (throws an > exception) because BundleA's state is kept STARTING. > 6. The framework fires FrameworkEvent.ERROR, however it doesn't throw > BundleException. > 7. The state of BundleA is set to UNINSTALLED (and BundleEvent.UNINSTALLED > is fired). > 8. BundleA.uninstall() is returned. > 9. BundleException is thrown because BundleA was uninstalled while > the BundleActivator.start() was running. > 10.BundleA.start() fails. > --- > > In the above case, the BundleA's state is changed STARTING to > UNINSTALLED in process of BundleA.start(). > However, OSGi core spec doesn't permit such status change > (4.4.2 Bundle State). > > > Best regards, > > Shigekuni Kondo > > _____________________________________________ > > Shigekuni Kondo > > Promotion Project 1 > NTT Cyber Solutions Laboratories > NIPPON TELEGRAPH AND TELEPHONE CORPORATION > > 1-1 Hikarinooka Yokosuka > Kanagawa 239-0847 Japan > TEL:+81-46-859-3444 > FAX:+81-46-855-1282 > E-mail:kondo.shigek...@lab.ntt.co.jp > _____________________________________________ > > > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > > _____________________________________________ Shigekuni Kondo Promotion Project 1 NTT Cyber Solutions Laboratories NIPPON TELEGRAPH AND TELEPHONE CORPORATION 1-1 Hikarinooka Yokosuka Kanagawa 239-0847 Japan TEL:+81-46-859-3444 FAX:+81-46-855-1282 E-mail:kondo.shigek...@lab.ntt.co.jp _____________________________________________ _______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev