最近的一项研究了解了一下OSGI技术,感觉OSGI尽管有一定的学习难度。可是终于掌握和推广之后将是一项对系统开发比較实用的技术。在此和大家分享一下自己的感悟。

1、什么是OSGI

OSGI直译为“开放服务网关”,是一个由OSGI联盟发起的以Java为技术平台的动态模块化规范。眼下基本的实现有:apache的Felix、Eclipse的Equinox等

2、使用OSGI的优点

OSGI可以看作是一种做系统架构的工具和方法论。可以让系统开发和设计人员以模块化的思想来开发和设计系统。

在以往的基于Java的系统开发过程中不能有效地约束程序猿依照一定的层次和依赖关系进行类或接口之间的调用,导致整个系统越来越难以理解和维护,系统发展到后期就会出现维护时,牵一发而动全身的情况出现。而OSGI框架或者说OSGI容器可以以导入、导出包的形式来控制模块之间的依赖,对模块间依赖有更强的约束力。也更加方便管理依赖。

比如在你的Jar包中有一个com.ynet.service.UserService接口。这个接口有一个对应的com.ynet.service.impl.UserServiceImpl实现类,在传统的开发中,你无法阻止其它人将UserService向下转型为事实上现类,并进而调用那些没有在接口中定义的方法。这些方法原本是你不打算暴露给外部的。

如今基于OSGI框架开发的话。在此Jar包中加入一个OSGI元数据定义文件,你仅仅有将com.ynet.service这个包 export出去。外部模块才干调用到这个包中的类或接口。因为你没有将com.ynet.service.impl导出。外部将无法引用到UserServiceImpl类。

对于开发和设计人员来说,最重要的就是怎样将适当的类耦合为一个模块,以及怎样暴露适当的package。

眼下OSGI规范包括了很多经常使用的子规范如用户管理服务规范、日志服务规范、Http服务规范等等。我们在开发中使用他人开发的规范实现的话,能够加快开发进度。避免“反复制造轮子”。即使我们选择自己来实现这些规范的话,因为规范的引导。也能够开发出功能比較完好、易于使用和扩展的服务实现。

另外,OSGI可以提供动态部署和维护系统的能力。这对于一些对停机限制非常严格的系统来说非常实用。可以在不停机的状态下添加或禁止某项功能、更新某个模块。

3、OSGI大概执行机制

OSGI容器对模块间依赖的控制,是通过隔离Java类载入器来实现的。不同的模块具有不同的类载入器。如模块A中有个类User依赖了模块B中的类Address,那么在模块A中载入Address类时,将托付给模块B的类载入器来完毕。

4、OSGI对企业级开发的支持

OSGI企业级规范中定义了JDBC、JPA、JMX、JTA和JNDI等各种Java EE技术以及一些非Java EE标准的企业级技术,眼下已经有不少OSGI企业级服务实现框架如Apache Aries。

实际的OSGI使用远不止上面说到的这些。须要深入地学习和解决更深层、更复杂的问题,如:声明式服务的使用来与OSGI框架解耦。在OSGI中整合非OSGI的Jar包等。

本人眼下也是处在理论调试的学习阶段,一些代码示例,以上内容如有错误。希望提醒,共同学习。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

OSGI学习总结的更多相关文章

  1. 【Todo】OSGi学习

    经常听到.见到OSGi这个名字.那么就单开一篇文章记录一下对OSGi的学习吧. 主要是做一些概念上面的学习.暂时不打算深入实践. 主要参考:http://www.osgi.com.cn/article ...

  2. OSGi学习-总结

    本文是osgi实战一书的前几章读书总结 1.  OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...

  3. osgi学习

    Bundle可以被动态地安装.启动.停止和卸载.Bundle是服务(Service)和组件(Component)的载体.在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoad ...

  4. OSGi 学习(二)

    上一篇说了很多虚的东西,现在说点别的. OSGi系统的独立环境下的项目结构以及启动脚本. 先说项目结构,基于equinox的OSGi容器的项目结构如下所示: bin中定义启动脚本,停止脚本之类的. c ...

  5. OSGi 学习(一)

    从基础开始,先来说说OSGi的基本理念. OSGi通过隔离底层classloader,强制应用在设计的时候就考虑模块化,并且基于白板模式来支持服务的注册与订阅. 在OSGi中,模块可以等价理解为bun ...

  6. OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性

    底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...

  7. Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门

    前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...

  8. OSGI.NET 学习笔记--架构篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...

  9. OSGI.NET 学习笔记--应用篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  OSGI.NET 与UIOSP OSGi是Open Service Ga ...

随机推荐

  1. 了解sota字符界面(章节4.1)

    4 SOTA操作 4.1 SOTA字符界面 sotaCC是字符界面管理sota系统程序 . 在/.../sota/bin/目录下,启动sotaCC.在终端的该目录下输入指令“./sotaCC”,启动s ...

  2. CF437D(The Child and Zoo)最小生成树

    题目: D. The Child and Zoo time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  3. Valera and Tubes

    C. Valera and Tubes time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. Swift - 类型判断is 与 类型转换as

    在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...

  5. 【Demo 0016】SQLite 数据库

    本章学习要点:       1.  熟悉SQL语句:       2.  掌握SQLit库的基本用法;        3.  掌握SQLite封装:

  6. STM8S 串口应用 UART2 STM8S105

    //少说话.多做事,下面是我验证过没有问题的串口发送接受数据 //使用MCU stm8s105c6 UART2 //初始化时调用: GPIO_DeInit(GPIOD); /* Configure P ...

  7. Linux入门基础#2:Linux文件系统基本结构

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  8. 关于Thread类中三个interrupt方法的研究与学习(转)

    先看三个方法原型: public void interrupt(): public boolean isInterrupted(): public static boolean interrupted ...

  9. c#Lamdba表达式与托付

    介绍: "Lambda表达式"(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用 ...

  10. 五、Linux/UNIX操作命令积累【cp、mv、cat、grep、ps】

    在使用Linux/UNIX下,常常会使用文本界面去设置系统或操作系统,作者本人在工作的过程也在不断接触这方面的命令,所以为此特酝酿.准备.開始了本文的编写.本文主要记录自己平时遇到的一些Linux/U ...