2014-05-06 43 views
0

我是OSGI技術的新手。動態添加模塊到工作程序的想法對我來說似乎非常有吸引力。我知道OSGI每個bundle使用自己的類加載器。據我瞭解,由於 這個我們有「熱部署」。但我誤解了這是如何工作的。如何爲「熱部署者/替代者」編寫hello world?

我想了解這項技術是如何工作的。因此,我想用熱的.class文件替換編寫自己的「熱部署者」。

舉例來說,在我的腦海裏誕生了以下思路:

編寫應用2個線程:

第一線outputes一些訊息話題(old message)在永恆的週期

在第二個線程,我們等待一段然後替換輸出old message的class文件。現在我們的thread1輸出new message。在執行第二個線程後立即輸出new message。我知道我們不能卸下班級部隊。

我只想看到有可能編寫自定義「熱部署者」。

我無法在Google找到可以幫助我的信息。

請幫我實現我的想法。

P.S.

我真的沒有足夠的信息可以在哪裏搜索信息以及如何實現。 我已閱讀所有答案 - 但我無法實現它。

P.S. 我知道在jsp和servlets中已經解決了熟悉的問題。規範要求熱替換jsp而不重新啓動服務器。但我知道jsp最終編譯爲.class文件。

+0

看看這裏:http://stackoverflow.com/questions/148681/unloading-classes-in-java –

+1

我認爲你應該從深入瞭解Java中的類加載是如何工作的基本理解開始的。首先理解類加載器的概念是非常重要的。之後,您可以嘗試編寫自定義類加載器。線程與熱部署無關,類加載器是。 – eis

+0

@Alexandre Santos我有alerady閱讀它 – gstackoverflow

回答

1

在OSGi中,您可以在運行時部署或更新捆綁包,而不是在捆綁包中的類。可能您正在尋找JRebel提供給您的類似解決方案。

而不是類替換,你應該集中精力設計你的包是簡單的。在這種情況下,捆綁部署將像您剛剛替換一個類(一會兒)一樣快。另外,您應該按照如果更新軟件包的方式來設計架構,這不會導致您重新啓動所有技術。

我建議,你應該閱讀有關他人使用OSGi的世界裏保持自己捆綁懶洋洋地耦合模式:whiteboard patternextender model

+0

我可以簡單地看作是一個班級包 – gstackoverflow

+0

我很抱歉,但我沒有明白你的意思 –

+0

在我的簡單情況下,我可以認爲班級是P捆。對不起英語 – gstackoverflow

1

我想學習如何開車....請解釋我如何建立自己的燃氣渦輪發動機。是的,我知道汽車不使用燃氣渦輪發動機,但我仍然想建造一個,因爲我相信這會幫助我更好地理解駕駛。

OSGi模塊重新加載不能在類級別工作,它在作爲類聚合的bundle(模塊)級別工作。它通過處理和重新創建整個類加載器來實現這一點。

想要了解底層細節並沒有什麼錯,但通常應該在廣泛的理解之後才能知道。

相關問題