根据我在使用CQ5进行开发时的理解,服务层将位于OSGI捆绑包上。这是否意味着我将创建的每个服务类都相当于一个OSGI Bundle?例如,如果我的CQ5应用程序有3项服务即:登录服务,用户管理服务,注册服务是否意味着还将部署3个OSGI包?以及这些捆绑包如何相互通信?
答案 0 :(得分:1)
不是真的。捆绑包更像是模块。因此,您可以根据其功能将服务拆分为捆绑包,或者如果您希望在其他项目中重复使用它们。例如,您可以拥有下一个结构:
请参阅this主题了解基本结构和Maven原型以便创建它。
Upd1 :捆绑包之间的通信可以通过两种方式完成:
答案 1 :(得分:0)
在我看来,拥有小型,专注的捆绑包是很好的,但它并不一定意味着每个服务一个捆绑包。在您的情况下,登录,用户管理和注册看起来完全不同,以保证自己的捆绑。但是,例如,用户管理可能由多个服务实现,所有服务都由同一个包提供。
一个好的经验法则是设计捆绑包,以便删除其中一个捆绑包会禁用一致的功能单元。删除您的用户管理"例如,bundle会禁用所有用户管理功能,理想情况下不会影响登录或注册。
至于沟通,请考虑服务。使用Declarative Services,OSGi组件只需声明它们需要哪些服务(通常使用@Reference注释),并且框架只需在所需的所有服务都可用时启动组件。