我有一个包,它在Equinox OSGI框架上使用无限循环运行。因为有了这个包,当我再次运行框架时,我无法启动一个新的包。在这种情况下,我怎样才能阻止这个捆绑呢?
下面是我输入的启动框架的命令:
java -jar org.eclipse.osgi_3.9.0.v20130529-1710.jar -console它无限地显示了这个信息:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
...........回答这个问题还有助于回答如何在OSGI包执行方法时停止它,以及是否允许这样做。
发布于 2013-07-23 20:09:47
我假设您的包在其BundleActivator.start方法中进入了一个无限循环,因此绑定了OSGi回调。显然这不是你该做的事!!您别无选择,只能关闭JVM,可能是强制关闭。
现在的问题是,下次启动OSGi时,不要再次自动启动包。确保这一点的最简单方法是删除“存储”目录,在该目录中,OSGi会记住上次运行时启动的包列表。不幸的是,存储目录位置受制于配置属性,并且您没有指定如何配置OSGi。Equinox的缺省值是configuration/org.eclipse.osgi,所以尝试删除它。您也可以尝试使用-clean运行。
关于如何在OSGi包执行方法时停止它:当然,您可以停止一个绑定包,这将导致它的stop方法执行。在该方法中,您可以做任何您想做的事情:通常,您应该致力于清理在start方法中创建的任何东西。但是,如果您有一个失控的线程,那么基本上没有什么可以做的,因为Java没有提供杀死线程的方法,所以它只提供了一个协作的interrupt方法。
OSGi无法改变Java的基本规则,因此在OSGi中失控的线程与其他任何Java应用程序一样是一个问题。
https://stackoverflow.com/questions/17819188
复制相似问题