根據我對CQ5開發的理解,服務層將位於OSGI軟件包中。這是否意味着我將創建它的每個服務類將相當於一個OSGI包?例如,如果我的CQ5應用程序有3項服務,即:登錄服務,用戶管理服務,註冊服務是否意味着還將部署3個OSGI軟件包?以及這個捆綁包如何與對方進行溝通?OSGI Bundle CQ5中的其他軟件包的結構和通信
0
A
回答
1
不是。軟件包更像模塊。因此,您可以基於其功能將您的服務拆分爲捆綁包,或者如果您想在其他項目中重複使用它們。例如,你可以有一個結構:
- 項目名稱核心:那裏你可以有服務,可以通過其他項目中使用。就像一些用於外部服務的內容饋給發生器一樣,登錄服務(如果它在其他項目中也很有用:
- projectname-ui-beans:在那裏你可以有bean,你將在你的jsp上注入頁;
- 項目名稱服務:一般的服務,這是特定於該項目,如搜索或註冊;
- 項目名稱,標籤庫:你有你自己的JSP標記執行;
- projectname- it-test:捆綁wi整合測試;
- projectname-some-specific-stuff:可以有一些服務不依賴任何其他包,如一次性內容操作;
請參閱this主題的基本結構和Maven原型創建它。
Upd1:
- 你可以有你的包爲另一個包的依賴之一:束之間的通信可以通過兩種方式來完成。然後,您可以使用@Reference從其他軟件包獲取服務
- 也可以使用事件進行通信,有關詳細信息,請參閱this。
0
在我看來,擁有小而專注的包是很好的,但它並不一定意味着每個服務包含一個包。在你的情況下,登錄,用戶管理和註冊看起來足夠不同以保證他們自己的捆綁包。但是,例如用戶管理可能由多個服務實現,所有服務都由相同的包提供。
一個好的經驗法則是設計你的捆綁包,以便刪除其中一個禁用一致的功能單元。例如,刪除「用戶管理」軟件包會禁用所有用戶管理功能,理想情況下不會影響登錄或註冊。
至於溝通,請在服務中思考。使用聲明式服務,OSGi組件只需聲明他們需要哪些服務(通常使用@Reference註釋),並且框架只負責在組件需要的所有服務都可用時啓動組件。
相關問題
- 1. OSGI軟件包和Web應用程序之間的通信
- 2. OSGi Bundle通過另一個軟件包獲得加載
- 3. CQ5中的Sling Servlet即服務(OSGi包)
- 4. servicemix中OSGi軟件包之間通信的不同方式
- 5. OSGi:在更新其他軟件包時刷新一個軟件包
- 6. 帶有maven-bundle-plugin的OSGI捆綁軟件包
- 7. OSGi - Activator無法訪問Bundle的內部軟件包
- 8. CQ5 OSGi軟件包錯誤 - org.json.simple - 無法解析
- 9. 其他OSGi包的訪問類
- 10. Javascript和從其他包的軟件包中的類
- 11. OSGi中的軟件包和軟件包版本之間的關係是什麼
- 12. 什麼是OSGi捆綁軟件包結構?
- 13. 在Adobe CQ5檢查OSGI包的狀態
- 14. OSGi包春和其他應用
- 15. OSGi/Equinox軟件包找不到文件
- 16. 如何在CQ5/OSGi Bundle(Java)中啓用斷言?
- 17. Apache Karaf和OSGI Bundle
- 18. 訪問osgi bundle的lib jar
- 19. 從其他軟件包導入的結構體是未定義的
- 20. OSGI - 缺少導入的軟件包= org.apache.commons.collections
- 21. OSGI軟件包錯誤:未解決的軟件包73:package = org.apache.commons.httpclient
- 22. OSGI軟件包錯誤 - 軟件包4中未解析的約束:軟件包; (package = com.sun.org.apache.xerces.internal.parsers)
- 23. OSGI bundle .bnd文件和衝突的導入包語句
- 24. 如何轉換Golang中包含其他結構的結構?
- 25. 在VS2017中安裝其他軟件包
- 26. OSGi軟件包如何在沒有Bundle-Activator的情況下啓動
- 27. 來自其他包的golang結構
- 28. OSGi maven-bundle-plugin忽略我的包
- 29. osgi start bundle NoClassDefFoundError
- 30. 通過ctypes中其他結構的指針傳遞結構