gpt4 book ai didi

java - bundle 内的 bundle

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:17 27 4
gpt4 key购买 nike

我正在尝试使用 OSGi 实现客户端-服务器模型。服务器应用程序是在计算机中运行的 OSGi 框架,客户端应用程序远程连接到其控制台并通过 Java 套接字发送命令并接收正确的响应。每个客户端应用程序都由多个模块组成。现在我有两种方法:

1- 每个模块都可以是安装在框架上的 bundle ,客户端应用程序从中接收服务。然而这个解决方案有一个问题。如果我希望每个客户端都有一个特殊的更新方法(例如, bundle A 应该在其中一些客户端中更新,但在其他客户端中不应更新),我该如何管理此类更新?

2- 每个客户端应用程序都是一个 bundle 。现在我关心的是,如何管理更新操作,以便在更新客户端应用程序时也更新内部包?

最佳答案

您的问题绝对是通用的,不可能在合理的空间和时间内提供详细的答案。不过,我会尝试提出一些想法和建议。

  1. 在不同的客户端上更新不同的 bundle 不是问题。从编程的角度来看,您有很多选择(我宁愿建议您阅读 OSGi in Action 以了解遵循规范的 OSGi 框架提供的设施)。我不知道您是否打算使用远程 OSGI(从 Enterprise specification 第 13 章开始)。显然,您希望保留客户端-服务器 API 包/服务。除此之外,OSGi bundle 可以从公开它的任何人那里选择 bundle /服务(更多内容请再次参见 OSGi 实际操作)。配置是另一个方面:这取决于谁(客户端或服务器)控制更新;在最简单的情况下,您只需手动处理 bundle 并从框架控制台安装/启动/停止/卸载它们。

  2. 除非我在你的描述中遗漏了一些东西,否则你不能选择这条路径,因为你不能拥有一堆 bundle 。这个概念在裸 OSGi 规范中根本不存在。包层次结构是完全平坦的,因此您无法执行“物理隐藏”。要从逻辑上将 bundle 隐藏在其他 bundle 后面,您必须对它们公开的服务进行操作,但这个负担完全由您承担。您可以通过包执行相同的操作,但我不建议这样做。话虽如此,我还没有完全了解最新的服务组件架构 (SCA) 实现,例如 Tuscany版本 2。这个可以为您提供帮助,因为它 promise 支持 OSGi。 Tuscany SCA in Action这本书虽然最近出版,但仅涵盖第 1 版。值得一读,但可能不是您想要的内容。总而言之,您不能从严格意义上整体更新 OSGI 应用程序:您必须指定要更新的每个包。这必须被视为一个优势:您可以更好地控制您的应用程序。缺点显然在于以更细的粒度管理更新的工作量。

我希望这个简化的讨论对您有用。

关于java - bundle 内的 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com