OSGi介绍(三)OSGi service platform的体系结构

深入探索OSGi Service Platform 4.1的特性与优势 在现代软件开发中,模块化成为提高开发效率、维护性和可伸缩性的重要手段。OSGi服务平台为Java提供了先进的模块化支持,它通过定义一系列的规范,使得开发人员可以构建、部署和管理动态模块化的Java应用程序。OSGi允许多个版本的库共存在同一个Java虚拟机中,这是通过定义了捆绑(Bundle)的概念实现的。一个捆绑是一个可以独立安装、启动、停止和更新的模块化单元。在OSGi中,捆绑通过声明它们的依赖关系,可以优雅地解决Java应用程序中的类路径问题。 阅读详情

 

先让我们来看看OSGi service platform的体系结构。另外要说明的是,我在后面的文章中,将采用framework来代替OSGi service platfrom,这样比较简便。
下面这张图来自OSGi Alliance的主页(http://www.osgi.org/)
 

OSGi Service Platform Architecture

层次很分明吧。放到我们假想的案例中,OS&Hardware可以对应为PDA的硬件和操作系统,您可以想象它是Intel xscacle + Microsoft window mobile,或者是Arm + embedded Linux
而Execution Environment当然是我们上次提到的CVM + CDC + FP + PP,有这个jvm的配置运行framework就绰绰有余了。而再往上,就是我们要重点学习和分析的OSGi framework了。而Modules, Life Cycle, Service Registry, Services和Security是从不同的5个角度来划分framework所具备的功能,后面我将会从除了Security外的四个方面分别结合我们的假设场景来分析。而体系结构的最上层是符合OSGi framework接口标准的应用程序,也就是OSGi世界中有名的“bundle”。

下面来看看OSGi规范是如何定义一个bundle的。在r4规范的第27页中大致这样描述到:Framework定义了模块(modularization)的单元,叫作bundle。Bundle实际就是一个具有jar(Java ARchive)格式的文件,其中包含了java的class文件和其他资源文件(比如图标,配置文件等等)。Bundle可以在自己的manifest文件中说明自己能够提供哪些java包,其他bundle如果在自己的manifest文件中指定了它需要这个包,那他们之间就可能产生java包的依赖关系,这样多个bundle之间就可以共享java包。值得注意的是,bundle是能够在framework中部署的唯一格式。下面给出原文的描述:
A bundle is a JAR file that:
? Contains the resources necessary to provide some functionality. These resources may be class files for the Java programming language, as well as other data such as HTML files, help files, icons, and so on. A bundle JAR file can also embed additional JAR files that are available as resources and classes. This is however not recursive.
? Contains a manifest file describing the contents of the JAR file and providing information about the bundle. This file uses headers to specify information that the Framework needs to install correctly and activate a bundle. For example, it states dependencies on other resources, such as Java packages, that must be available to the bundle before it can run.
? Can contain optional documentation in the OSGI-OPT directory of the JAR file or one of its sub-directories. Any information in this directory is optional. For example, the OSGI-OPT directory is useful to store the source code of a bundle. Management systems may remove this information to save storage space in the OSGi Service Platform.

framework的modules这一方面功能将主要负责bundle的安装部署,更新和卸载,以及bundle在设备的物理存储(如果有的话)。在这个层次,每个bundle都是独立的,它的安装,升级和卸载完全不依赖任何其他bundle,这点framework提供了强大的隔离性。Life Cycle专门负责对bundle的解析(比如关联两个有相互依赖关系的bundle),启动(相当于运行应用程序)和停止(相当于停止应用程序)。这个层次中,bundle间的逻辑关系被创建起来,这些关系能否成功的创建,将会直接影响bundle的成功解析和启动。Service Registry可以认为是一个数据库,bundle启动后,可以向这个数据库注册它动态提供的服务。只要bundle不被停止,且bundle不主动撤销注册的服务,这个服务将一直保存在这个数据库中供其它bundle来查询和使用。而Services就是由bundle运行时提供的具体服务对象,这些服务对象的存在,使得framework具有极其动态的特征,并为framework运行时提供灵活强大的功能。
另外,根据OSGi Alliance的说法,OSGi的运行平台包括了j2me(kvm + cldc + midp, cvm + cdc+fp), j2se, j2ee。不过,我个人还是觉得目前的midp规范还太弱,OSGi要想运行在上面,很多功能实现起来都比较不爽。

好,有了对framework结构层次的皮毛认识,下面我们就开始着手改造那个“扶贫助手”的程序,使其变成OSGi的bundle(s),然后从上面提到的4个方面来分析framework的机制。
这里,我先给出“扶贫助手”的java application模拟程序代码:

package  aa.bb.cc;

public   class  FamilyInfo  {
 private String familyName; //家庭名称
 private int population; //人口数量
 private int incomePerYear; //家庭年收入

  …..//省略了getter和setter方法

//获得家庭人均年收入
 public int getIncomePerMember(){
  return (int)(this.incomePerYear/this.population);
 }


 public String toString() {
  
  return "Family: " + this.familyName + ", population: " + this.population + ", income: " + this.incomePerYear;
 }

 //按家庭年收入又低到高排序
 public static void sortByIncomePerYear(FamilyInfo[] families){
  FamilyInfo temp = null;
  for(int i = 0; i < families.length -1; i ++){
   for(int j = i + 1; j < families.length; j ++){
    
    if(families[i].getIncomePerYear() > families[j].getIncomePerYear()){
     temp = families[i];
     families[i] = families[j];
     families[j] = temp;
    }

   }

  }

  
 }


 //按家庭人均年收入由低到高排序
 public static void sortByIncomePerMember(FamilyInfo[] families){
  FamilyInfo temp = null;
  for(int i = 0; i < families.length -1; i ++){
   for(int j = i + 1; j < families.length; j ++){
    
    if(families[i].getIncomePerMember() > families[j].getIncomePerMember()){
     temp = families[i];
     families[i] = families[j];
     families[j] = temp;
    }

   }

  }

  
 }


 public static void main(String[] args){
  FamilyInfo[] families = new FamilyInfo[3];
  families[0] = new FamilyInfo();
  families[0].setFamilyName("Zhang");
  families[0].setPopulation(3);
  families[0].setIncomePerYear(1200);
  families[1] = new FamilyInfo();
  families[1].setFamilyName("Li");
  families[1].setPopulation(6);
  families[1].setIncomePerYear(1800);
  families[2] = new FamilyInfo();
  families[2].setFamilyName("Liu");
  families[2].setPopulation(4);
  families[2].setIncomePerYear(1500);
  FamilyInfo.sortByIncomePerYear(families);
  for(int i = 0; i < families.length; i ++){
   System.out.println(families[i].toString());
  }

  FamilyInfo.sortByIncomePerMember(families);
  for(int i = 0; i < families.length; i ++){
   System.out.println(families[i].toString());
  }

  
 }

}


 

 

大红球预警版-精选+自定义板块监控 这是一款简单易用的股票大单资金监控插件,兼容通达信软件,可嵌入分时图或定制版面。它以红绿圆球直观显示主力买卖情况(红球为买,绿球为卖),支持300万以上大单语音播报。插件提供实时资金流向分析、多股同时监控、自定义预警条件等功能,无需L2账号。用户可自由切换图形/列表模式,监控特定板块,并配合幻影软件实现自动交易。虽然上涨股通常红球占优,但需结合其他指标综合判断。该插件完全免费,包含详细视频教程,适合新手使用。 阅读详情

相关推荐

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

用Java的OSGi框架构建灵活模块化应用

OSGi是一种面向服务的模块化框架它将应用程序划分为多个独立的、可重用的模块每个模块被称为一个bundle每个bundle都有自己的生命周期、类加载器和依赖管理机制OSGi框架提供了动态部署、服务导向、类加载隔离和生命周期管理等关键特性使得应用程序更具灵活性和可维护性。

编程思维 692

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由 ValRay发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结...

abcd_0207的博客 521

libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-22.0.7-1.el7.x86_64

今天安装Rabbitmq的 erlang-22.0.7-1.el7.x86_64.rpmrpm包时遇到了这个坑,害找到说是不容易;错误信息在下面; [root@iz2zef7u84js1qeeq00ewwz RabbitMQ]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm warning: erlang-22.0.7-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY error:

qq_45782349的博客 5782

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 449

详细地探讨OSGi的关键概念和架构

OSGi提供了一种强大而灵活的模块化和动态服务平台,使得Java应用程序具有高度的模块化和动态更新能力。无论是嵌入式系统、企业应用还是物联网,OSGi都能够提供有效的解决方案。如果有任何特定的问题或需要进一步深入了解某个方面,请随时告诉我。

weixin_45990682的博客 773

添加USB wifi驱动到RK3568

在日常开发中我们经常需要用到wifi功能,一般来说soc厂家都会事先做好了几个厂家的wifi驱动在内核源码目录下,我们只需要按原理图配置对应的设备树即可。常用的wifi的接口有:USBSDIOPCIE下面来介绍这这种接口是如何使用wifi芯片。提示:以下是本篇文章正文内容,下面案例可供参考本小节介绍了一个配置一个USBwifi驱动的整个流程,并没有介绍到SDIO,下小节基于AP6256介绍如何使用。

qq_24093081的博客 2049

OSGi原理与最佳实践:第一章 OSGi框架简介(1)Equinox

转自:http://www.osgi.com.cn/article/7289455 前言 Java 7 的发布日期临近,模块化是 Java 7 中重要的特性之一。在 Java 语言级对模块化提供支持之前,OSGi 已经是业界中知名的 Java 模块化规范。OSGi 联盟成立于 1999 年,发展到今天已经得到了众多企业、厂商、开源组织的支持,尤其当主流的 Java 应用服务器(Oracl...

infi 1070

Java Swing教程-16. Swing中的图形绘制

这篇教程介绍了Java Swing中的图形绘制功能,主要内容包括: Graphics类的基本使用 - 介绍了如何重写paintComponent方法实现自定义绘制,以及基本图形绘制方法(线条、矩形、椭圆、多边形等) 文本与图片绘制 - 讲解了文本绘制方法、字体设置和图片加载绘制技术 颜色与字体设置 - 包括预定义颜色、RGB自定义颜色、透明色设置以及字体样式控制 案例实现 - 提供了一个简单绘图程序的框架,支持鼠标绘制不同图形、选择工具和自定义颜色等功能 教程通过代码示例详细演示了各种绘图操作,适合Java

无 232

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1344

【OSGi】Service

服务 服务就是:为别人完成的工作。目的:是让别人为你工作,而不是试图自己做一切事情。 和方法调用的区别:服务是指提供者及其使用者之间的一个契约,使用者不关心服务的具体实现,甚至不关心是谁提供的,只要遵守约定的契约即可。 面向服务的设计方式鼓励用即插即用的方式来进行软件开发,这意味着在开发、测试、部署、维护过程中有更大的灵活性。 接口+依赖注入 Java中一般是基于接口编程的,然而除非我们知道具体的接口实现类,否则我们无法创建一个接口实例。 传统Java可以通过依赖注入(Dependency Inje

Alpha's 学习笔记 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[译]OSGi Service Platform Core Specification Releas

5.1 Introduction The OSGi Service Layer defines a dynamic collaborative model that is highly integrated with the Life Cycle Layer. The service model is a publish, find and bind model. A service is a n...

chinasxhz 302

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OSGi Service Platform 技术背景

近两年,OSGi 技术的发展势头十分的迅猛,引起了业界越来越多的厂商的关注。然而,事实上 OSGi 并不是一个新的名词,到今年它已走过了整整 10 年的发展历程。OSGi 联盟成立于 1999 年,是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,是开放业务网关的发起者。起初 OSGi 技术只是关注于嵌入式领域,诸如机顶盒、服务网关、手机等应用环境,200

曲士 541

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Early draft of OSGi Service Platform Release 4.2 specification now available

Engineering Adrian Colyer September 01, 2008 The OSGi Alliance have posted an early draft of release 4.2 of the Service Platform specification. SpringSource employees are active members of both the Core Platform Expert Group (CPEG) and the Enterprise Expe

[Blog][Domain] programb.blog.youkuaiyun.com 322

基于Eclipse开发OSGI的简单实例

基于Eclipse开发OSGI的简单实例 一.        概述OSGI SERVICE PLATFORM是一个基于JAVA的,开放并且提供统一接口标准的体系框架,在OSGI中所有模块的部署都必须以Bundle 的方式来进行部署。基于这个体系框架,服务提供商,程序开发人员,软件提供商,服务网管运营商,设备提供商能够 协调地联合起来开发,部署以及管理向用户提供的各种服务。(a)

Benson Wang 专栏 1万+

Running Spring Applications on OSGi with the SpringSource Application Platform

Engineering Rob Harrop May 02, 2008 A lot of people have been asking what exactly the SpringSource Application Platform does for Spring applications to make them run well under OSGi, over and above what you can get out of the box with OSGi and Spring Dynam

[Blog][Domain] programb.blog.youkuaiyun.com 284

Spring-OSGI 1.0 M3 中文手册

Spring Dynamic Modules Reference Guide for OSGi(tm) Service Platforms. Version 1.0 M3 1.0 Introduction This document is the reference guide for Spring Dynamic Modules. It defines the syntax an...

轻轻草原 251

OSGI教程

用osgi在开始的设计阶段很重要,因为第一次接触osgi,前期的设计变动比较大,代码重构了很多次。OSGI搭建系统带来的是架构级别的改变,模块化设计、面向服务的组件模型设计以及动态性的设计三个方面,也只有在把握好了这三方面才能充分的发挥基于OSGI搭建系统的优势,否则也许会给项目带来更大的痛苦。       后面会做个demo演示osgi-ds,日志,读取properties文件,spring-

ATCO[这里,只是顺手插曲] 1903

OSGI

OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务, 这些服务使Java成为软件集成和软件开发的首选环境。Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、 可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用和部署中。 OSGi是什么 OSGi亦称做J...

lvwenwen 155

Egeye AddIn Framework - An OSGi like service framework for the .Net platform.

Egeye AddIn Framework 是一个 。NET 平台上类似 OSGi 的服务框架,目前发布第一个版本,目前包括 AddIn Framework 的一个核心,一个 Console 和几个测试插件。 主要特性: 1、开源,基于 New BSD License 协议 2、在 .NET 2.0 平台实现,类似 OSGi 的服务框架 3、完全基于扩展的方式开发,支持插件生命...

weixin_30326745的博客 114

分析Eclipse源代码,理解OSGI插件机制内幕

document.title="分析Eclipse源代码,理解OSGI插件机制内幕 - "+document.title一、概述        一直关注我blog的朋友会看到,最近我一直在关注Eclipse源代码的编译工作,但除了简单的编译设置和烦琐而极具耐心的源代码剥离,似乎还没有什么太有趣的东西出现。现在,经过了前面一系列的热身运动,我将和大家一起走入Eclipse的内核,看看它到

s00n的桃花园 3231

【网摘】了解 Eclipse 插件如何使用 OSGi

http://www.ibm.com/developerworks/cn/opensource/os-ecl-osgi/ Eclipse 集成开发环境(IDE)和 Eclipse Rich Client Platform(RCP)应用程序的核心由 Open Services Gateway Initiative(OSGi)规范的实现驱动。本文通过描述对 Eclipse 平台而言插件是什么,并...

神秘失控 216

Eclipse插件开发系列一:Runtime 内核架构

Rich Client Platform 的核心运行时是Eclipse平台的微内核 主要负责管理Eclipse的所有插件和Fragements。Eclipse3.0以后,Eclipse基于OSGi规范的轻量级实现Equinox 来构件核心运行时。核心架构图如下。                 Applications/Bundles(Plug-ins) Eclipse Job Ma...

高效匠人 291
上一篇: osgi介绍(二)一个假想的实例
下一篇: OSGi介绍(四)第一个bundle
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值