快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳门app下载_酒文化网进入



小序

众所周知,OSGi 最初是 Open Service Gateway Initiative 的缩写,利用于家庭收集和移动嵌入式设备。而后,得益于遵照了 OSGi 规范来重构其插件机制的 eclipse 的迅猛成长和宏大年夜的用户群,OSGi 也迅速的成长成为 Java 动态模块化系统的事实上的工业标准。另一方面,在企业利用领域,伴跟着 OSGi R4.2 所引入的 Blueprint Service 规范以及 OSGi 同盟的企业专家组所拟订的一系列企业级标准,OSGi 正在成为该领域的焦点以致未来的成长偏向,作为 OSGi 同盟最紧张的成员之一的 IBM 也迅速得在其 WebSphere Application Server V7 中供给了对企业级 OSGi 利用编程模型的支持。本文旨在先容 OSGi 的核心观点及其在企业级利用领域的成长,并展示若何应用 WebSphere Application Server V7 Feature Pack for OSGi Applications 来开拓,支配和运行企业级 OSGi 利用。

OSGi 的相关观点

OSGi 为我们所带来的是一个规范化的,动态的,优雅的组件模型,它改变了 Java 传统的扁平类加载布局,可以有效的办理 Java 软件的版新蒲京澳门app下载本冲突问题,为 Java 向模块化成长铺平了蹊径,JCP 也借由 JSR-291 将 OSGi Core Spec R4.1 规范带入了 JavaSE 的大年夜家庭。

OSGi 的国际标准化组织 OSGi Alliance 成立于 1999 年,如今已有包括像 IBM,Ericsson,ProSyst,Makewave,SAP,Oracle 等在内的 100 多个成员。除了 eclipse 所带来的 equinox 外,常用的开源 OSGi 框架还有 Knopflerfish 和 Apache Felix 等。OSGi 在商业领域的利用也越来越广泛,包括利用办事器领域的 Websphere,Weblogic,JBoss,以及 BMW 的车载系统,Adobe 的 CS2 等。

OSGi 的系统架构如 图 1 所示,其架构主要分为如下 4 个层次:

模块层

生命周期层

办事层

安然层。

图 1. OSGi 系统架构

architect.jpg

模块层

OSGi 引入了 Bundle 的观点作为一个模块单元,Bundle 是加入了 OSGi 元数据的 jar 包,Bundle 在其 MANIFEST.MF 文件中定义这些元数据,如 清单 1 所示。

清单 1. MANIFEST.MF

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: WeatherForecastAPI

Bundle-SymbolicName: com.ibm.dw.weatherforecast.api

Bundle-Version: 1.0.0

Bundle-RequiredExecutionEnvironment: JavaSE-1.6

Export-Package: com.ibm.dw.weatherforecast.api;version="1.0.0"

Manifest 文件中常见的元数据主要包括:

Bundle-ManifestVersion,OSGi R3 对应的值为 1,OSGi R4 对应的值为 2

Bundle-SymbolicName 和 Bundle-Version,组合起来构成 Bundle 的独一标识符

Bundle-Activator,可以接管到 Bundle 生命周期变更看护的类名

Require-Bundle 和 Import-Package,定义了 Bundle 的外部依附,Require-Bundle 对其导出的所有包孕育发生依附,而 Import-Package 只对指定的包孕育发生依附

Export-Package,Bundle 对外裸露的包。

因为 Bundle-Version 和 Export-Package 附加了版本节制信息,因而同一个 Bundle 或 Package 的多个不合版本可以在 JVM 中共存,又因为 Require-Bundle 和 Import-Package 可以附加版本过滤信息,因而多版本之间不会孕育发生冲突。由此可见,OSGi 为软件进级所带来的多版本问题供给了完善的办理规划。

同时,OSGi 框架的类载入机制包管了模块的互相自力,每个 Bundle 都有自力的 classloader,构建各自的类空间,Bundle 之间经由过程显式的 Require-Bundle,Import-Package,Export-Package 形成网状的依附关系。OSGi 框架的类加载规则大年夜致如下:

java.* 的类和设置设置设备摆设摆设属性 org.osgi.framework.bootdelegation 中定义的类委托给父 classloader

Import-Package 或 Require-Bundle 的 Export-Package 中所定义的类委托给响应 Bundle 的 classloader

搜索 Bundle-Classpath 和 Fragment Bundle 的 Classpath

判断是否属于 DynamicImport-Package。

生命周期层

OSGi 框架可以动态的治理 Bundle 的生命周期,Bundle 生命周期中各个状态的转换关系如 图 2 所示。OSGi 框架采纳了延迟激活的策略,从而可以节省资本和加快系统启动速率。

图 2. Bundle 生命周期

lifecycle.jpg

办事层

OSGi 供给了松耦合的,动态的,面向办事的组件模型,如 图 3 所示。OSGi 办事的编程模型经历了从最基础的 ServiceListener / ServiceTracker 到新蒲京澳门app下载 R4 中引入的 Declarative Service 再到 R4.2 中引入的 Blueprint Service 的赓续成长。

图 3. OSGi Service

service.jpg

OSGi Blueprint Service

OSGi Alliance 在 OSGi Compendium R4.2 中引入的 Blueprint Service (RFC-124) 是对 Spring DM 标准化的结果,这也从一个侧面反应出了 Spring 框架这一轻量级的 IoC 容器及其所倡导的依附注入模式所取得的伟大年夜成功。虽然在一些方面与 OSGi DS 孕育发生了重叠,但 Blueprint Service 对 Bundle 的延迟激活策略进行了进一步的完善。

一个 OSGi Bundle 被视为是 Blueprint Bundle 的前提是在其 OSGI-INF/blueprint/ 目录下存在着 Blueprint XML 文件。借助于一个特殊的 Extender Bundle,Blueprint Bundle 的生命周期状态会获得监视,在一个 Blueprint Bundle 被激活后,Extender Bundle 会为其创建一个 Blueprint Container,然后根据它的 Blueprint XML 文件中的设置设置设备摆设摆设为它实例化并组装组件,注册办事以及查找办事引用等,而当这个 Blueprint Bundle 被竣过后,Extender Bundle 将销毁它的 Blueprint Container。

Blueprint XML

Blueprint XML 文件如 清单 2 所示,其布局以及元素和属性的命名与 Spring XML 比拟没有很大年夜差别。

清单 2. Blueprint XML

......

bean 元素用于定义一个 POJO 组件,class 新蒲京澳门app下载属性用于指定要实例化的 java 类名,argument 和 property 子元素分手用于向构造措施通报参数和属性字段的依附注入,init-method 和 destroy-method 属性用于指定生命周期回调措施,activation 属性用于指定激活策略是 eager 照样 lazy,scope 属性则用于指定实例的创建是单例模式照样原型模式。

Service 元素用于注册供给办事的组件,注册要领可所以应用 ref 属性引用一个已定义的组件或是直接内联定义一个组件,interface 属性用于指定注册的办事接口,activation 属性用于指定办事的激活策略,ranking 属性用于指定办事级别,具有更高档其余办事会被优先选中,registration-listener 子元素则用于定义注册监听器。

reference 元素用于定义办事代理以动态引用办事,interface 属性用于指定查找的办事接口,availability 属性用于指定 Blueprint Container 初始化时办事是否必须存在,timeout 属性用于指定办事代理壅闭调用的超时长度,以毫秒为单位,reference-listener 子元素则用于定义引用监听器。

WebSphere Application Server V7 Feature Pack for OSGi Applications

作为 OSGi Alliance 的创办成员之一,IBM 经久以来致力于 OSGi 的成长和推广,并将其技巧用于 WebSphere,Rational 和 Lotus 产品系列中。早在 WebSphere Application Server V6.1 中,OSGi 就被引入到其产品内部架构,带来组件化的运行情况的同时使产品易于开拓和掩护。因为 OSGi 化,WebSphere Application Server V6.1 的类加载机制也发生了变更,如 图 4 所示,OSGi 的网状类加载器布局经由过程一个 Gateway Bundle 与已有的树状类加载器布局中的 Ext 类加载器相连。现在,伴跟着 WebSphere Application Server V7 的 OSGi Feature Pack 的发行,OSGi 从后台被推向了前台,用于赞助开拓职员办理利用的繁杂性,可扩展性和掩护等问题。

图 4. WAS6.1 类加载器层次图

classloading.jpg

企业级 OSGi

企业级 OSGi 作为 OSGi R4.2 的焦点,目的是为了将 OSGi 的模块化,版本化和动态特点等上风带给 JavaEE 利用的开拓职员。为此,O新蒲京澳门app下载SGi Alliance Enterprise Expert Group 拟订了一系列规范,标准化了 Blueprint 组件模型与 Web Container,JPA,JNDI,JMX 等常用的 JavaEE 技巧的相结合,方便了 JavaEE 编程职员开拓出模块化的企业级利用并将其支配到 OSGi 框架中。

Apache Aries 项目

Apache Aries 项目实现且扩展了 OSGi Alliance EEG 所拟订的规范,供给给编程职员一个易于应用的,轻量级的企业级 OSGi 利用的编程模型。Aries 项目代码的供献者来自于 IBM,P新蒲京澳门app下载rogress,RedHat,SAP,Ericsson 等几家公司,它接受了 Apache Geronimo Blueprint Container 的实现,其利用可以支配到 Apache Geronimo 和 Apache Felix Karaf 等运行时情况中。此外,IBM 在 Aries 项目的根基上供给了其 WAS OSGi Feature Pack,将 Aries 组件慎密集成到 WAS V7 中,为 JavaEE 开拓职员供给了完备的,壮实的企业级 OSGi 利用的运行时情况。

Enterprise Bundle Archive

作为 Aries 编程模型的一部分,Enterprise Bundle Archive 组件模型扩展了 Blueprint 组件模型,用于将有内在营业关联的 OSGi 模块打包在一路构成一个 OSGi 利用,并与其它 OSGi 利用相隔离。EBA 中既可以包孕 Blueprint Bundle,也可以包孕 Web 利用 Bundle 或者持久化 Bundle,此外,EBA 中还会附加一些利用的元数据。在某种程度上,EBA 很类似于传统 JavaEE 利用中的 EAR,所不合的是,EBA 中可以不直接包孕 OSGi Bundle 的二进制内容,而是引用位于 OSGi Bundle 仓库中的 Bundle,这样 EBA 中的 Web 模块就可以引用位于集中式的,受管的,版本化的 Bundle 仓库中的共享类库和办事,所带来的是资本的节省和利用进级的便利。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: