您的软件已经就位,但您仍然需要一种更有效的方法来使您的技术用户能够扩展平台。
尽管 OSGi 为大多数 Java 开发人员所熟知,但将其集成到您的产品中似乎是一项艰巨的任务。 对 OSGi 的精确工作缺乏明确性进一步混淆了前进的道路。
与他们想尝试的任何东西相比,OSGi 对许多 Java 开发人员来说更像是试图在广阔的海洋中航行。
本文将使用简单的程序向您介绍 OSGi Felix spring 教程,并通过它的优点和其他重要细节。
那么什么是 OSGi?
称为 OSGi(开放服务网关倡议)的 Java 框架使创建和分发模块和组件成为可能。
它强调函数封装和松散耦合,这为开发人员提供了几个优点,包括易于在源代码之间转移的模块化功能和不需要无休止依赖的测试。
OSGi 是如何工作的?
Java 的动态组件系统由一组称为 OSGi 的规范定义。 这些规范支持一种开发方法,其中应用程序由多个部分构建,然后打包成捆绑包。
这些组件使用本地和基于网络的服务进行通信。 目标是使程序的核心代码尽可能紧凑。 此代码与多个组件之间的高度耦合是可能的。
应用程序的可重用构建元素称为组件。 想想诸如电子商务网站的购物车或员工管理系统的工资单应用程序之类的功能。
组件可以使用 OSGi 向其他组件隐藏它们的实现,并且只通过服务向它们提供必要的数据。
这可以防止组件无意中更改它们不应访问的数据并管理依赖项。
OSGi 应用程序中组件之间的所有连接都是通过理想世界中的服务建立的。 Java 包包含为服务指定的 API。
服务提供商和客户之间的协作需要使用构成 API 的类和/或接口。
所有的 OSGi 组件都打包在包中,每个包都包含它们运行所需的资源。 Bundles 非常清楚它们需要从环境中得到什么以及它们的能力。
认证的益处
- OSGi 应用程序可以访问外部包存储库。
- 该框架允许在模块级别进行面向服务的设计。
- 除了标准化和更容易集成第三方库之外,它还可以管理应用程序包的版本和依赖项。
- 应用程序更能适应不断变化的需求,更便携,并且可以更快地重新设计。
- A Web应用程序 由于框架与 Java EE 编程模型的集成,可以将其部署为一组具有动态生命周期的版本化 OSGi 包。
- 该框架不是作为应用程序的一部分安装为第三方库,而是以作为应用程序服务器运行时的一部分提供的标准化形式提供 Spring Framework 的声明性组装和简化的单元测试。
- 对于由几个具有动态生命周期的版本捆绑包组成的企业应用程序,该框架提供了隔离。
- 它包含一个集成的包存储库,可以存储多个应用程序使用的共享通用包和版本化包,防止每个应用程序部署每个共享库的单独副本。
OSGi Felix 春季入门
获取资源
通过从以下位置下载 Apache Karaf 的最新版本 本网站,我们可以开始我们的 OSGi 冒险了。
基于 Apache Felix(OSGi 规范的 Apache 实现),Apache Karaf 为基于 OSGi 的应用程序提供了一个平台。
Karaf 在 Felix 之上提供了各种有用的功能,可以帮助我们熟悉 OSGi,例如使我们能够与平台通信的命令行界面。
捆绑包的入口点
应用程序必须先打包为 OSGi 包,然后才能在 OSGi 环境中运行。 此外,必须指定应用程序入口点; 它不是标准的 public static void main(String[] args) 函数。
所以让我们从创建一个“你好世界” 基于 OSGi 的应用程序。
我们首先建立一个基本的 OSGi API 依赖:
OSGi 运行时将有权访问依赖项,因此包不需要包含它。 因此,它被标记为已提供。
现在让我们创建简单的 HelloWorld 类:
充当捆绑包入口点的类必须实现 OSGi 提供的 BundleActivator 接口。
当包含此类的包启动时,OSGi 平台调用 start() 函数。 另一方面,在捆绑包停止前不久,调用了函数 stop()。
我们不要忘记每个捆绑软件只能有一个 BundleActivator。 两种方式都可以使用给定的 BundleContext 对象与 OSGi 运行时通信。
创建捆绑包
通过进行必要的更改,使 pom.xml 成为真正的 OSGi 包。
我们必须首先明确表示我们的目标是生产一个捆绑包。
然后,我们使用 maven-bundle-plugin 将 HelloWorld 类打包为 OSGi 包,由 Apache Felix 社区提供:
我们希望包含在包的清单文件中的 OSGi 标头的值在说明部分中指定。
Bundle-Activator 确实是用于启动和停止捆绑的 BundleActivator 解决方案的正确限定名称。 它与刚刚创建的类兼容。
虽然它不是 OSGi 标头,但 Private-Package 标头指示插件将包添加到包中,但不能让其他插件访问它。 应该使用 mvn install 命令来创建包。
安装和运行捆绑包
让我们通过运行以下命令开始 Karaf:
其中“KARAF HOME”是指设置 Karaf 的文件夹。 当出现 Karaf 控制台提示时,我们可以使用以下命令安装 bundle:
使用本地 Maven 存储库是告诉 Karaf 加载包的方式。
返回捆绑包的数字 ID,Karaf 将其写出。 此 ID 可能会有所不同,具体取决于之前安装的捆绑包数量。 捆绑包现在已经成功安装,启动它的命令如下:
启动包的那一刻,会显示“Hello World by Jay”。 我们现在可以使用以下命令停止并删除捆绑包:
控制台显示“Jay 的再见世界”。
结论
通过使用 OSGi,开发人员可以轻松地向现有 Web 应用程序添加新功能,同时保持其安全并与主程序的其他组件隔离。
我们在这篇文章中了解了 OSGi,包括它的功能、优势和简单的程序。 将 OSGi 合并到您自己的应用程序中并不困难。
编码愉快!
发表评论