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 ...
随机推荐
- css hack 如何区分 ie7 ie8
.style { width:100px; /*火狐以及一般浏览器*/ width:200px\9; /*IE8*/ *width:150px; /*IE7*/ _width:50px; /*IE6* ...
- Qml 写的弹出层控件(13篇博客)
QML弹出窗口组件,灯箱效果.动画效果,可拖拽 核心思路:一个mask层,一个最顶层,都用rectangle,禁止事件穿透 使用 Popup { id: popup width: 200; heigh ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(三)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(三) 1.3 分词器结构 1.3.1 分词器整体结构 从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关 ...
- Guava学习笔记:EventBus(转)
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现.对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和 ...
- Python基础 2----Python 基础语法
1 模块导入原理 1 模块是包含函数,类,变量的独立的Python文件 2 导入系统的模块 比如我在家目录下创建一个m.py的文件,我们导入了许多的系统模块,比如time,string等等.这边就类似 ...
- Python 新浪微博元素 (Word, Screen Name)词汇多样性
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-10 @author: guaguastd @name: w ...
- html5实现拖拽文件上传
以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...
- oracle查询语句中case when的使用
case when语句语法如下: case when 表达式 then valueA else valueB end; 具体使用如下: select (case when a.colum ...
- php 如何在有限的内存中读取大文件
突然遇到了一个要读取超过80M文件的需求,很悲剧的,不管是file_get_content还是file什么的,都会将读取的文件一次性加载到内存中. 正常情况下,我们可以使用fseek来读取,好处就是不 ...
- ABAP 中 Table Control例子
实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...