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 ...
随机推荐
- iOS两个强制旋转屏幕的方法
第一个: // 状态栏动画持续时间 CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimation ...
- 利用Xtrabackup备份集合恢复一台从库的过程
1 time tar -xvf Open..tarx.gz real 35m22.502s user 10m16.499s sys 1m28.578s You have new m ...
- Swift - 高级运算符介绍
除了基本运算符之外,Swift还支持位运算和位移运算,包括: 1,按位取反运算:操作符是 ~ 2,按位与运算:操作符是 & 3,按位或运算:操作符是 | 4,按位异或运算:操作符是 ^ 5 ...
- NYOJ 623 A*B ProblemII
A*B Problem II 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描写叙述 ACM的C++同学有好多作业要做,最头痛莫过于线性代数了.由于每次做到矩阵相乘的时候,大 ...
- LCS小结(O(∩_∩)O~吽吽)
LCS!~如果你在百度上搜这个的话会出来”英雄联盟冠军联赛”,orz..但是今天要讲的LCS是最长公共子序列 ,"Longest Common Subsequence "not&q ...
- 设计模式(4)-对象创建型模式-Prototype模式
1.对象创建型模式 1.4 Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 •P r o t o t y p e(Gr a p h i c) - ...
- JAVA泛型之<? extends T>:(通配符上限)和<? super T>(通配符下限)
一.通配符上限和通配符下限接受的类型 通配符上限:<? extends T> 通配符下限:<? super T> 以下代码是测试结果,注释为解释说明 package xayd. ...
- (Google面试题)有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。
现要让四个文件呈如下格式: A:1 2 3 4 1 2.... B:2 3 4 1 2 3.... C:3 4 1 2 3 4.... D:4 1 2 3 4 1.... 请设计程序. 下面举例A,对 ...
- 一个Java对象到底占多大内存?(转)
最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...