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 ...
随机推荐
- Java总结之容器
[容器的概念] 容器:Java API所提供的一系列的实例,用于在程序中存放对象. [容器 API] J2SDK所提供的容器API位于java.util包内. {Collection[Set(Hash ...
- 在屏幕上建立ALV
在屏幕上创建两个文本元素空件.一个推出按钮控件.一个定制控制按钮 代码所示: *&------------------------------------------------------- ...
- Delphi与Vista提供的UAC控制(1-代表资源编号,24-资源类型为RTMAINIFEST,最后用brcc32编译成资源文件)
Vista提供的UAC机制,是Vista的新增功能之一.它的主要目的是防止对于操作系统本身的恶意修 改.如果想对于Vista的 系统设置进行改动,必须通过UAC的验 证才能够进行.通过这样的手段,大大 ...
- 多线程——实现Callable接口
前两篇博客(多线程--继承Thread类.多线程--实现Runnable接口 )介绍了java使用线程的两种方法.这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和C ...
- Cygwin的安装及在Android jni中的简单使用举例
Cygwin是一个在windows平台上执行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件.Cygwin是很多自由软件的集合,Cygwin的主要目的是通过又一次编译.将POS ...
- Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog)
Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog) Github上四种Lisp方言的流行度
- g++优化选项
g++优化选项 g++优化选项 对于下面的这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 #include <iostream> using namespace std; ...
- ubuntu install mysql server method
recently try to install mysql in my computer so that I can practise some sql statement on seve ...
- 微信 SDK 不能 分享
说多了都是泪水,真的. 前段时间,做好了微信的分享功能,测试通过的,最近我又跑了一遍用例,发现不能启动微信客户端了,怎么都启动不了,日志如下:ignore wechat app signature v ...
- zoj2314(有上下界的网络流)
传送门:Reactor Cooling 题意:给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流 ...