2013-07-23 83 views
1

我有一個在Equinox OSGI框架上運行無限循環的捆綁軟件。由於這個包,當我再次運行框架時,我無法啓動一個新的包。在這種情況下我怎樣才能阻止這種捆綁?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包,而它正在執行一個方法,並且是否允許。

回答

2

我假定你的包在其BundleActivator.start方法中進入了一個無限循環,因此綁定了OSGi回調函數。顯然這不是你應該做的!你別無選擇,只能關閉JVM,可能是強制性的。

現在的問題是阻止下次啓動OSGi時自動重新啓動軟件包。確保這一點的最簡單方法是刪除OSGi上一次運行時啓動的軟件包列表中的「存儲」目錄。不幸的是,存儲目錄的位置取決於配置屬性,並且您尚未指定如何配置OSGi。 Equinox的默認設置是configuration/org.eclipse.osgi,所以請嘗試刪除。您也可以嘗試使用-clean運行。

關於如何在執行方法時停止OSGi包:當然,您可以停止,這將導致其stop方法執行。你可以用這種方法做任何你喜歡的事情:一般來說,你應該打算清理你在start方法中創建的任何東西。但是如果你有一個失控的線程,那麼基本上你什麼都做不了,因爲Java沒有辦法殺死一個線程,它只提供一個合作的方法。

OSGi無法更改Java的基本規則,所以失控線程在OSGi中與在任何其他Java應用程序中一樣多。

+0

謝謝尼爾...假設我有一個包在其方法之一中提供了「Hello World」消息無限次的包....現在,我面臨的問題是我不能調用stop(),除非此方法完成執行(這是不可能的),那麼我該怎麼做呢? –

+0

希望你已經有了另一個線程,你可以稱之爲「停止」。但沒有多少意義。殺死JVM。 –

+0

我殺了JVM,並刪除了目錄。現在一切都很好。但是現在我需要演示如何在運行方法時停止一個包。我想這樣做是爲了看看這個過程是完全死亡還是會發生什麼。 –