[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [equinox-dev] NPE from RegistryStrategyOSGI.onStop()

Oleg,

Thanks for you quick answer. I tried your suggestion but it didn't work as you described. I added an activator class into MyBundle. MyBundle's activator#start() is called after org.eclipse.equinox.registry's. And so does the activator#stop().This is even worse. Because I got another exception in MyBundle's activator#stop() method.

java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IExtensionRegistry
    at registry.test.Activator.stop(Activator.java:30)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$3.run (BundleContextImpl.java:1032)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.stop(BundleContextImpl.java:1028)
    at org.eclipse.osgi.framework.internal.core.BundleHost.stopWorker (BundleHost.java:396)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.suspend(AbstractBundle.java:502)
    at org.eclipse.osgi.framework.internal.core.Framework.suspendBundle(Framework.java:1067)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.decFWSL(StartLevelManager.java:619)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:283)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.shutdown (StartLevelManager.java:256)
    at org.eclipse.osgi.framework.internal.core.SystemBundle.suspend(SystemBundle.java:190)
    at org.eclipse.osgi.framework.internal.core.Framework.shutdown(Framework.java:537)
    at org.eclipse.osgi.framework.internal.core.OSGi.shutdown(OSGi.java:61)
    at org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._shutdown(FrameworkCommandProvider.java:214)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke (Method.java:597)
    at org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:145)
    at org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand( FrameworkConsole.java:293)
    at org.eclipse.osgi.framework.internal.core.FrameworkConsole.console(FrameworkConsole.java:278)
    at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java :213)
    at java.lang.Thread.run(Thread.java:619)

I attached the test bundle for your reference.

On 10/21/06, Oleg Besedin < obesedin@xxxxxxxxxx> wrote:

Hi Jason,
The quick answer is that you need to stop your custom registry before org.eclipse.equinox.registry bundle is stopped.

Normally bundles are stopped in the reverse order of dependency, i.e., if a bundle MyBundle depends on the org.eclipse.equinox.registry, then MyBundle is stopped first on shutdown, then org.eclipse.equinox.registry. So, normally, you could put the code to stop your custom registry into MyBundle's activator#stop().

I *guess* that putting inappropriate bundle start levels could break the shutdown order.

Thanks,
Oleg



"Jason Hao" <jason.hao@xxxxxxxxx >
Sent by: equinox-dev-bounces@xxxxxxxxxxx

10/20/2006 03:52 AM

Please respond to
Equinox development mailing list <equinox-dev@xxxxxxxxxxx>

To
equinox-dev@xxxxxxxxxxx
cc

Subject
[equinox-dev] NPE from RegistryStrategyOSGI.onStop()







Hi all,

I'm working on a project which is based on OSGi and equinox. The project also includes equinox extension registry bundle. Since my extensions are defined in files which are not in side the bundles, I need to load these extensions into registry by IExtensionRegistry.addContribution() method. And addContribution() method needs the master token which is under control of equinox registry bundle and I can't get it, so I have to create my registry instead of using the default registry. Here are what I have done.

1.        Add "-Declipse.createRegistry=false" into VM arguments. This will disable the default registry.
2.        Create my extension registry component and register it with declarative service spec. In the activate() method I creat my OSGi strategy and registry. In the deactivate() method I call IExtensionRegistry.stop() method to stop the registry.
3.        Start my application and the registry works well.
4.        Shutdown the OSGi framework by typing "shutdown" command in the console. org.eclipse.core.internal.registry.osgi.Activator.stop () method is called and the bundle context is set to null. Then my registry deactivate() method is called. I got java.lang.NullPointerException from org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.onStop(RegistryStrategyOSGI.java :204) since the bundle context is null.
I wonder if there's any way I can work around. Thanks.

--
Best Regards,

Jason Hao
_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/equinox-dev


_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/equinox-dev





--
Best Regards,

Jason Hao

Attachment: registry.test.zip
Description: Zip archive