开源协议:LGPL协议、OSGi协议---打酱油的日子
本文介绍开源的协议。
LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Public License (GNU 库通用公共许可证),译为:更加宽松的通用公共许可证。
例如mq的5.4版本没有解决Investigate and resolve LGPL dependency via camel-web,所以被撤销。
资料:http://www.oschina.net/question/12_2663
-------------------------------------------------------------------华丽分割-------------------------------------------------------------------
OSGi协议,是指Open Services Gateway initiative的缩写,叫做开放服务网关协议。
OSGi已经被用于构建很多非常复杂的系统,比如IDE(Eclipse),应用服务器(GlassFish, IBM Websphere, Oracle/BEA Weblogic, Jonas, JBoss),应用框架(Spring,Guice),工业自动化等等。
一、分层结构:

安全层:基于Java2的安全机制增加了一些限制,并且弥补了Java标准的一些不足。
服务层:为bundle开发者提供了一个动态、简明且并且统一的编程模型,通过解耦服务标准(即Java接口)和它的实现,能够简化服务bundle的开发和部署。
生命周期层:为bundle 提供了生命周期管理API,为bundle提供了一个运行时模型,定义了一个bundle 如何启动、停止、安装和卸载。
模块层:定义了一个模块化Java模型,对Java部署模式的一些缺点进行了改进,并对bundle)之间包的共享有严格的规定。
二、提供功能
OSGi框架本身提供了类加载,生命周期管理,服务注册和规范服务。
1、类加载:OSGi 有它自身的类加载机制从而控制这些加载的Bundles 彼此之间的依赖关系。
2、生命周期管理:是OSGi 的一大亮点,由于可动态的对这些加载的Bundles 进行安装、卸载、启动、停止等操作,所以可以动态的改变应用程序的运行状态。
3、服务注册:当一系列的Bundles 存在于服务器中的时候,那么它们之间必然会存在通信协作的部分,比如说一个通过网页捕获用户输入的Bundle 执行的时候,它必须首先需要一个Web 服务器服务的支持,那么这个时候服务注册器就会从整个OSGi容器中寻找这个服务,如果能完成服务的匹配,那么相应的功能就会很自然的实现了。
4、规范服务:OSGi 规范还规定了一组预设的服务,包括日志、服务管理等等,这些服务在主流的开源框架中都有实现。
Bundle介绍
OSGi 是以 Bundle 为程序模块单位组成的。每一个 Bundle 独立开发,各自成章,有自己分配的内存空间以及生命周期。
一、Bundle分类
Bundle 也分很多种类型,(1)有些 Bundle 只提供功能 Service;(2)有些 Bundle 消费 Service 并呈现给用户(比如 UI Bundle);(3)还有些 Bundle 自己不单独启动作为其他 Bundle 的 fragment Bundle 存在(比如资源文件 Bundle)。
二、Bundle状态
Bundle 有六种状态,分别是:(1)installed(安装完成,本地资源成功加载);(2)resolved(依赖关系满足,即该Bundle 要么是准备好运行了,要么是已经被停止了);(3)starting(Bundle 正在被启动);(4)stopping(Bundle 正在被停止);(5)active(Bundle 被激活,正在运行中);(6)uninstalled(Bundle 被卸载了)。
三、Bundle间通讯
Bundle 是 OSGi 的功能单元,服务提供者和消费者 Bundle 之间,功能包提供者和消费者之间需要进行相互通信。主要通讯方式有以下几种:
1.Import Package 方式,在服务提供 Bundle 用 Export Package 导出。需要通过配置 MANIFEST.MF 来实现。
2.Register Service 方式,在服务提供 Bundle 通过 BundleContext 进行 Service 注册,在消费者 Bundle 通过 ServiceTracker 取得 Service,需要通过写代码来实现。
四、Bundle共享普通jar方式
Bundle是OSGi的一个最小组织单元,表现形式和普通的Jar包文件一样,只不过是其对应的MANIFEST.MF文件中多了一些描述性的东西。Bundle共享第三方Jar包步骤:
1、在bundle的根目录下创建文件夹folder;
2、选中新创建的文件夹folder,右击 Import --> General --> File System,然后从location中选择需要的Jar包。
3、打开现编辑bundle的MANIFEST.MF文件,并定位在Runtime页签上。选中需要的Jar包。
开源协议:LGPL协议、OSGi协议---打酱油的日子的更多相关文章
- 开源协议:LGPL协议、OSGi协议
本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...
- Qt 的两个许可证区别分析:LGPL 和商业协议
Qt 的两个许可证区别分析:LGPL 和商业协议 Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有 ...
- MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能...
MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能... MingQQ目前支持的功能如下:1.支持普通方式登录.验证码方式登录.注销.保持在线.改变在线状态.2.支持 ...
- 协议分析 - DHCP协议解码详解
协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...
- TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议
前言:在学习tcp三次握手的过程之中,由于一直无法解释tcpdump命令抓的包中seq和ack的含义,就将tcp协议往深入的了解了一下,了解到了几个协议,做一个小结. 先来看看我的问题: 这是用tcp ...
- oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)
问题描述1: C:\Users\Administrator>lsnrctl start LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Pr ...
- 协议系列之HTTP协议
什么是HTTP\HTTPS HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.HTTP协议用于从WWWserver传输超文本到本地浏览器的传输协议,它能使浏览 ...
- 老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览
老李推荐:第4章3节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...
- 老李推荐:第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览 1
老李推荐:第4章1节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...
随机推荐
- eclipse中导入jar文件的源码
有时候想看看一个jar包的源码是怎么写的,想按Ctrl+鼠标左键点击来自动导航这时候就需要先把源码给导入到eclipse中,步骤如下:首先准备jar包和源文件包比如:
- 1JavaEE应用简介----青软S2SH(笔记)
这本书主要是讲解Struts2,spring,Hibernate框架的, 因为工作中用的较多的是SpringMVC,Struts2用的较少,所以想系统学习一下,就买了这本书. 这本书是青软的,虽然是培 ...
- [Head First设计模式]山西面馆中的设计模式——装饰者模式
引言 在山西面馆吃鸡蛋面的时候突然想起装饰者这个模式,觉得面馆这个场景跟书中的星巴兹咖啡的场景很像,边吃边思考装饰者模式.这里也就依葫芦画瓢,换汤不换药的用装饰者模式来模拟一碗鸡蛋面是怎么出来的吧.吃 ...
- [NHibernate]ISessionFactory配置
系列文章 [Nhibernate]体系结构 引言 在上篇文章学习了orm和nhibernate相关概念,这篇文章主要学习ISessionFactory如何配置. 因为NHibernate被设计为可以在 ...
- 关于使用 no-js (Modernizr)
最近有些朋友问到:为什么我的网页 code 有 class="no-js" ? <!DOCTYPE html> <html dir="ltr" ...
- PHP计算一年有多少周,每周开始日期和结束日期
一年有多个周,每周的开始日期和结束日期 参考代码一:[正在使用的版本] <?php header("Content-type:text/html;charset=utf-8" ...
- PHP中常见的五种设计模式
设计模式只是为 Java架构师准备的 — 至少您可能一直这样认为.实际上,设计模式对于每个人都非常有用.如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非 ...
- Spring中的JdbcTemplate使用
1.引出SpringJDBC的概念 在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率.但是当使用H ...
- C和指针 第五章 位数组
5.4的习题:编写一组函数,实现维数组,函数原型如下: //指定位设置为1void set_bit(char bit_array[], unsigned bit_number); //指定位清零 vo ...
- cf595d
题意:给出一个轮子,上面有一个随着它转动的传感器在圆周上,给出一个指定距离m,和轮子向前行进的速度v以及轮子的半径r.问让传感器通过该距离最少需要多少时间. 分析:首先我们列出传感器行进距离与时间的轮 ...