SlideShare ist ein Scribd-Unternehmen logo
1 von 54
OSGi.NET
理论与应用实践
西安尤埃信息技术有限公司
架构师 陈贞宝
2010.9.14
目录
OSGi.NET概述
OSGi.NET原理
OSGi.NET基础服务
OSGi.NET辅助工具
OSGi.NET实践
OSGi.NET概述
什么是OSGi
OSGi:Open Service Gateway Initiative
Wiki定义:一方面它指OSGi Alliance组织;
另一方面指该组织制定的一个基于Java语言
的服务规范——OSGi服务平台(Service
Platform)
OSGi服务平台是一个动态的模块化框架:支
持模块化与插件化、具有热插拔与动态特性、
支持SOA、支持模块扩展、提供安全性支持
等
OSGi应用现状
IBM的Eclipse、WebSphere
Oracle的Weblogic
Paramus的Infiniflow Service Fabric
ProSyst的ModuleFusion
Red Hat的JBoss
SpringSource的SpringSource应用平台
Sun Microsystem的GlassFish企业服务器
BWM车载系统
其它
什么是OSGi.NET
OSGi规范移植到.NET平台的实现
基于.NET的开放服务平台,支持.NET
Framework 2.0+
微内核+模块+面向服务架构思想
高内聚与低耦合
支持面向服务编程模型
热插拔与动态性
复杂系统=模块+服务+模块+…
OSGi.NET主要功能
模块化与插件化
热插拔与动态性支持
面向服务架构支持
模块扩展性支持
安全与隔离支持
支持控制台、Windows服务、WinForm、
WPF、ASP.NET等各种.NET环境
OSGi.NET 3分钟体验
尤埃开放服务平台UIOSP
(XAUI Open Service Platform)
Demo
为什么OSGi
开放平台
简单易懂,快速集成
标准模块化开发
组件级复用的解决方案
高可扩展性支持
面向服务架构支持
动态与热插拔
OSGi.NET原理
OSGi.NET体系结构
模块层概述
提供了对模块化和插件化完整规范与定义
模块层定义了
模块和片段模块
模块间依赖与解析
模块类加载模型
模块扩展支持
模块定义
定义
封装了特定的功能,向其它模块提供服务契约与
实现
由.NET类和其它资源组成
定义了模块基本信息、模块激活信息、模块运行
时描述、模块的服务以及模块扩展信息
模块定义
标准目录结构
位于OSGi.NET框架指定的plugins目录下
由模块定义文件Manifest.xml和相关运行文
件组成
Manifest.xml
模块清单文件
基本信息——<Bundle>XML节点
激活器信息——<Activator>XML节点
运行时描述——<Runtime>XML节点
服务信息——<Services>XML节点
扩展信息——<ExtensionPoint>和
<Extension>XML节点
详细信息——<BundleInfo>XML节点
Manifest.xml
示例结构
模块类型空间
模块 = Manifest.xml + 类 + 资源
模块类型空间是指这个模块可以访问的所有类
型的集合
模块类型空间 = 本地程序集类型 + 依赖程序
集类型
在Manifest.xml的<Runtime> XML配置节点定
义
模块运行时定义
<Runtime> XML配置节点
模块本地程序集
模块依赖的程序集
使用<Assembly> XML配置节点声明本地程序
集
使用<Dependency> XML配置节点声明依赖
依赖其它模块的程序集
依赖其它模块(所有程序集)
运行时定义示例
模块类型加载
模块类型空间组成
本地程序集
片段模块(子模块)本地程序集
依赖的程序集
依赖的模块
类加载支持
对CLR类加载机制进行扩展
通过IBundle.LoadClass提供类加载功能
模块类型加载
类加载顺序
.NET类库
本地程序集
片段模块本地程序集
依赖的程序集
片段模块依赖的程序集
依赖的模块
动态依赖的程序集
模块扩展支持
通过<ExtensionPoint> XML节点定义一个可
扩展点
使用XML Schema定义了扩展信息的格式
使用IBundleContext的GetExtensionPoints、
GetExtensions等方法获取扩展信息
使用IBundleContext.ExtensionChanged事件监听
是否有模块对其进行扩展
模块在启动时添加扩展,停止时卸载扩展
通过<Extension> XML节点定义一个扩展
标准XML描述了扩展信息
动态实现扩展
生命周期层状态
INSTALLED——模块已经成功安装
RESOLVED——模块已经解析了所有依赖,
意味着模块准备启动或者已经停止
STARTING——模块正在启动
ACTIVE——模块已经成功激活且正在运行
STOPPING——模块正在停止
UNINSTALLED——模块已经被卸载
生命周期层状态迁移
生命周期层操作
通过IBundleContext提供了模块的安装操作
通过IBundle提供了模块生命周期操作接口
解析IBundle.Resolve
启动IBundle.Start
停止IBundle.Stop
卸载IBundle.Uninstall
服务层概述
服务=服务契约+实现
服务契约:接口
实现:接口实现类
将接口与实现分离
允许提供不同实现
动态发现与绑定服务
面向服务支持
服务注册表ServiceRegistry
服务的容器
通过IBundleContext访问,包括:AddService、
RemoveService、GetService
通过<Sevices> XML配置节点自动注册和卸载服
务
面向服务支持
服务发现与引用
通过使用IBundleContext.GetService等接口搜索
服务
获取返回值绑定到服务契约
模块安全
确保模块不被非法篡改
非对称加密
数字签名
模块安全
模块安全沙箱,避
免非法访问
操作系统资源
.NET框架类库功
能
OSGi.NET框架
其它模块
模块安全沙箱
基于.NET Code Access Security(CAS)技
术
使用程序集证据对代码进行授权
提供了代码操作权限认证
CAS基本权限
扩展权限BundleLifecyclePermission、
BundleMetadataPermission、ServicePermission、
BundleEventPermission等
模块隔离
模块隔离目的
确保模块不会影响到OSGi.NET框架
确保模块不会影响另一个模块
使用逻辑进程对模块进行隔离
OSGi.NET框架实时管理与监控模块运行状况
模块占用资源
模块故障检测
模块故障恢复
OSGi.NET基础服务
模块管理服务
模块管理
查询模块
监控模块变化
生命周期操作
模块元数据
模块依赖管理
更改模块信息
提供IBundleManagementService服务契约
启动级别服务
控制启动和停止Bundle的顺序
提供了一下功能
安全模式启动
启动进度报告
处理不稳定模块
处理高优先级模块
提供了IStartLevelService服务契约
启动级别服务
原理
启动级别为非负整数, 0表示没有任何模块启动
OSGi.NET启动级别为1
启动时,框架从级别1开始增加,每增加一次便启
动相应级别的模块,直到级别增加到设置的启动
基本
停止时,从设置的启动基本开始减少,每减少一
次便停止相应的模块,直到级别为0
服务组件管理服务
提供了对OSGi.NET框架内服务的管理
注册服务
卸载服务
服务查询
服务监控
模块间服务引用关系
服务计数
消息总线服务
提供了模块间
基于消息总线
的通讯
基于消息主题
发布消息
订阅消息
处理消息
OSGi.NET辅助工具
OSGi.NET模板
模块配置工具
远程管理控制台
监控与管理工具
OSGi.NET实践
UIOSP简介
UIOSP:XAUI Open Service Platform
支持面向服务构架的开放服务平台
OSGi在.NET平台的实现,目前是RC2版本
兼容各种.NET环境,包括桌面环境、Web环
境和移动应用环境
目前与HP、Microsoft合作在某国企实施基于
UIOSP的应用
成功应用于AppStore和SaaS Engine研发
基于UIOSP应用架构
UIOSP应用——云计算平台
UIOSP基本功能实践
模块化
面向服务
模块扩展
UIOSP实践——模块化
1 创建默认模块
模块项目结构和目录结构
Activator与IBundleActivator、IBundle、
IBundleContext
Manifest.xml介绍
2 初始状态
3 启动级别
UIOSP实践——模块化
4 模块运行时与类加载
本地程序集
共享本地程序集与程序集依赖
类加载
5 模块生命周期操作
6 晚激活
7 片段模块等其它(略)
UIOSP实践——面向服务
1 服务提供者
通过激活器注册服务
通过Manifest.xml注册
2 服务消费者
服务查询与绑定
服务事件
UIOSP实践——模块扩展
1 扩展点
暴露扩展点
处理扩展点
处理扩展点事件
2 扩展
扩展定义
Q & A
The end
Thanks!

Weitere ähnliche Inhalte

Ähnlich wie OSGi.NET理论与应用实践

Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧fool2fish
 
Introduction to ngn sce
Introduction to ngn sceIntroduction to ngn sce
Introduction to ngn scegdems
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较Adam Lu
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术团队
 
台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚Jimmy Ho
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍ling yu
 
從open data角度談網站api應用
從open data角度談網站api應用從open data角度談網站api應用
從open data角度談網站api應用Yu Shu Huang
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设Tianwei Liu
 
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundryHong Cai
 
ForumSentry客戶解決
ForumSentry客戶解決ForumSentry客戶解決
ForumSentry客戶解決Kevin Kao
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Private cloud and open stack
Private cloud and open stackPrivate cloud and open stack
Private cloud and open stackzhangxiao2016
 
Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide呈 李
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心Du Yamin
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 longMeng-Ru (Raymond) Tsai
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
V5.6 ui 总结
V5.6 ui 总结V5.6 ui 总结
V5.6 ui 总结Baoyu Xu
 
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...土撥 JIE
 
Appcan平台介绍
Appcan平台介绍Appcan平台介绍
Appcan平台介绍36Kr.com
 

Ähnlich wie OSGi.NET理论与应用实践 (20)

Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧
 
Introduction to ngn sce
Introduction to ngn sceIntroduction to ngn sce
Introduction to ngn sce
 
Osgi Intro
Osgi IntroOsgi Intro
Osgi Intro
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
 
台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
從open data角度談網站api應用
從open data角度談網站api應用從open data角度談網站api應用
從open data角度談網站api應用
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设
 
51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
 
ForumSentry客戶解決
ForumSentry客戶解決ForumSentry客戶解決
ForumSentry客戶解決
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Private cloud and open stack
Private cloud and open stackPrivate cloud and open stack
Private cloud and open stack
 
Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 long
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
V5.6 ui 总结
V5.6 ui 总结V5.6 ui 总结
V5.6 ui 总结
 
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...
AWS_Educate_Ambassador_Day_TAIWAN_Track_B - Build a Telegram Chatbot using AW...
 
Appcan平台介绍
Appcan平台介绍Appcan平台介绍
Appcan平台介绍
 

OSGi.NET理论与应用实践