OSGI实战第一章

第一章         解开OSGI的面纱

  1. OSGI是什么?是Java平台的一个模块化层。
  2. 模块化:软件应用程序的代码被分割为表示独立内容的逻辑单元,可简化开发,可通过强化逻辑模块的界限来提高可维护性。
  3. Java模块化的不足

a)         Java使用访问修饰符(如public、protected、private和包级私有),解决底层面向对象封装,而不是逻辑系统划分。

比如,如果需要代码在多个包之间课件,那么包内的代码必须声明为public,那么所有的模块都可以使用这个public类。这样会暴露具体的实现细节,用户可能依赖于不想要公开的API,使后续的升级更加困难。

b)         易错的类路径概念、

原因是类路径隐藏了代码版本、依赖和一致性等特性。类路径不关系代码版本,无法明确描述依赖关系。建立类路径的过程是烦琐易错的,你只是不停地添加类库,知道虚拟机不再报找不到类的错误。经常出现一个JAR文件的类与另一个JAR文件中不兼容的类交互时会出现NoSuchMethodError异常。

c)         部署和管理支持上的不足。

在Java中存在对多个版本的依赖时,没有简单的方法来正确部署这些代码并执行。在部署之后更新应用和组件也会面临同样问题。

  1. OSGI的帮助

a)         当启动程序时,先确保代码满足依赖关系,然后才允许执行代码。不会出现由于类路径不正确导致ClassNotFoundException或NoSuchMethodError。

b)         要求在版本和其他约束条件方面上对依赖集进行一致性检查,不会出现由于依赖库的错误版本导致程序执行时错误。

c)         不必担心由于层次化的类加载模式隐含的限制,导致没款见共享类时导致类型不一致,如foo instanceof Foo == false。

d)        将一个程序打包成逻辑上独立的JAR文件,并且只部署哪些某个安装需要的部分。这大致阐述了OSGi的目的。

e)         OSGi为JAR文件定义了新一级的代码可见性。将一个程序打包成逻辑上独立的JAR文件,声明哪些代码是可以被其他JAR文件访问。

f)          为程序定义一个插件式的扩展机制。OSGi模块化特别适合提供强大的扩展性机制,包括支持执行时的动态性。

  1. 架构概览

OSGi服务平台包括OSGi框架和OSGi标准服务。

l  OSGI框架是实现并提供OSGi功能的运行环境。

l  OSGi标准服务定义了很多用于执行常见任务(如日志和首选项)的可重用API。

  1. OSGi框架

a)         框架的实现方式:Apache Felix, Eclipse Equinox,KnopFlerfish。Eqinox OSGi框架实现是Eclipse IDE的底层运行时环境。Apache Felix OSGi框架实现是GlassFish v3的运行环境。多种应用长江表明OSGi框架具有很高的价值和灵活性。

b)         OSGi框架的分层结构:

                         i.              模块层,关注于打包和共享代码。

                       ii.              生命周期层,关注于提供执行时环境模块管理和对底层OSGi框架的访问。

                      iii.              服务层,关注于模块,特别是模块内的组件间的交互和通信。

  1. 模块层

l  定义了OSGI模块的概念,并称为bundle。

l  Bundle是一个包含元数据、类文件和相关资源的JAR文件。

l  Bundle可以是一个普通的JAR文件+特殊的元数据,也可以是包含构成一个特定应用程序的多个逻辑模块组成的JAR。

l  Bundle比标准的JAR文件更强大,因为可以明确声明名导出包。从这个意义上说,Bundle扩展了Java的普通访问修饰符(public,private,protected)。

l  Bundle可以明确声明依赖哪些外部包(导入)。

l  明确声明导入包和导出包的好处是:OSGI框架可以自动地管理和验证它们的一致性,称为bundle解析,使导入包和导出包相匹配,确保bundle版本和其他方面约束的一致性。

  1. 生命周期层

l  定义了在OSGI框架中是如何动态安装和管理Bundle的。

l  目的一:在应用程序外部,精确定义啦bundle生命周期的操作(安装、更新、启动、停止和卸载)。

l  目的二:定义了bundle如何访问它们的执行环境。如何访问它们的执行环境。执行环境为bundle提供了一种与OSGi框架交互的方式和执行时的一些便利。

l  生命周期层整体支持创建可从外部(和远程)管理的而应用程序,或者完全自我管理的应用程序,或者两者的任意组合。

  1. 服务层

l  使用基于接口的面向服务的交互模式。

l  主要涉及面向服务的发布、查找和绑定。服务提供者将服务发布到服务注册中心;服务客户端通过搜索服务注册中心,查找可供使用的服务。

l  基于接口,提倡接口与实现之间的分离。OSGI服务是Java接口,表示服务提供者和服务客户端之间的一种契约。服务层通过基于服务的动态性(服务可以在任何时刻出现或消失)来扩展声明周期层基于bundle的动态性。结果产生了一种支持模块化和灵活性的编程模式。

  1. 如何使用OSGi框架中的层?

a)         涉及应用,将它分解为一些服务接口(普通的基于接口和编程)和这些接口的客户端。

b)         使用你选定的工具和方法来实现服务提供者和客户端组件。

c)         将服务提供者和客户端组件打包成独立的JAR文件,然后用合适的OSGi元数据扩展每个JAR文件。

d)         启动OSGi框架

e)         安装和启动所有来自步骤c的JAR文件。

转载于:https://www.cnblogs.com/gosmarter/p/6516580.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松完成Birt报告

这是使用Birt插件在Eclipse中构建报告的完整指南。 Birt或Business Intelligence and Reporting工具是一种无需编写太多Java代码即可生成报告的工具。 如果您使用的是ireport,那么您知道我在说什么:)(晶体报告..毫无意义&#xff…

MySQL 的 RowNum 实现

MySQL 下面没有RowNum,排序后序号却无法得到,比较麻烦! SELECT rownum:rownum1 rownum, CollectSn From(SELECT rownum:0,bbgmain.* FROM qbdb.bbgmain WHERE collectsn! ORDER BY collectsn limit 10) t转载于:https://www.cnblogs.com/hym-…

java jdbc事务管理_hibernate事务管理 (jdbc jta)

评论# re: hibernate事务管理 (jdbc jta)2007-07-29 10:18pigJTA事务的开始Transaction tx session.beginTransaction();应该不是这样吧,应该是从容器中获得。 回复 更多评论# re: hibernate事务管理 (jdbc jta)2007-07-29 12:35slxpig建议看看hibernate referen…

@Resource VS @Autowired

Resource 和 Autowired 均是用于bean注入的注解,都可以写在字段和setter方法上,如果都写在字段上,就无需写setter方法。 Autowired 由Spring的org.springframework.beans.factory.annotation.Autowired提供 默认byType方式注入,并且对象不能为…

用于Spring应用程序的Gradle原型

我发布了Gradle原型,可用于基于Springframework创建Java / Groovy应用程序。 当然,它不是一个真正的原型,因为这样的创作是不可能的 。不过,你可以创建,编辑和部署应用服务器很少的步骤。 对于可部署的软件项目而言&am…

java tm无响应_Java(TM) Platform SE binary 未响应 是怎么个情况?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼988098 [Thread-10] INFO sound.oo0O - Creating streaming player for music with id [faction_pirate_encounter_02_hostile.ogg]988099 [Thread-10] INFO sound.OooO - Playing music with id [faction_pirate_encounter_02_hos…

ROS and PCL install

ROS hydro安装指南: http://wiki.ros.org/cn/hydro/Installation/Ubuntu (加ppa源后直接安装) Linux OpenCV安装指南:http://blog.sciencenet.cn/blog-571755-694742.html (从源代码编译) PCL:…

揭开Python科学计算的面纱

春牛春杖。无限春风来海上。便与春工。染得桃红似肉红。 春幡春胜。一阵春风吹酒醒。不似天涯。卷起杨花似雪花。 标准的Python中用列表保存一组值,可以当做数组使用,但是由于其值类型任意,所以列表中保存的是指针,这样的话保存一…

FXML:使用BuilderFactory的自定义组件

当您想使用FXML时,您将需要能够添加自己的组件。 这很容易,您只需要添加一个import语句。 FXML文件中以大写字母开头的元素将被解释为实例,如果它们是Java Bean,则最重要:如果它们具有无参数的标准构造函数&#xff0c…

Excel 一键上传到数据库

<a class"edit" id"batchImport"> 批量导入 </a> js代码弹窗&#xff1a; $("#batchImport").click(function(){ //弹窗弹窗下列内容 var html<form id"execlForm" method"post" enctype&quo…

SQL——实例记录(对查询结果排行号)

select 订单编号, DENSE_RANK() over(order by 订单编号) from test 排序结果&#xff1a; 55678-0-1 1 55678-0-1 1 33454-0-1 2 33454-0-1 2 33454-0-1 2 这种是按照订单不同的顺序依次往后排 当然也可以在 over后面加上你想要的起始号 例&#xff1a;DE…

TeamCity构建依赖项

介绍 构建依存关系的主题既不重要也不是次要的。 各种构建工具从不同的角度处理此主题&#xff0c;从而提供各种解决方案&#xff0c;每种解决方案都有其优点和缺点。 熟悉发行版和快照依赖项的Maven和Gradle用户可能不了解TeamCity快照依赖项&#xff0c;或者认为他们与Maven…

复选框操作checked选中为true,反之为False,也可以赋值为true,false

转载于:https://www.cnblogs.com/shiluoliming/p/6518236.html

java 个税计算_【JAVA300例】10、计算个人所得税

逻辑是这样的。每个等级计算的系数都不一样。分别有多个档位。要判断处于什么档位然后用特殊的公式去计算。原版是从小到大判断&#xff0c;每次写条件很烦。这里换成从大到小。节省敲代码时间。import java.util.Scanner;public class Test010{public static void main(String…

Java是否越来越接受静态导入?

曾经有一段时间&#xff0c;至少在礼貌的社会中&#xff0c;人们普遍认为使用“ 不是 ”一词是不可接受的。 确实&#xff0c;那时&#xff08;也许直到今天&#xff09;&#xff0c;许多人确实&#xff08;也确实&#xff09;认为不是一个真实的词。 尽管这个词并没有 引起争议…

Stream 工具方法

inputstream 转 string 1、使用字符流 InputStream is TestZhimaCustomerCertificationInitialize.class.getClassLoader().getResourceAsStream("config/rsa_private_key_pkcs8.pem"); InputStreamReader isr new InputStreamReader(is); BufferedReader br new…

从0开始学习 GitHub 系列汇总笔记

本文学习自Stromzhang, 原文地址请移步&#xff1a;从0开始学习 GitHub 系列汇总 我的笔记&#xff1a; 0x00 从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级科技公司纷纷加入 GitHub &#xff0c;并贡献他们自己的项目代码 Google: https://github.com/goog…

Drools Guvnor –管理访问

外部化业务或技术规则对于可伸缩应用程序非常重要&#xff0c;但是应该管理BRMS服务访问。 guvnor使用基于角色的授权提供控件UI访问和操作。 在drools-guvnor参考手册中列出了几种权限类型。 具有所有权限的管理员。 分析师或只读分析师&#xff1a;特定类别的分析师权限。 软…

java文件操作和_JAVA文件操作类和文件夹的操作

JAVA文件操作类和文件夹的操作package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import jav…

CCNA基础知识摘录

cisco设备的启动要点&#xff1a;1、检测硬件(保存在rom)2、载入软件&#xff08;IOS&#xff09;&#xff08;保存在Flash&#xff09;3、调入配置文件&#xff08;密码&#xff0c;IP地址&#xff0c;路由协议都保存在此&#xff09;&#xff08;此文件保存在NVRAM&#xff0…