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 模块的实现。