C和JAVA的插件机制-个人总结_第1页
C和JAVA的插件机制-个人总结_第2页
C和JAVA的插件机制-个人总结_第3页
C和JAVA的插件机制-个人总结_第4页
C和JAVA的插件机制-个人总结_第5页
已阅读5页,还剩21页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

插件框架插件介绍看法Eclipse插件架构插件内部结构典型插件定义插件加载插件类加载-ClassLoader插件加载过程Eclipse插件加载过程插件框架归纳开下班厂

OSGi.NET插件框架,是

OSGiR4.2规范移植到

.NET平台的实现。

OSGi全称为

OpenServiceGatewayInitiative,它一方面指由

IBM、Oracle、BEA、SAP等国际IT巨头组成的

OSGi缔盟组织;另一方面指该组织拟定的一个基于Java语言的服务规范——OSGi服务平台。OSGi.NET插件框架供给了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和搬动平台等任意.NET应用环境。目前,OSGi已经获取广泛的应用,以下所示。插件程序结构基于OSGi.NET插件框架的应用程序系统结构以以下图所示。在这里,应用程序由主程序和插件组成。主程序是详细的应用环境的入口,它用于启动OSGi.NET插件框架并进入插件框架裸露出来的入口点;应用插件则是实现软件不同样功能的业务模块。OSGi.NET插件框架优点开放、规范、一致:吻合规范的模块均可被OSGi.NET插件框架加载。快速集成:将模块放在插件模块即实现功能集成。高度可重用:仅经过拷贝即可实现重用,无需更正任何代码。热插拔与动向:每一个模块都可被动向安装、启动、停止和卸载。标准模块化与模块物理隔断:模块拥有一致规范且互相独立。面向服务编程支持:供给基于面向服务架构编程模型以支持模块通讯。动向可扩展:经过裸露扩展点实现动向扩展。多环境支持:支持各种.NET应用环境。插件框架原理插件和插件运行时在OSGi.NET插件框架中,插件即Bundle,它具备物理隔断、热插拔和动向特点。每一个插件都是完好可复用的,能够被动向的安装、启动、停止、卸载或更新。插件运行时即BundleRuntime,则是插件的运行容器,它负责从插件目录中加载和启动插件。面向服务在OSGi.NET插件框架中,插件具备高内聚、低耦合特点,也就是说插件间耦合度特别低。服务即

Service,是插件通讯的方式。在这里,

“服务=接口

+实现”。接口是服务的契约,服务供给商实现了服务的接口并将服务注册到服务总线,服务花销者则经过服务契约从服务总线找寻服务并绑定使用。这里,服务是动向,能够被动向注册、卸载和更新,一个服务契约也可能有多个服务实现。插件扩展在OSGi.NET插件框架,插件具备可扩展性,能够在不更正插件代码情况下,更正也许扩展插件的行为。这个扩展体系是经过一对基于

XML格式的“扩展点

+扩展”来实现的。一个插件能够经过定义

“扩展点”来实现可扩展,而其他插件则经过定义对应的

“扩展”来注册/更新功能。扩展/扩展点在插件启动时注册到插件运行时,相反,在卸载时,则从插件运行时卸载。片段插件在OSGi.NET,有一种特其他插件,称为片段插件,即FragmentBundle。片段插件相当于子插件,其作用是为了扩大其他插件的种类空间、扩展信息。除了片段插件的插件,都是宿主插件(HostBundle)。与宿主插件不同样的是,片段插件不能够被启动、停止,没有类加载器,不同样意从片段插件加载种类。当宿主插件被启动后,片段插件会自动附加到宿主插件,立刻片段插件的种类空间、扩展信息合并到宿主插件。开下班厂原理开下班厂原理归纳开下班厂主要由iOpenWorks开下班厂平台和OSGi.NET插件SDK组成。开发者从iOpenWorks开下班厂平台中下载到OSGi.NET插件SDK,并使用该SDK的项目模板来创办一个插件应用程序。开下班厂原理图以下所示。iOpenWorks开下班厂平台主要由插件库房和插件库房OpenAPI组成。插件库房实现插件的版本管理、OSGi.NET内核文件版本管理、SDK及客户端管理,而插件库房OpenAPI则向外裸露了插件及其版本信息、内核文件及其版本信息从而为客户端供给内核及插件的自动升级支持。OSGi.NET插件SDK由开发者安装,向开发者供给了OSGi.NET插件框架、OSGi.NETWeb扩展、iOpenWorks启动程序这三个开发程序集,其他,还供给了插件项目模板、远程管理控制台(用于调试用,能够查察OSGi.NET内核情况)、文档、示例。开发者使用OSGi.NET插件SDK的项目模板来创办WinForm也许Web插件应用程序时,这个模板默认实现了:(1)调用iOpenWorks启动程序程序集来检查内核文件版本并执行更新;BundleRuntime并运行,从而启动插件内核,默认从Plugins默认包含了页面流服务插件、应用中心插件、插件管理服务插件、

(2)创办插件运行时目录加载插件;(3)高级模板远程管理服务插件、WebService包装器服务插件(插件自动升级插件没有在模板中包含,

能够从插件库房中下载)OSGi.NET插件应用程序运行流程及插件协作关系归纳使用OSGi.NET插件SDK创办的插件应用程序结构以下所示。这个默认的模板中包含了开下班厂原理图所述的iOpenWorks启动程序、OSGi.NET插件框架、默认的几个插件。当这个插件程序运行后,它第一调用iOpenWorks启动程序来检测OSGi.NET插件框架等内核文件版本并下载更新,接着启动插件运行时,从Plugins目录中加载并启动插件。在这里,iOpenWorks启动程序将调用开下班厂平台的插件库房OpenAPI检查可否有新版本的内核并从库房中下载最新版本的文件(如原理图的箭头7所示)。在启动插件过程中,若是应用程序下载安装了自动更新插件,该插件会调用插件管理服务来检查插件库房更新情况,并自动下载最新版本的更新包,等重新启动应用程序时,执行自动更新。在这里,插件管理服务将调用开下班厂平台的插件库房OpenAPI来获取插件库房的新插件和新版本的插件并利用OpenAPI进行下载安装或升级插件(如原理图的箭头5、6所示)。插件运行时启动完成后,主程序从运行时获取页面流服务,获取入口点并运行入口插件的程序,进入主界面也许插件中心插件(如原理图的箭头1所示)。插件中心插件也将调用插件管理服务,获取开下班厂插件库房的新插件和插件的最新版本,当插件时,利用插件管理服务从插件库房下载安装或升级插件(如原理图的箭头4、6所示)。其他,当插件运行时启动完成后,远程管理服务插件利用WebService服务包装器将OSGi.NET内核管理功能裸露成Web服务,这样OSGi.NET插件SDK的远程管理控制台运行起来后,便能够调用该Web服务实现内核插件、服务阅读以及插件启动、停止、卸载和安装操作,方便插件程序的调试(如原理图的箭头2、3所示)。开下班厂插件体系插件在OSGi.NET插件框架中,插件是一个具备物理隔断性、完好重用的功能模块。在这里“插件=Manifest.xml+类+资源”,Manifest.xml是插件的描述文件,位于插件目录的根目录下;类即插件的种类空间,由插件自己的程序集和依赖的插件/依赖的程序集组成,资源近似与类,由插件自己的资源和依赖的资源组成。插件目录插件由Manifest.xml插件清单文件、程序集、资源组成,程序集和资源位于插件根目录也许子目录下。其标准目录结构以下。插件类加载在OSGi.NET插件框架中,插件拥有独立的目录结构,具备物理隔断性。相应地,每一个插件有独立的种类空间,这个种类空间由插件程序集、插件依赖的程序集、片段插件程序集和片段插件依赖的程序集组成。插件的种类是由插件类加载器来加载的。当你在插件中使用一个种类创立一个对象时,比方MyClassInBundlemyClass=newMyClassInBundle( ),插件类加载器会依照上面的序次找寻需要加载的MyClassInBundle种类。与此同时,你也能够经过调用插件对象的LoadClass方法(IBundle.LoadClass)从插件种类空间中动向加载一个种类。插件生命周期在OSGi.NET插件框架中,插件拥有生命周期。插件生命周期状态有:Installed、Resolved、Active、Uninstalled四个可见状态和Starting、Stopping两个临时状态。其中,Installed表示插件已经安装;Resolved表示插件依赖的程序集也许依赖的插件已经满足,这个插件能够被正常启动;

Active

则表示插件已经被成功启动;Uninstalled

表示插件已经被卸载。

Starting

是一个过渡状态,当启动插件时,若是插件使用了晚激活策略,则插件在注册扩展信息、服务信息此后,直接返回,不会执行激活器的

Start方法,这个方法会推迟到第一次从这个插件加载种类时调用并进入

Active状态;反之,若是没有使用晚激活策略,

插件会调用激活器

Start方法并进入

Active状态。在启动过程,若是出现异常,则插件会自动转回

Resolved状态。Stopping是另一个临时状态,在停止插件时,第一进入该状态,尔后调用激活器的

Stop方法后进入

Resolved状态。插件运行时和插件启动过程插件框架启动时,第一从插件目录中发现并加载所有的插件;尔后,对插件进行依赖剖析,判断插件依赖的程序集和依赖的插件可否满足;接着,依照启动级别序次启动所需的插件;一旦插件启动完成,则插件框架便完成启动。在插件启动过程中,将依照创办插件上下文、注册扩展点/扩展信息、注册服务信息、创办插件激活器并调用Start方法的序次完成一个插件的启动过程。若是插件实现的晚激活,则推迟最后一步的执行,直到第一次从插件加载种类;若是插件没有定义激活器,则忽略最后一步。插件相关对象插件运行时BundleRuntime插件运行时BundleRuntime代表插件框架内核对象,它是所有插件的运行容器。控制台主程序在Program的Main函数中,经过创办BundleRuntime对象并调用其来启动插件框架内核。当Start方法调用完成后,BundleRuntime对象将从插件目插件并启动插件。

在示例中,Start方法录中加载经过以下代码,您就可以创办并启动插件框架,尔后加载并启动所有插件。认识插件插件也称为Bundle,从OSGi.NET规范上讲,“插件=Manifest.xml+类+资源”。其中,Manifest.xml即插件清单文件,用于描述插件的基本信息、种类信息和扩展信息;插件具备隔断的种类空间,由插件自己的程序集和依赖的插件的程序集组成;插件拥有自己的资源,存放在私有的文件夹。在定义一个插件时,您只需要关注三个特别重要的接口,分别是:插件激活器IBundleActivator、插件IBundle和插件上下文IBundleContext。其中,插件激活器由开发人员自己定义;而插件IBundle和插件上下文IBundleContext则由插件内核创办,你能够在插件激活器获取中获获取这两个对象。插件清单Manifest.xml插件清单文件(Manifest.xml)位于模块标准目录结构的根目录之下,它定义了模块的基本信息、模块激活信息、模块类加载相关的运行时信息、服务定义信息、模块扩展定义信息以及模块详细信息。以上清单文件定义了该模块的一个当地程序集“binShellPlugin.dll,”该程序集地址有对于模块的根目录,当然,你也能够指定一个绝对目录。模块还定义了一个激活器和扩展点。IBundleActivatorIBundleActivator表示插件激活器,是插件的入口和出口,用于在插件启动或停止时执行相关操作。插件激活器经过Manifest.xml的Activator节点配置,当插件被启动时插件激活器的Start方法被调用,当停止时Stop方法被调用。在插件激活器的Start/Stop方法的context参数,即插件上下文IBundleContext对象,经过IBundleContext您还可以够获取对应的插件

IBundle实例。以下是一个激活器定义的示例。你需要在插件清单文件

Manifest.xml

增加一个激活器配置:

<ActivatorType="HelloBundle.Activator"Policy="Immediate"/>

。usingSystem;??

usingusing

SystemUIShell

.Collections.OSGi;

.Generic;?namespaceHelloBundle{///<summary>?///模块激活器,它是一个模块启动和停止的入口。当模块被启动时,激活器的Start方法会被调用;?///若是是被停止,则其Stop方法会被调用。一般而言,一个模块会在Start方法中向系统供给功能、?///注册服务、申请如线程等资源等,在Stop方法会执行回收操作,比方关闭功能、卸载服务、释放?///资源等。需要注意的是,在Start方法中申请的资源必定在Stop方法中获取释放,而且一个模块?///的Start/Stop方法在运行过程可能会被调用多次,必定保证再次调用Start/Stop方法不会出现?///异常。///</summary>?publicclassActivator:IBundleActivator{?///<summary>?///模块启动时调用的方法。?///</summary>?///<paramname="context">模块上下文,经过模块上下文能够获取对框架功能接见、?///服务注册表接见、模块生命周期等功能接见。?///模块上下文是框架供给给模块唯一的对象。</param>?publicvoidStart(I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论