ValRay

ValRay

他/她暂时还没有添加描述

注册时间:2013-07-22

OSGI进阶:序

此篇文档适合具备OSGi基础概念或已阅读《OSGi实战》的读者 阅读,尤其是希望将 OSGi应用至实际的商业项目/产品的读者。 阅读此篇 Opendoc 的读者应具备以下知识: 如何在 Eclipse 中搭建 OSGi 应用开发环境; 如何部署 OSGi 应用; 对于 OSGi 应用开发有大致的了解(如 DS 怎么使用)。


OSGI进阶:第二章 基于 OSGi 的留言板

此留言板主要为展示基于 OSGi 的 B/S 系统的通用设计和实现方法,因此功能方面只是一些基础功能的需求: 分页浏览留言 进入留言板的首页时,以每页 20 条的列表的方式列出系统中所有的留言,并提供下一页、上一页、首页和末页的链接导航; 留言列表按留言时间顺序显示,新的留言显示在前; 每条留言显示的内容分别为:留言内容、留言人和留言时间。


OSGI进阶:第三章 与流行的 Java B/S 体系架构进行集成(一)

在看完了上面的章节后,大家可能会想:OK,OSGi 是还不错,也大概知道了怎么样基于它去设计实际的项目,但对于 Java B/S 系统而言,OSGi 怎么和目前流行的体系架构集成呢,这恐怕是大部分读者为关注的问题。如果能解决这个问题的话,我想大部分人都会考虑在新的项目/产品中去使用 OSGi,毕竟 OSGi 带来的好处是非常明显的,在 本章节中,将和大家来一起搭建一个基于OSGi的Hibernate+Spring+Webwork的脚手架。


OSGI进阶:第三章 与流行的 Java B/S 体系架构进行集成(二)

要集成 Webwork,要解决的问题和与 Hibernate 的集成基本类似,集中在如下三个方面: Webwork 要求所有的 Action 配置文件都需要在其统一的 xwork.xml 做 include 配置,而基于 OSGi 后需要达到的目标是:各模块维护自己的 xwork.xml,以某种方式绑定到 webwork 上去


OSGI进阶:第四章 基于OSGi搭建分布式系统

OSGi 规范是基于同一 VM 而设计的,因此并无对于分布式通讯的支持,分布式的通讯有很多种实现方法,如采用 RMI、基于 MQ、SOA 等方式,SOA 无疑是目前分布式领域中为流行的架构体系,在本章节中就以一个实例来分析基于 OSGi 如何搭建一个实现像 SOA 这样的脚手架。


OSGI进阶:第五章 将原系统重构为基于OSGi的系统

在看完以上的章节后,希望能让大家在新的项目/产品无所顾忌的使用 OSGi,但对于已存在的项目/产品而言,怎么办呢,因为像产品而言的话,通常都是经历过一段很长时间的发展的,不可能抛弃以前所有的努力,因此还得有将原系统重构为基于 OSGi 的系统的方法。 在这个章节中将把一个传统的基于hibernate+spring+webwork搭建的留言板系统重构为可部署至OSGi框架中的系统,重构时的原则是尽量不去修改原代码,基于BND(Bundle Tool) 直接创建符合OSGi规范的Bundle进行部署,从而实现重构。


OSGI进阶:第六章 OSGi的设计模式

所谓树状设计模式就是以树的方式来设计整个系统,由于 OSGi 在模块的规范化、动态性、扩展性上的良好的支持,使得以树的方式来设计整个系统变得可行。 在设计留言板系统时我们已经展示了如何以树状的方式来进行设计,树状设计模式强调系统像树一样慢慢的长大,在设计时涉及的元素主要是根、枝、叶三要素。</br> 面向服务本身已经是如今为红火的名词之一,而由于 OSGi 本身重要的设计思想就是面向服务的组件模型,因此基于 OSGi 而构建的系统自然就应该是面向服务式的。


OSGI进阶:第七章 OSGi 最佳实践

当接口和实现均处于同一个 Bundle 时,容易出现的问题就是如果要切换提供的 OSGi 服务的实现的话,就有些麻烦了,只能在调用该 OSGi 服务的组件中指定引用的服务的 target 来实现了,但如果接口和实现分离为不同的 Bundle 的话,对于提供的单一的 OSGi 服务(就是系统中只存在一个对于此 OSGi 服务的实现的组件)的切换就很方便了,对于存在多个实现同一 OSGi 服务的组件的情况也一样,在那种情况下尽管引用该 OSGi 服务的组件基本都会通过 target 过滤来获取自己想要的服务,但如果接口和 实现在同一个 Bundle 的话,就必须保证新的实现的 Bundle 中的 OSGi 服务的 target 属性必须采用不同的值,而不能使用同一个值。


OpenDoc Series':OSGI实战(序)

本篇 Opendoc 按照学习开源框架的基本流程进行编写,从体验 OSGI 到基于 OSGI 框架的实战,到深入 OSGI,完成对于 OSGI 从入门到深入学习的过程,后对于 OSGI 的现状和发展发表些自己的看法和思考,限于笔者的水平以及时间,文内难免有些错误,还请大家不吝指正,也希望本文能作为国内 OSGI 的抛砖之作,引出更多的关于 OSGI 的 Opendoc,在我的 blog 上也会不断的编写关于自己在 OSGI、Equinox 上的实战的体会和心得,欢迎大家多多交流。


OpenDoc Series':OSGI实战(二)

以一个用户登录验证模块来体验下OSGI有什么不同的地方! 例如用户登录验证模块。要求可动态的替换(系统运行期)用户登录验证的方式,如目前需要的有三种验证方式:LDAP 验证、DB 验证以及配置文件验证;同时要求可随时增加新的验证方式(系统运行期),如 CA 验证方式等。 这是常见的一种较为简单的动态修改和改变系统行为的需求,分别来看看传统的实现方式和基于 OSGI 的实现方式。


OpenDoc Series':OSGI实战(三)

在上一个章节中,从需求实现和技术角度分别体验了 OSGI,对于基于 OSGI 搭建的系统和传统的系统有什么不同有了个大概的印象,那么到底 OSGI 给我们带来了什么呢? 从需求实现方面,OSGI 为动态扩充、修改系统功能和改变系统行为提供了支撑,而在传统的开发方式下,要实现系统的动态扩充、修改以及改变是一件很麻烦的事。 从技术角度方面...


OpenDoc Series':OSGI实战(四)

OSGI 案例:说了这么多 OSGI 的好,吹了这么多的”牛”,来以事实证明下 OSGI 并不是什么实验品,而是已经在业界被证明切实可用的东西。 OSGI 典型的应用案例主要有两个,都非常的著名,分别是 Eclipse 和 BMW 汽车的应用控制系统。


OpenDoc Series':OSGI实战(五)

在开源界中实现 OSGI 的框架比较知名的有:Equinox、Knopflerfish、Oscar。


OpenDoc Series':OSGI实战(六):1

讲了这么多 OSGI 的相关”废话”,开始走入正题,任何东西,仅仅说是没用的,在本章节中我们基于 OSGI 框架(Equinox)来实现体验 OSGI 章节中的用户登录验证模块。OSGI 框架是一个微核结构的容器,所有的模块都需要运行在容器范围内,在 OSGI 中所有模块的部署都必须以 Bundle 的方式来进行部署,那么到底什么是 Bundle 呢?


OpenDoc Series':OSGI实战(六):2

从开发角度来看,Service 有点象虚拟的概念,因为在编写 Service 时和编写普通的 Java 类(POJO)没有任何的区别,其实在上面已经写过三个 Service 类了,分别是LDAPValidatorImpl、DBValidatorImpl 以及 ConfigFileValidatorImpl。 在 OSGI 框架中,Service 是个实际的概念,只有通过 BundleContext 注册成 Service 才能使得一个 POJO 作为 Service 在 OSGI 框架中被使用,同时也只有通过 BundleContext 来获取发布到框架中的 Service,通过 Service 的方式来实现 Bundle 之间实例级的依赖, 和 Import-Package、Require-Bundle 不同的地方在于通过 Service 获取的是其他 Bundle 中类的实例。


OpenDoc Series':OSGI实战(六):3

对于测试的支持无疑是现在对于框架的重要考评点,那么来看看基于 OSGI 框架的系统怎么做测试呢,由于做集成测试的方法只和系统的结构(B/S、C/S)有关,和框架没什么关系,所以在这里只谈基于 OSGI 框架的系统是如何做单元测试的。 编写单元测试时重要的就两点: 1. 设置测试类的依赖(通过 Mock、实例化等方法); 2. 测试在某种输入的情况下方法执行的输出是否和预期的结果一致。


OpenDoc Series':OSGI实战(七):1

经过对 OSGI 框架使用的学习,相信大家对于 OSGI 中的概念有了或多或少的理解,同时也会在使用的过程中产生各种各样的疑问,在这个章节中将深入学习 OSGI 框架背后的思想,学习 OSGI 规范中是怎么定义 Bundle 的元数据的、怎么来管理 Bundle 的、怎么来管理 Service 的等等,以在实践中更好的使用 OSGI 框架搭建系统,同时通过对于 OSGI 的学习,不断的改善和提升之前在实战章节中的用户登录验证模块,以使其更加的贴合实际的应用。


OpenDoc Series':OSGI实战(七):2

StartLevel Service 是 OSGI 规范中的核心服务,是 OSGI 框架必须实现的服务,通过 StartLevel Service 可以动态的设置和改变 Bundle 的启动顺序,OSGI 框架在启动 Bundle 时按照启动顺序和 Bundle ID 的倒序来启动系统。 在 OSGI 中,启动顺序称为 StartLevel,在之前的实战章节中,没有去控制 Bundle 的启动顺序,通过 config.ini 可以静态的设置系统的启动级别和各 Bundle 的启动级别,而通过在运行期获取 StartLevelService 则可动态的改变系统、各 Bundle 的启动级别以及新安装的 Bundle 的启动级别。


OpenDoc Series':OSGI实战(七):3

规范描述: Configuration Admin Service 是 OSGI 中非常重要的一个服务,它用于动态的管理 Bundle 的配置的属性,而这些属性的存储可能是在本地、也有可能是在远端、甚 至可能会在某些设备上,基于 Configuration Admin Service 就可以统一的、动态的、远程的完成 Bundle 配置属性的管理工作了。 规范中的这张图挺形象的解释了 Configuration Admin Service 的作用。


OpenDoc Series':OSGI实战(八)

之前的章节中对于 OSGI 的应用都只是让大家对于 OSGI 的实战有个较为实际的概念,并没有在整个系统级别去应用 OSGI,要在整个系统级别上应用 OSGI,还是会带来不少的挑战的,但相对于 OSGI 能带来的优势,相信这是值得的,在应用 OSGI 时应大程度的发挥基于 OSGI 搭建系统的优势以及减少基于 OSGI 系统带来的挑战。 由于基于 OSGI 搭建系统带来的是架构级别的改变,带来的大的影响莫过于设计层面,同时对于系统开发和部署也产生了影响。


OSGi原理与最佳实践:第一章 OSGi框架简介(1)Equinox

《OSGi 原理与最佳实践》作为一本早于同类技术英文书而编写的 OSGi 中文书籍,旨在为希望实现模块化、动态化 Java 系统的架构师和开发工程师提供 OSGi 入门知识,同时也为希望深入掌握 OSGi 的架构师、开发工程师提供 OSGi 知识的深入讲解。原书内容从 OSGi 的简介开始,到 OSGi 框架的使用,再到 OSGi 规范的掌握,后到 OSGi 框架的实现分析,阐述了基于 OSGi 编写模块化、动态化的 Java 系统须要掌握的知识体系,希望此书能给读者带来一次愉快的 OSGi 之旅。


OSGi原理与最佳实践:第一章 OSGi框架简介(2)

我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用。B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架。下面分别介绍这两种方式的实现。此外,本节还会给出 Declarative Service 的使用实例。


OSGi原理与最佳实践:第一章 OSGi框架简介(4)Felix

Felix 是 Apache Foundation 关于 OSGi R4 的一个实现。包括了 OSGi 框架和标准的服务,同时也提供并且支持其他的 OSGi 相关技术。Felix 终的目标是要提供和 OSGi 框架和标准服务完全兼容的一个实现。目前 Felix 已经实现了 OSGi R4 规范中的大部分内容。具体的情况可以参考 http://felix.apache.org/site/index.html。


OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

Spring-DM 指的是 Spring Dynamic Modules。Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用 OSGi 框架提供的服务,将应用变得更加模块化。具体的信息可以查看 http://static. springframework.org/osgi/docs/1.2.0-rc1/reference/html/。


OSGi原理与最佳实践:第一章 OSGi框架简介(3)

我们的第一个 HelloWorld 的例子,就是一个 Standalone 类型的应用。当然 HelloWorld 中只有一个 Bundle,而实际的例子会由很多的 Bundle 组成,我们可以使用经典的 BundleActivator 注册服务,或者用 Declarative Service 来注入组件的方式完成功能。


OSGi原理与最佳实践:第二章 基于Spring-DM实现Petstore(1)

在前面一章,我们分别介绍了 Equinox、Felix 和 Spring Dynamic Modules,并完成了简单的 HelloWorld 程序。接下来将通过 Spring Dynamic Modules 完成一个简化的 PetStore 例子。


OSGi原理与最佳实践:第二章 基于Spring-DM实现Petstore(2)

从前面列出的 Petstore 的功能看,我们要保存的数据有:类目数据,产品数据,产品的具体条目数据,购物车数据。在这个 Petstore 的例子中,我们购物车的数据采用非持久的方式来保存(有兴趣的读者可以改造这部分,完成购物车数据的持久保存)。然后剩下的三种数据,我们采用三张表来存储。我们先来看以下三种数据的关系,如图 2-1 所示。


OSGi原理与最佳实践:第二章 基于Spring-DM实现Petstore(3)

Petstore 是一个 Web 应用,我们知道,构建基于 OSGi 的 Web 应用有两种方式,一种是采用 Bridge 方式进行部署,也就是把 OSGi 框架嵌入到 Web 服务器中,另外一种是把 Web 服务器嵌入到 OSGi 容器中,我们这次采用的是把 Web 服务器嵌入到 OSGi 容器中的方式。 从“即插即用、即删即无”的部署角度来看,要增加什么新的模块来支持现有的功能模块的部署:


OSGi原理与最佳实践:第二章 基于Spring-DM实现Petstore(4)

在前面一节,我们完成了 Petstore 功能模块的设计,这在一节中,我们就动手来实现这个即插即 用、即卸即停的 Petstore。首先,我们要准备开发环境。在前面一章,我们已经详细介绍了在 Eclipse 环境下如何准备开发环境,也介绍了如何基于 Spring-DM 进行开发,这里就不再赘述。下面就列出 Petstore 需要用到的 Bundle。


OSGi原理与最佳实践:第二章 基于Spring-DM实现Petstore(5)

ProductDal模块 在 Petstore 中,我们有两个数据访问的模块,一个就是当前要实现的 ProductDal 模块,另外一个是 ShoppingCarDal 模块。数据访问模块也是基础的模块,不依赖内部的其他模块,而本身是提供服务给其他模块使用。下面就来看一下 ProductDal 模块的实现。


写书评,赢新书《OSGi与Equinox:创建高度模块化的JAVA系统》

OSGi中文社区携手图灵教育给粉丝们送福利来啦!OSGi经典好书《OSGi与Equinox:创建高度模块化的JAVA系统》抢先阅读啦~ 只要你: 关注“OSGi中文社区”和“图灵教育” 的微博; 试读《OSGi与Equinox:创建高度模块化的JAVA系统》前四章,并且在此页面留言写下书评或者读后感。 就有机会获得价值89元的《OSGi与Equinox:创建高度模块化的JAVA系统》一本。一共会送出2本噢。


2013-12-27 03:42评论 "写书评,赢新书《Java应用架构设计:模块化模式与 OSGi》":

恭喜下面四位同学都获得书一本。

2013-11-25 02:50评论 "写书评,赢好书《OSGi实战》":

回复xiaoh: 恭喜您成为获得《OSGi实战》的幸运书评者,请继续支持我们。

2013-10-10 04:12评论 "写书评,赢79元好书":

恭喜 @zjf_123 @YiFei @九天 @Spring @Neuromancer。 请这几位朋友把你们的地址+姓名+联系电话,私信给我们官方微博,我们会尽快给你们邮寄书本。

2013-10-10 04:00评论 "顶级OSGi专家Tim Ward JavaOne 2013 演讲":

点击“PPT”就可以看到相关内容,还支持下载噢。