资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
1、概述 在上文中讲到,Equinox 包括核心框架,标准服务实现,面向 J2EE 的应用,新的部署更新框架及一些其他的研究方向。本文主要针对 Equinox 实现的 OSGi 核心框架及 Equinox OSGi 运行环境的搭建过程进行详细讲述。 用户在阅读下文时,应具有基本的 Java 编程及打包的概念并对 OSGi 标准的构成有一定的了解,理解 OSGi 框架及Bundle 的概念。 2、OSGi 核心框架 从 OSGi 核心框架示意图可以看到, OSGi 核心框架主要包括模块层,生命周期层,服务层及安全层组成。完整的 OSGi核心框架实现,还包括包管理服务(Package Admin)、启动层次服务(Start Level)、条件许可管理(Conditional Permission Admin)、权限管理(Permission Admin)及 URL 处理服务(URL Handlers)等框架服务。 关于 OSGi 核心框架的详细介绍请参考 OSGi 标准规范。 3、Equinox 的 OSGi Framework 实现 Equinox 的 OSGi 框架实现包含在 org.eclipse.osgi 插件项目中。在发布的 Eclipse 环境中,用户可以在 Eclipse 安装目录下的 plugins 目录中找到该插件。该插件一般以 org.eclipse.osgi_.jar的 JAR 文件形式打包。由于是从 Eclipse3.0 以前版本迁移到 OSGi 核心的缘故,目前的 Equinox OSGi 实现中包含的代码非常繁杂。 在 org.eclipse.osgi 项目源代码中用户可以看到除了 OSGi 接口及框架实现外,还包括 adaptor 接口及默认的 adaptor (defaultAdaptor),eclipse adaptor(eclipseAdaptor)实现,控制台实现(console) ,附加服务扩展(supplement) ,Bundle 组件解析 (resolver)和 Bundle JAR 文件校验等功能。 在实际使用中,用户使用该 Jar 文件即可将 OSGi 框架运行起来(参考下文 OSGi 运行环境的搭建)。作为一个产品级的应用,往往存在很多系统级的参数可供用户进行配置以调整系统的运行行为而满足不同环境的要求。同样,Equinox 运行环境也提供了大量的运行参数以供用户选择配置。配置 Equinox 运行环境参数的方式主要有两种,一种是使用 JVM 环境变量;另一种方式是使用 Equinox 的配置文件(config.ini)。 用户在获取到 org.eclipse.osgi_.jar 文件后,可以尝试以命令行的方式启动该 Jar 文件。该 Jar 文件的入库主类是:org.eclipse.core.runtime.adaptor.EclipseStarter。 java -jar org.eclipse.osgi_3.3.1.R33x_v20070828.jar 用户会发现该程序执行后立即退出,控制台上没有任何输出。这是因为不存在拥有可持续运行的代码功能,框架启动后即退出主线程。下文中,我们会给出 OSGi 运行环境搭建的详细过程。 4、搭建 Equinox OSGi 运行环境 4.1 原始的 OSGi 环境从 Eclipse 官方网站下载 Equinox OSGi 框架。将其下载到 c:equinox 目录中。本文中使用的 Equinox 版本为 3.3.1。直接从命令行运行该 jar 文件时程序执行后会立即退出,为了更好的了解 Equinox OSGi 框架的特点,我们在运行时添加 JVM 参数osgi.console。如下图所示: 执行java -Dosgi.console -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar 后,系统给出osgi命令输入提示。输入ss命令后回车,用户可以看到上图所示Framework is launched.的信息。同时,下方显式了系统启动的 Bundle 列表,id 列为该Bundle 在 OSGi 运行环境中的唯一运行标识, State 列为该 Bundle 当前的状态,Bundle 列显示了该 Bundle 组件的SymbolicName。 此时,OSGi 框架已经处于运行状态。 Equinox OSGi Console 提供了很多命令用于与 OSGi 框架交互,用户可以输入任何非 OSGi Console 的内部命令字符,控制太将显示 Equinox Console 提供的所有命令。如下下图所示: 执行services命令,用户可以看到当前 OSGi 框架中发布的所有的服务信息。4.2 以运行参数方式向 OSGi 环境中部署 Bundle下载 Equinox SDK,将 plugins 目录下的 org.eclipse.osgi.services_3.1.200.v20070605.jar 文件拷贝到 C:equinox 目录下。修改命令行运行参数如下:java -Dosgi.console -Dosgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar执行该命令,系统运行结果如下图所示:从运行结果可以看出,JVM 参数-Dosgi.bundles= org.eclipse.osgi.services_3.1.200.v20070605.jar将 org.eclipse.osgi.services 组件部署到了 OSGi 运行环境中。此时,该组件的状态为 RESOLVED,即该组件被框架解析但没有启动。如果用户希望组件在加载的同时启动该组件,可以修改上述参数为:-Dosgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar2:start。 2指明该组件的启动级别,:后的start 标明该组件在加载后启动。按修改后的参数重新执行命令输出结果如下图所示: 从上图可以看出,部署的 org.eclipse.osgi.services 组件在加载后被 OSGi 框架启动,其状态显示为ACTIVE。4.3 以配置文件方式向 OSGi 环境中部署 Bundle从上述部署 Bundle 的方式看出,当部署多个 Bundle 时,使用 JVM 参数配置方式是不可取的。Equinox OSGi 支持从配置文件中读取加载的 Bundle,下面我们演示如何使用配置文件部署多个 Bundle。将 Equinox SDK 中 plugins 目录下的 org.eclipse.osgi.util_3.1.200.v20070605.jar 文件拷贝到 C:equinox 目录下。Equinox OSGi 提供了环境变量osgi.configuration.area ,该变量指明了配置文件 config.ini 的存储路径。下面我们在C:equinox 目录下添加 config.ini 文件,并在该文件中添加如下内容:osgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar2:start, org.eclipse.osgi.util_3.1.200.v20070605.jar修改 OSGi 框架启动命令行为 : java -Dosgi.console -Dosgi.configuration.area=. -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar执行上述命令后的输出结果如下图所示:5、使用 Eclipse Launcher 启动 Equinox OSGi熟悉 Eclipse IDE 环境的用户会注意到 3.2 版本(包括 3.2)以前 Eclipse 安装目录下存在 eclipse.exe 和 startup.jar 两个文件,用于启动 Eclipse 运行环境。从 3.3 版本开始,Equinox 将 startup.jar 拆分为两个不同的 Bundle(Fragment)放置在了 plugins 目录下。用户可以从 Equinox 站点下载 Launcher。下载后的 3.3.1 发布版本的 Launcher 包括下面两个组件: org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jarorg.eclipse.equinox.launcher.win32.win32.x86_1.0.1.R33x_v20070828 目录在进行下述操作之前,我们需要调整 C:equinox 的目录结构,在该目录下添加 configuration和plugins两个目录,将所有的 Bundle 组件(包括目录)转移到 plugins 目录下;将 config.ini 文件转移到 configuration 目录下,将 Launcher 包中的eclipse.exe文件拷贝到 C:equinox 目录下。此时的目录结构如下图所示:plugins 目录下的内容如下图所示:修改命令行 OSGi 框架启动命令为: eclipse.exe -console -noexit执行该命令后,在弹出的控制台中输入ss命令,输出结果如下:5.1 使用 eclipse.ini 文件除了从命令行传入 eclipse.exe 使用的运行参数外,用户也可以配置与 eclipse.exe 的文件同名的 ini 文件存放 eclipse.exe运行所需要的参数。用户应将该 ini 文件放置在 eclipse.exe 所在的文件目录下。我们在 C:equinox 目录下添加 eclipse.ini 文件,在该文件中添加如下内容: -console-noexit直接点击 eclipse.exe 程序图标启动 Equinox OSGi 运行环境。程序运行结果如下图所示: 至此,Equinox OSGi 完整的运行环境已经搭建完成。如果用户希望将新的 Bundle 发布到该环境中,只需要修改configuration 目录下 config.ini 文件,将新的 bundle 添加到 osgi.bundles 参数下。6、常见问题用户在上述操作步骤中,会发现在 configuration 目录下生成一些错误日志文件,如果用户发现日志中出现以下内容:java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:72)at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号