OSGi Pure Plugin Architecture Introduction

2024-01-15 08:48

本文主要是介绍OSGi Pure Plugin Architecture Introduction,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OSGi体系结构

OSGi 的初衷是面向嵌入式系统的应用,支持在一个Java虚拟机上加载和启动多个Java应用程序。随着OSGi在Eclipse3.0上的应用成功,其逐渐成为构建纯插件结构的企业级应用软件系统的首选平台。

OSGi 是一个纯插件的体系结构,OSGi 框架实现是一个最为核心的插件,逻辑实现分层见下面两张图:

            

L0层Java执行环境

OSGi最初规范定位到嵌入式系统,例如家电、汽车、手机等执行环境,所以插件要配置适合的运行环境与Policy。当OSGi框架加载插件时会对插件要求的执行环境做校验。例如,Eclipse中可以配置下图中的执行环境:


 

L1模块层(组件或插件层)

L1模块层(插件层 或 组件层)定义插件的ClassLoading策略(Policy),这也是OSGi最为出色和吸引人的地方。我们知道,任何一个Java平台的插件体系结 构,首先要解决的是ClassLoading的问题。OSGi在Java动态ClassLoading基础之上,提供了完美的插件 ClassLoading解决方案。传统J2SE程序,有单一的Classpath包含所有的classes与resources,L1插件层为每个 OSGi插件提供了私有的Classpath和独立的Classloader,有效的控制了插件间的Class隔离、依赖与协作。

插件间的Class依赖关系见下图(版权归www.osgi.org):


插件的类空间(Class Space)见下图(版权归www.osgi.org):


插件的类加载过程:


 

L2插件生命周期管理层

L2层负责运行时动态安装(Install)、启动(Start)、停止(Stop)、更新(Update)或卸载(Uninstall)插件。

插件的生命周期见下图(版权归www.osgi.org):


L3服务注册层

L3提供了一个动态的服务注册模型,插件可以注册(register)、发现(lookup)、使用(reference)服务。

该层的服务注册采用ServiceLocator模式,见下面图示:



该层的实现由于没有直接的IoC容器支持,被很多过分相信IoC作用的人所批评。Martin Fowler曾经说过,“说一个系统是基于IoC的,就好像说一个汽车有四个轮子”,IoC只不过是一种模式和设计原则,任何一个设计得比较好的面向对象 系统都或多或少的具备这样的特征,这与存不存在一个独立的IoC容器关系不大,尽管IoC容器在开发上带来很大的便利与优势。另外一个方面,IoC容器本 质上还是一个Service Registry,只不过增加依赖装配功能,所以在OSGi的服务注册模型上,可以很容易的支持IoC。

OpenCore在该层的服务模型下实现了非常灵活的分级IoC容器,支持插件级、应用程序级、网络级的IoC功能。

这篇关于OSGi Pure Plugin Architecture Introduction的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608316

相关文章

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

PC/MCU/SoC使用的计算机架构(Architecture)

1. 冯·诺依曼结构 冯·诺依曼结构(Von Neumann Architecture)是计算机系统的经典架构,由数学家约翰·冯·诺依曼在1945年提出。它的核心思想是程序存储器和数据存储器共享同一存储设备,程序和数据以相同的方式存储和访问。冯·诺依曼架构的主要特点包括: 单一存储器:存储程序指令和数据在同一个存储器中。控制单元:通过程序计数器顺序执行指令。数据路径:通过一个共享的总线,将数据

Exception in plugin Android ButterKnife zelezny

所在页面的布局文件命名id有问题,不能有两个下划线,,如tv__name

【异常】java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.

异常现象 执行mysql数据库操作的时候,出现以下异常信息: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868) ~[mysql-connector-

AI基础 L1 Introduction to Artificial Intelligence

什么是AI Chinese Room Thought Experiment 关于“强人工智能”的观点,即认为只要一个系统在行为上表现得像有意识,那么它就真的具有理解能力。  实验内容如下: 假设有一个不懂中文的英语说话者被关在一个房间里。房间里有一本用英文写的中文使用手册,可以指导他如何处理中文符号。当外面的中文母语者通过一个小窗口传递给房间里的人一些用中文写的问题时,房间里的人能够依

Introduction to Deep Learning with PyTorch

1、Introduction to PyTorch, a Deep Learning Library 1.1、Importing PyTorch and related packages import torch# supports:## image data with torchvision## audio data with torchaudio## text data with t

Android studio Plugin is too old 问题

Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to ........ 将默认的  classpath 'com.android.tools.build:gradle:2.2.0-beta2' 修改成 clas

vue-skeleton-webpack-plugin類庫使用記錄

vue-skeleton-webpack-plugin vue-cli3 未实现开发阶段注入骨架屏样式 若在vue.config.js 开启 css.extract = true 开发阶段无法实现样式热加载   在路由層面和首頁層面都加入骨架屏 構建的時候會報錯 [Vue warn]: Property or method "_ssrNode" is not defined on the

tensorrt plugin

自定义plugin 流程 首先明确要开发的算子,最好是 CUDA 实现;继承 IPluginV2DynamicExt / IPluginV2IOExt类实现一个Plugin 类,在这里调用前面实现的算子;继承 IPluginCreator 类实现一个 PluginCreator 类,用于创建插件实例,然后注册该 Creator 类;编译插件项目,生成动态链接库;在构造 engine 之前,