2015-11-03 40 views
0

根據我對CQ5開發的理解,服務層將位於OSGI軟件包中。這是否意味着我將創建它的每個服務類將相當於一個OSGI包?例如,如果我的CQ5應用程序有3項服務,即:登錄服務,用戶管理服務,註冊服務是否意味着還將部署3個OSGI軟件包?以及這個捆綁包如何與對方進行溝通?OSGI Bundle CQ5中的其他軟件包的結構和通信

回答

1

不是。軟件包更像模塊。因此,您可以基於其功能將您的服務拆分爲捆綁包,或者如果您想在其他項目中重複使用它們。例如,你可以有一個結構:

  • 項目名稱核心:那裏你可以有服務,可以通過其他項目中使用。就像一些用於外部服務的內容饋給發生器一樣,登錄服務(如果它在其他項目中也很有用:
  • projectname-ui-beans:在那裏你可以有bean,你將在你的jsp上注入頁;
  • 項目名稱服務:一般的服務,這是特定於該項目,如搜索或註冊;
  • 項目名稱,標籤庫:你有你自己的JSP標記執行;
  • projectname- it-test:捆綁wi整合測試;
  • projectname-some-specific-stuff:可以有一些服務不依賴任何其他包,如一次性內容操作;

請參閱this主題的基本結構和Maven原型創建它。

Upd1

  • 你可以有你的包爲另一個包的依賴之一:束之間的通信可以通過兩種方式來完成。然後,您可以使用@Reference從其他軟件包獲取服務
  • 也可以使用事件進行通信,有關詳細信息,請參閱this
0

在我看來,擁有小而專注的包是很好的,但它並不一定意味着每個服務包含一個包。在你的情況下,登錄,用戶管理和註冊看起來足夠不同以保證他們自己的捆綁包。但是,例如用戶管理可能由多個服務實現,所有服務都由相同的包提供。

一個好的經驗法則是設計你的捆綁包,以便刪除其中一個禁用一致的功能單元。例如,刪除「用戶管理」軟件包會禁用所有用戶管理功能,理想情況下不會影響登錄或註冊。

至於溝通,請在服務中思考。使用聲明式服務,OSGi組件只需聲明他們需要哪些服務(通常使用@Reference註釋),並且框架只負責在組件需要的所有服務都可用時啓動組件。

相關問題