OSGI学习总结
最近的一项研究了解了一下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学习总结的更多相关文章
- 【Todo】OSGi学习
经常听到.见到OSGi这个名字.那么就单开一篇文章记录一下对OSGi的学习吧. 主要是做一些概念上面的学习.暂时不打算深入实践. 主要参考:http://www.osgi.com.cn/article ...
- OSGi学习-总结
本文是osgi实战一书的前几章读书总结 1. OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...
- osgi学习
Bundle可以被动态地安装.启动.停止和卸载.Bundle是服务(Service)和组件(Component)的载体.在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoad ...
- OSGi 学习(二)
上一篇说了很多虚的东西,现在说点别的. OSGi系统的独立环境下的项目结构以及启动脚本. 先说项目结构,基于equinox的OSGi容器的项目结构如下所示: bin中定义启动脚本,停止脚本之类的. c ...
- OSGi 学习(一)
从基础开始,先来说说OSGi的基本理念. OSGi通过隔离底层classloader,强制应用在设计的时候就考虑模块化,并且基于白板模式来支持服务的注册与订阅. 在OSGi中,模块可以等价理解为bun ...
- OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性
底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...
- Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门
前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...
- OSGI.NET 学习笔记--架构篇
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...
- OSGI.NET 学习笔记--应用篇
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. OSGI.NET 与UIOSP OSGi是Open Service Ga ...
随机推荐
- 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...
- OpenLayers学习笔记5——使用jQuery UI实现查询并标注(UI篇)
近期事情非常多,老板给的压力也非常大.经常出差,另外项目和个人研究还都要跟上,本月要交论文,还要写专利,仅仅能抽时间来学习其它的东西了. 关于OpenLayers的在博客中不会写太多详细的实现(网上有 ...
- Android 高手进阶,自己定义圆形进度条
背景介绍 在Android 开发中,我们常常遇到各种各样绚丽的控件,所以,依靠我们Android本身所带的控件是远远不够的,许多时候须要我们自定义控件,在开发的过程中.我们公司遇到了一种须要自己写的一 ...
- 谈论multistage text input(中国输入法)下一个UITextView内容长度的限制
我以前写<如何更好地限制UITextField输入长度>.接使用 UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotifica ...
- REPLACE...IN.....WITH.... 的使用
REPLACE...IN.....WITH.... 的使用,例子用于改变alv的gt_fieldcat_alv LOOP AT gt_fieldcat_alv ASSIGNING <fs_f ...
- 转载【浅谈ThreadPool 线程池】
浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html
- QT5静态编译教程,主要针对vs2012(渡世白玉)
QT5,VS2012静态编译,所有的库准备充分的话qwebkit也可以静态编译通过,但是我编译的版本使用中如果用了QWEBVIEW控件在连接时会出错. 注:我自己编译的环境是:win server 2 ...
- 【老鸟学算法】包含 min函数的栈设计——java实现
要求: 1. 定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素. 2. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 这是考验“栈”数据结构设计.众所周知,栈 ...
- Struts2 Action接收表单参数
struts2 Action获取表单传值 1.通过属性驱动式 JSP: <form action="sys/login.action" method ...
- Java 建立mysql数据库连接的语句
每次在面试时被问到jdbc的数据路链接过程都卡着,这次不怕了,背会了... 第一个,比较粗糙的 try{ Class.forName("com.mysql.jdbc.Driver&quo ...