我是新的OSGi,但它很有趣。 是否可以在osgi包和java應用程序之間進行交互?如果可能的話,怎麼樣? 謝謝!如何從java應用程序中使用OSGi
上下文是我有一個大的Java SE應用程序(作者是另一個程序員)與許多依賴關係。首先,我的目標是添加新的功能和二次更換架構。我會嘗試使用OSGi,但我不想編寫兩次代碼,因此我想現在以捆綁的方式編寫新代碼。但是使用舊應用程序中的這個新功能。
我是新的OSGi,但它很有趣。 是否可以在osgi包和java應用程序之間進行交互?如果可能的話,怎麼樣? 謝謝!如何從java應用程序中使用OSGi
上下文是我有一個大的Java SE應用程序(作者是另一個程序員)與許多依賴關係。首先,我的目標是添加新的功能和二次更換架構。我會嘗試使用OSGi,但我不想編寫兩次代碼,因此我想現在以捆綁的方式編寫新代碼。但是使用舊應用程序中的這個新功能。
我將OSGi視爲一種結構化技術。您可以使用它來定義應用程序的組件結構。因此,您的所有應用都是有效的OSGi捆綁包集合。因此,交互不是問題,只是你的應用程序的不同部分以正常方式進行交互。
[編輯以下評論作出澄清。]
你有一個根本的決定:是你的OSGi代碼會在同一個進程中執行的原始或在一個單獨的進程?
分離意味着可以根據需要自由構建新代碼,利用OSGi,但代價是進程間通信的複雜性和性能開銷。您很可能最終會對現有應用程序進行重大更改,以便以某種形式支持遠程處理。除非您的OSGi代碼碰巧是其他遠程客戶端可能使用的某種可重用服務,否則我認爲這不是一種好方法。
如果在同一個過程中,我會說你需要咬緊牙關,並說這將是一個OSGi應用程序。採用現有應用程序並使其在OSGi中運行的努力量不需要過多。
假設您將現有應用程序視爲一個巨大的OSGi包?初始化會有一些工作,但剩下的「只是工作」?如果您將此作爲第一步,那麼現有應用程序的真正重新架構和模塊化將被推遲。然後,您只需公開新模塊需要的接口,並在必要時使用新模塊提供的服務。立即通過構建依賴關係獲得OSGi的好處。
但如何做到這一點互動? – 2010-05-04 10:00:36
請多解釋一下問題。如果你有一個在一個Jar中定義的類的Java對象,它想要使用另一個Jar中定義的類的功能,你會怎麼做? OSGi除了一些獲取內容的小細節之外沒有什麼變化 - 這些都在OSGi教程中有記錄。實際的方法調用只是方法調用。請解釋您所看到的交互問題。 – djna 2010-05-04 12:35:00
我會嘗試 我有一個很大的java se應用程序(作者是另一個程序員)與許多依賴項。我的第一個目標是添加新的功能和第二次更改的體系結構。我會嘗試使用OSGi,但我不想編寫兩次代碼,因此我想現在以捆綁方式編寫新代碼。 但是使用舊應用程序中的這個新功能。剛剛:) – 2010-05-04 13:45:39
是的!是!是的!這是一個開始利用OSGi並向基於服務的應用程序發展的完美方式。
使用4.2啓動程序API創建框架並不知道您使用的是哪個框架實現,這是微不足道的。你會得到一個Framework對象,這實際上是一個OSGi Bundle,並且可以爲你提供一個BundleContext。這可以用來安裝捆綁軟件。這一切都在規範中描述,但您可以在Felix中找到很多具體和優秀的示例:http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html。自從第一天起,Felix就明確宣傳嵌入到應用程序中。
這種方法的難點在於適應模塊化及其限制。爲了有用,您將不得不在OSGi包和應用程序之間共享類;這需要使用org.osgi.framework.systempackages.extra屬性從應用程序顯式導出這些共享包。此屬性是您的應用程序的Export-Package標題。
由於Java中的類加載模型,不可能從框架中導入包中的包。這意味着您的應用程序代碼只能使用這些服務的包在應用程序類路徑中的框架中的服務。
這樣做的結果是,新功能傾向於轉移到具有完全可見性的捆綁包:導出的應用程序包以及任何捆綁包。但是,這可能正是你想要的。
所以要注意這個潛在的隱患。嵌入,然後隨着時間的推移將您的所有代碼遷移到捆綁包中,以便您的應用程序僅成爲OSGi啓動器。但是,請非常瞭解您在這兩種環境之間共享的軟件包。
祝你好運,讓我們知道這是怎麼回事。
謝謝,我會盡量使用這種方式 – 2010-05-04 14:30:58
使用OSGi構建的應用程序可以像兩個普通(Java)應用程序一樣進行交互。所以,通過加載/保存文件。或者當其中一個創建爲OSGi http服務器時,則只需通過http與該(OSGi)服務器進行通信。只要按照以前的方式來考慮它,不包括OSGi。
「OSGi bundle和java應用程序之間的交互」是什麼意思? – Riduidel 2010-05-03 09:03:13