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