- 浏览: 1124586 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
1. 引言
OSGi(Open Services Gateway Initiative)有双重定义。一方面它指OSGi Alliance组织;另一方面指该组织制定的一个基于Java语言的服务规范——OSGi服务平台。OSGi Alliance是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立的开放的标准化组织。该组织及其标准原本目的在于使服务提供商通过住宅网关为各种家庭智能设备提供各种服务,目前该平台逐渐成为一个为室内、交通工具、移动电话和其他环境下的所有类型的网络设备的应用程序和服务进行传递和远程管理的开放式服务平台。
该规范和核心部分是一个开放并提供统一接口标准的体系框架,其中定义了应用程序的生命周期模式和服务注册,基于这个体系机构,服务提供商、程序开发人员、软件提供商、服务网管运营商、设备提供商能够协调地联合起来开发,部署以及管理向用户提供的各种服务。这个框架实现了一个优雅、完整和动态的组件模型。应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载(其中Java包/类的管理被详细定义)。API中还定义了运行远程下载管理政策的生命周期管理。服务注册允许bundles去检测新服务和取消的服务,然后相应配合。
2. 声明式服务出现及其组成
OSGi框架包含一套编程式的服务模型,它提供了服务的发布、查找和绑定操作。这个模型是简单而且强大的,它使应用能通过服务方式同外部的bundle进行通讯和协作。在OSGi服务层定义了一个和生命周期层紧密结合的动态协作模型,一个服务(service)就是一个通过服务登记来注册到一个或者多个Java接口下的Java对象。
当OSGi的服务模型应用于大型的系统和大范围的部署会带来一些兼容性问题,例如:
Ø 启动时间----编程式的服务模型需要bundle主动地注册服务和获取服务,这些工作通常在启动时执行,需要bundle在其激活器中执行初始化。在一个大型系统中,它会延长系统的启动时间,不能快速的响应结果。
Ø 内存占用----一个服务被注册到框架中意味着服务实现相关的类和对象被装载到内存中,如果服务从不被使用的话,那么这个内存是没有必要被占用的,而且创建一个类加载器可能引起显著的开销。
Ø 复杂性----服务能够在任何时候注册和注销。这种动态的特性使得编程式的服务模型比传统的方式更加复杂,这些复杂性对开发健壮的和可靠的应用会起到消极的作用,因为这些应用不能保证所有的动态处理总是正确。
针对编程是服务模型存在的上述问题,我们提出了新的服务构件模型Declarative service声明式服务的方式来发布、查找和绑定OSGi的服务。
声明式服务中引入了两个元素,构件(component)和元数据文件(metadata.xml)。构件是一个物理的、可替换的系统组成部分,它包装了实现体且提供了对一组服务接口的实现方法。构件自身必须相容于接口且实现接口,接口表示了驻留在构件内的成分所实现的服务。这些服务定义了的一个整合的行为,并从一些构件实例提供给其它客户端构件实例。在声明式服务中一个构件就对应了某一个构件实现类,这个类相当于是一个pojo(普通的Java对象),在这个类中我们可以注册服务、引用服务、构件属性配置等一些满足特定需求的操作,总之构件是服务的提供者和使用者。而元数据文件则是一个xml文件,在声明式服务中所有的元数据文件名称都为metadata.xml,在这个xml文件中我们可以根据需求配置构件的一些必需信息,且所配置的这些信息必须遵循声明式服务元数据规范。
声明式服务主要由四个部分组成,声明式服务容器部分、元数据解析部分、代码织入部分和打包成声明式服务bundle的插件部分。
Ø 声明式服务容器----用来解析部署到OSGi环境中的bundle,存放所有已创建的服务构件实例和方面构件实例,并对其相应的配置信息、生命周期进行管理。
Ø 元数据解析----用来解析bundle中的元数据文件信息,使用SAX解析器将元数据文件中每一个节点的信息都解析出来,构造成构件(component)或是构件实例(instance)供声明式服务容器使用。
Ø 代码织入----针对构件实现类进行的操作,主要是在构件实现类已实现的服务接口中增加一个pojo接口(用来获取当前服务对象的构件实例,给某个字段注入值),并在相应的构件实现类基础上生成以"_WC_ "开头的字节码文件。
Ø 声明式服务插件----将构件所在工程打包成声明式服务的bundle,在打包的过程中对构件实现类进行织入、对元数据文件进行解析并增强并在该bundle的manifest文件中添加与声明式相关的头标信息。
图1是组成声明式服务的模块图,其中Loong Dservice Impl是声明式服务容器部分,Loong Dservice Metadata是元数据解析部分,Loong Dservice weaver是代码织入部分,Loong Dservice plugin是声明式服务插件部分。
图1 声明式服务模块图
3. 声明式服务的优点
声明式服务是一个基于OSGi框架面向服务的构件模型,采用服务组件的延迟加载以及组件生命周期管理的方式来控制对于内存的占用以及快速启动。
这种方式简化了OSGi服务的开发者执行服务注册和处理服务依赖的工作,从而可以使编程的工作减少到最小;它也允许服务构件在需要时才进行加载。作为这种方式的结果,bundle中不再需要提供BundleActivator来通过服务注册库与其它的bundle进行协作。
从系统的角度来看,服务构件模型意味着减少了启动时间和潜在的降低了内存的占用。从一个程序员的角度来看,服务构件模型提供了一种简化的编程模型。
DService声明式服务框架是提供了一个简单的、可扩展的、基于POJO的面向服务构件开发模型;是基于OSGi扩展规范中的Declarative ServicesSpecification的参考实现。它提供声明元数据的方式开发OSGi环境中的服务构件,由框架管理构件实例,从而简化了因管理动态环境而导致的非功能性需求;它可以通过集成功能性或非功能性方面构件快速开发出一个业务构件。非侵入式编程,开发人员只需要关心自己的业务逻辑。
总之,声明式服务有以下几方面的特性:
Ø 简化开发方式:开发一个应用无需关注OSGi或DService相关的API,也无需控制构件组装与它们的生命周期,只需要开发若干POJO和相应的xml元数据。
Ø 服务的动态性管理:Dservice框架与OSGi框架相结合,任何关于服务的管理都由DService框架来完成,包括发布服务、引用服务、受管服务等等。
Ø 服务对象依赖注入:框架可以为构件实例管理所有的服务依赖。
Ø 构件延迟实例化:构件实例可以等到需要它时才被创建,这样可以避免启动占用太多的时间和空间。
Ø 可扩展:Dservice框架的高可扩展性可以让开发人员自己为框架动态的增加其自定义的功能(比如提供一个远程的OSGi服务、使用JMX等)。
Ø 编译期代码织入:生成子类继承用于开发的构件实现类,保持用户代码纯洁、可调试。
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1517OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 19944.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2376摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1379随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGi技术在Java Web开发中的应用
2012-09-20 11:26 1369随着 Java SE 对模块化功能原生支持的一再推迟(据最 ... -
OSGI典型的应用案例
2012-09-20 11:26 1574OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12141、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1021不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1195registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1328在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1270osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1121软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3492将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1297Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11091、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1377Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13001、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1182一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1128当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1506OSGi Core定义了一个服务层,提供了一个Bundl ...
相关推荐
使用注册式服务,明显区别于声明式服务,注册式服务,打包速度快。可以使用源码调试。 基于eclipse 3.5 创建的项目,附源码。
阅读本书,首先你很快就会使用Eclipse ...你将了解所有的OSGi声明式服务,以及如何通过这些服务来解决各种现实问题。最后,你会发现所有这些都在本书所提供的完整案例(从早期的原型构建到最终的应用交付)中得以实现。
你将了解所有的OSGi声明式服务,以及如何通过这些服务来解决各种现实问题。最后,你会发现所有这些都在本书所提供的完整案例(从早期的 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
此存储库包含几个 bndtools 项目,这些项目解释了如何从外部 Java 应用程序使用 OSGi 声明式服务 bndtools 运行描述符未处于工作状态。 最好将生成的目录中的 jar 文件复制并部署到 OSGi 容器并运行代码。 该代码...
Java应用架构设计:模块化模式与OSGi 英文版 中文版介绍: 全球资深Java技术专家的力作,系统、全面地讲解如何...17.3.2 基于组件的开发(CBD)不是已经成功了吗 17.4 生态系统 17.5 结论 附录A 类设计的SOLID原则
基于最新的OSGi最佳实践和R7规范,enRoute教程首先对声明式服务进行了全面的动手介绍,然后继续探索OSGi的微服务和React系统的独特而强大的方法。 该存储库包含enRoute教程的代码,并且还为OSGi R7参考实现定义了...
此存储库已移动请查看ops4j/org.ops4j.pax.web的undertow分支。pax-web-undertow 基于 Undertow 的 OSGi Web 应用程序(实验性)。功能目标实施 Web 应用程序规范 1.0(OSGi Enterprise 5... 基于声明式服务(包括 DS
Java应用架构设计:模块化模式与OSGi 英文版 中文版介绍: 全球资深Java技术专家的力作,系统、全面地讲解如何将模块...17.3.2 基于组件的开发(CBD)不是已经成功了吗 17.4 生态系统 17.5 结论 附录A 类设计的SOLID原则
该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 支持1.x - 4.x版本的Socket.IO 客户端 支持 xhr 轮询传输 ...通过注释进行声明式处理程序配置
Netty-socketio概述 该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 特征 支持1.x - 4.x版本的Socket.IO 客户端 ...通过注释进行声明式处理程序配置
java后台程序源码日蚀库拉:trade_mark: ...声明式服务,公开服务 API 并引发事件。 虽然几个 Kura 组件是纯 Java 的,但其他组件是通过 JNI 调用的,并且依赖于 Linux 操作系统。 有关更多信息,请参阅 . 系统要求 Ec
因此,这是在OSGi中将CXF与声明式服务一起使用的推荐方法。 查看示例以了解使用的简单程度。 模组 。 意向 意图允许服务利用CXF扩展(例如功能)。 服务可以列出其所需的命名意图。 然后,只有在所有意图都可用时,...
德拉姆勒FX JavaFX的模块化应用程序框架... 声明式编程模型:注释可以在许多地方使用,以注册元素,例如菜单,工具栏和GUI组件。 Drombler ACP:Drombler FX是一个JavaFX特定扩展Drombler ACP提供的基于JavaFX的为抽
Netty-socketio概述 该项目是服务器的开源Java实现。 基于服务器框架。 结帐 根据Apache License 2.0许可。 产品特点 支持0.7 ......支持XHR轮询传输 支持websocket传输 ...通过注解进行声明式处理程序配置 性能
3.9 用基于XML的配置声明aspect 137 3.9.1 问题 137 3.9.2 解决方案 137 3.9.3 工作原理 137 3.10 Spring中的AspectJ加载时织入aspect 140 3.10.1 问题 140 3.10.2 解决方案 141 3.10.3 工作原理 ...
3.9 用基于XML的配置声明aspect 137 3.9.1 问题 137 3.9.2 解决方案 137 3.9.3 工作原理 137 3.10 Spring中的AspectJ加载时织入aspect 140 3.10.1 问题 140 3.10.2 解决方案 141 3.10.3 工作原理 ...