2011-08-29 90 views
0

所以,我有一堆OSGi包(.jars)執行一堆「業務邏輯」。一切都很好,直到現在我一直使用gogo命令行外殼與軟件包進行交互。將Web界面添加到OSGi應用程序的最佳技術是什麼?

我想添加一個web界面。

我最初的想法是將接口綁定到同一個OSGi容器/實例中。我想我會製作一個輕量級的嵌入式Jetty包,然後加載一個.war。理論上,servlet可以直接與其他OSGi服務進行對話。

在現實世界中,會有幾個應用程序實例互相交談。我不確定是否最好有1個Web界面連接到每個業務應用程序的本地或每個Web界面。

對技術沒有限制或偏好,只是它是開源的。

我的問題是;

  • 這是否吸吮?
  • 有沒有更好的方法來做到這一點?
  • 我應該將.war和業務邏輯分成兩個獨立的進程嗎?

回答

0

看看Virgo Web Server,以前是Spring DM Server。它有一個成熟的servlet容器,它是一個完整的OSGi容器,如果你想要走這條路線,它還內置了Spring DM。我不認爲有任何理由將網絡和業務分解成單獨的流程。無論是單個web應用程序還是每個業務包,都可能看起來更像是一個設計問題:「它是一個結合了許多基礎問題的單個UI,還是這些都是單獨的關注點?」

0

最簡單的方法是將您的servlet註冊到OSGi HttpService,例如Apache Felix HTTP Service軟件包。我認爲Felix的Felix變體嵌入了Jetty,但您不必在意,在OSGi級別您只能看到標準的HttpService。

配合服務器端庫生成JSON(我使用的是Apache Sling commons.json包)和客戶端庫(如jQuery),您擁有一個功能強大且簡單的工具包,您的servlet可以充當前端爲您的OSGi服務。

0

這聽起來像您的Web界面是一個管理界面而不是最終用戶界面?

如果當時的情況下在Felix webconsole看看,你可以easily extend it通過編寫plugin

而且控制檯本身就是換膚功能,所以如果它只是一個內部應用程序,那麼這將可能是最簡單的實現。有一些插件用於管理/查看

我不會嵌入Jetty,因爲Betrand聲明存在HTTP服務實現,但也可以直接部署戰爭PAX Web

RE:「我應該將.war和業務邏輯分成兩個獨立的進程嗎?」除非(高可用性或負載均衡需要),否則我不會分發應用程序,但是您應該將應用程序分解爲一場小型戰爭(僅限UI)並分離服務包。

網絡應用程序是否應該管理所有實例或每個實例一個取決於許多其他事情;

  • 您是否可能同時部署不同的版本? (如果是這樣,那麼每個實例的web應用程序將導致更少的頭痛)
  • 它是否面向客戶端? (單獨的實例可能更容易安全)
  • 你需要聚合信息嗎? (單Web應用程序)

不知道你是如何計劃讓應用程序進行通信,但是Apache CXF可以實現遠程服務符合規範在Web服務和Eclipse通信框架提供了更多的傳輸協議。

相關問題