基于OSGi的服务转换方法和装置的制作方法

文档序号:7633553阅读:106来源:国知局

专利名称::基于OSGi的服务转换方法和装置的制作方法
技术领域
:本发明涉及网络及计算机
技术领域
,更具体的说,是涉及一种基于OSGi的服务转换方法和装置。
背景技术
:OSGi(OpenServiceGatewayInitiative,公共服务平台)是一种基于Javai吾言的服务(业务)平台规范。该服务平台为一种室内、交通工具、移动终端和其他环境下的所有类型的网络设备的应用程序和服务进行传递和远程管理的开放式平台。该规范的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。并且OSGi强调模块化与服务化,技术人员可以在基于OSGi应用的情况下切换服务,实现动态更新的目的。在OSGi框架还包含一套编程式的服务装置,它能够提供服务的发布、查找和绑定操作。这个模型还可以使相关应用通过服务方式同外部的Bundle进行通讯和协作。现有的OSGi服务平台的应用包括服务网关、汽车、移动电话、工业自动化、建筑物自动化、PDA网格计算、娱乐和IDE等需要长时间运行、动态更新并且对运行环境的影响尽可能小的系统。在现有技术中,采用OSGi的微核结构可以保证组件开发的过程中,组件和扩展是独立且可控的,并且在组件开发的过程中可以解决应用于小型的系统中的依赖跟踪、版本跟踪和服务绑定的问题。但是,当OSGi的服务平台应用于大型的系统和大范围的部署时,其采用的现有的编程式服务装置会引发性能和兼容性方面的问题其一,启动时间较长,OSGi中的编程式服务装置需要Bundle主动地注册服务和获取服务,注册的这些静态服务都需要在启动时执行,需要Bundle在其激活器中执行初始化。应用于大型的系统时,会使系统启动的时间变长,使启动速度变慢;其二,内存被占用,服务提供者无法按需分配服务占用的资源,当一个服务被注册到OSGi框架时,实现服务的相关类都被实例化,被加载到了内存中,如果该服务从不使用,会一直占用内存;其三,在管理服务的发布、解除、发现、并跟踪服务等非功能性需求时较为复杂,这种复杂性会对开发架构的应用起消极的影响,不能保证所有的动态处理都处于正确状态。
发明内容有鉴于此,本发明提供了一种基于OSGi的服务转换方法和装置,以克服现有技术中由于OSGi中的服务装置的缺陷,在OSGi的服务平台应用于大型系统或大范围的部署时,容易引发性能和兼容性的问题。为实现上述目的,本发明提供如下技术方案一种基于OSGi的服务转换方法,包括进行编码,基于DService框架的项目管理模块maven增加元数据内容,并织入构件实现类;当OSGi平台启动时,在DService框架中对构件实例的元数据进行配置,在OSGi4的Bundle中声明组件构件实例的方面构件;读取宿主实例对所述方面实例的元数据和宿主实例配置信息;初始化方面构件工厂和方面实例,启动构件实例中的方面实例,获取valid或invalid两种状态中任一状态的方面实例;当构件实例状态进行切换时,遍历通知所述构件实例中拥有的方面实例更改状态;与构件实现类实例化的对象POJO进行交互,直接通过元数据获取宿主构件的类型信息,由确定状态的方面实例为宿主实例的字段注值。优选地,所述声明组件实例的方面构件包括为所述方面构件声明唯一的XML命名空间和名称。优选地,包括一个所述Bundle中声明多个组件实例的方面构件;当一个所述Bundle中声明多个组件实例的方面构件时声明服务构件使用该方面构件。优选地,初始化方面构件工厂的过程包括当Dkrvice框架检测到Bundle启动、所述Bundle配置有Dkrvice元数据,以及所述元数据中声明有通过DService根节点名称和XML命名空间确定唯一的方面构件时,DService框架查找Bundle中的方面构件实现类,由工厂创建用于调用initializeComponentFactory方法所对应的临时方面构件对象;输入构件实例中声明的方面构件元数据。优选地,初始化方面构件工厂完成后,进行初始化方面实例的过程包括DService框架为每一个构件实例创建所配置的方面实例;调用方面实例的configure方法,输入构件定义的元数据,完成方面实例的初始化。优选地,启动构件实例中的方面实例,获取Valid和Invalid两种状态中任一状态的方面实例的过程包括调用start方法之前,启动方面实例中的所有声明需要的子方面实例;调用start方法之后,检测方面实例的当前状态,当所述方面实例中使用的所有的子方面实例状态为Valid,则所述方面实例的状态为Valid;当所述方面实例中使用的所有子方面实例状态有一个为invalid,则所述方面实例的状态为hvalid。优选地,当方面实例状态进行切换时,遍历通知所述构件实例中拥有的方面实例更改状态的过程包括当构件实例的状态从hvalid变为Valid时,遍历通知所述构件实例中拥有的方面实例改变状态为Valid;当构件实例的状态从Valid变为hvalid时,遍历通知所述构件实例中拥有的方面实例改变状态为^valid。优选地,还包括当构件实例停止时,所述构件实例的所有方面构件调用stop方法,进入停止状态。优选地,在与构件实现类实例化的对象POJO进行交互的过程中,还包括当宿主实例的POJO对象中的公共方法被调用前或后,出现错误时,由方面实例拦截所述宿主实例的所有公共方法。一种基于OSGi的服务转换装置,包括配置声明模块,用于在OSGi平台启动时,在服务构件元数据中对构件实例进行配置,声明构件实例的方面构件;读取模块,用于读取宿主实例对所述方面实例的元数据和宿主实例配置信息;初始模块,用于初始化方面构件工厂和方面实例,启动构件实例中的方面实例;获取模块,用于获取Valid和hvalid两种状态的方面实例;切换模块,用于当所述Valid和Invalid两种状态的方面实例进行切换时,遍历通知所有构件实例中拥有的方面实例更改状态;注值模块,用于与Java对象POJO进行交互,直接通过元数据获取宿主构件的类型信息,由确定状态的方面实例为宿主实例的字段注值。经由上述的技术方案可知,与现有技术相比,本发明公开了一种基于OSGi的服务转换方法和装置。通过构建新的服务装置,避免在激活器中注册服务从而减少系统的启动时间,并在检测到服务构件需要进行加载时才进行加载,以降低系统内存中的占用量,并采用声明式的方法查找、获取、发布和绑定OSGi的服务,从而简化系统在注册服务、获取服务和处理服务时的步骤与其所产生的功耗。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本发明实施例公开的一种基于OSGi的服务转换方法的流程图;图2为本发明实施例公开的元数据对象的类图;图3为本发明实施例公开的方面实例生命周期的执行顺序以及获取不同状态的方面实例的流程图;图4为本发明实施例公开的一种基于OSGi的服务转换装置的结构示意图。具体实施例方式为了引用和清楚起见,下文中使用的技术名词的说明、简写或缩写总结如下OSGi=OpenServiceGatewayhitiative,公共服务平台;POJO=PlainOldJavaObjects,构件实现类实例化后的对象,可在metadata,xml元数据文件中通过构件元素的类名进行描述,运行时由构件实例进行管理;此ervice框架DeclarativeServices,是一个基于OSGi框架面向服务的构件模型,采用服务组件的延迟加载以及组件生命周期管理的方式来控制对于内存的占用以及快速的启动,其使用XML来描述构件;Bundle=OSGi服务框架定义的模块化单元,称之为一个Bundle。一个Bundle由java的类和其他资源组成,可以为终端用户提供功能。Bundle的描述信息存放在一个manifest文件中,这个文件包含在JAR文件中的META-INF目录下,命名为MANIFEST.MF,通过Bundle的符号名称和版本号可以在框架中惟一的确定一个Bundle;元数据声明服务构件的元数据,它包含在Bundle中的一个XML文档;构件也称为服务构件,包括服务对象(POJO)类、方面构件等;构件实例服务构件在运行时创建的服务构件的实例化,在构件实例中可以重载服务构件中定义的构件属性,实现构件的多实例,同时构件实例还是真正的POJO和方面构件的管理器,它借助不同方面构件实现对跟踪服务发布、引用以及构件实例生命周期控制的管理等等,并管理POJO对象的实例,构件实例拥有构件上下文,可以和OSGi框架进行交互;构件属性服务构件的配置属性,可以通过元数据文件进行设置,还可以通过配置属性方面构件接收配置管理服务对配置属性的更新操作;构件上下文服务构件实例上下文运行环境,继承自标准的ComponentContext接口,同时实现了BundleContext和ServiceContext上下文,用于和OSGi框架进行交互;构件实例状态描述服务构件的状态,服务构件的整个生命周期一共包含Valid、Invalid,Stopped,Disposed等四种状态,一般情况下构件实例对外部可见的状态只有Valid和hvalid这2种;方面构件简称方面,是特殊的服务构件,是对普通服务构件的扩展,同样在metadata,xml元数据文件进行配置,每一个方面构件用于处理构件某一方面的需求,其中发布服务、引用服务、构件实例生命周期控制、属性配置、结构内省、方法拦截等方面构件为声明式服务框架内置的方面构件;方面构件实例方面构件在运行时的实例化,方面构件实例是具体的方面对象(Aspect)的管理器,同时方面构件实例作为一类特殊的服务构件,同样可以使用其它的方面构件来处理本方面构件中某一方面的需求,即实现不同方面的嵌套;构件容器服务构件的容器,存放所有已创建的服务构件实例和方面构件实例,并对其相应的配置信息、生命期进行管理;服务服务包括构件实例对外发布的服务和通过OSGi框架引用的服务两种,Dservice容器通过服务的方式实现构件实例间的交互和协作;宿主实例是针对方面构件实例来说的,当服务构件A在元数据中声明使用方面构件B时,在运行期实例A是实例B的宿主实例,实例B是实例A的子构件实例,实例A依赖于实例B。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。由
背景技术
可知,现有技术中OSGi的服务装置应用于大型的系统和大范围的部署时,由于其结构的限制会引发一些性能和兼容性方面的问题。因此本发明公开了一种新的基于OSGi的服务转换方法和装置,通过声明式服务DService框架这一面向服务的构件模型,采用声明方面构件的方式,以方面构件为桥梁建立宿主实例的P0J0、构件容器、OSGi框架和其他外部实体之间的交互。具体过程通过以下实施例进行详细说明。实施例一本发明该实施例公开了一种基于OSGi的服务转换方法,其流程图如图1所示,主要包括以下步骤步骤SlOl,进行编码,基于DService框架的项目管理模块maven增加元数据内容,并织入构件实现类。步骤S102,OSGi平台启动时,在DService框架中对构件实例的元数据进行配置,在OSGi的Bundle中声明组件构件实例的方面构件。其中,元数据是在使用声明式服务进行开发时,在元数据文件中对构件自身属性,以及构件所包含的各方面动态的进行配置,采用该种方法能够为在OSGi的环境下开发新的服务带来便利。为方便在服务转换的过程中构件容器能够识别方面构件,其必须在元数据中进行声明。在DService框架中,一个Bundle中可以声明多个方面构件,并且必须在元数据中为每一个方面构件声明一个唯一的XML命名空间和名称。对元数据的说明将在后续进行说明。需要说明的是,在一个Bundle声明方面构件的同时还可以声明服务构件使用该方面构件。在服务构件元数据中声明使用该方面时,先要绑定该方面构件的命名空间,并且所采用的绑定方式与标准的XML命名空间定义的方式一样。步骤S102,读取宿主实例对所述方面实例的元数据和宿主实例配置信息。在进行服务转换方面实例之前,先读取宿主实例对该方面实例的元数据信息和宿主实例配置信息,以便于为进行该方面实例初始化工作时提供便利。宿主实例对该方面实例的元数据信息可以利用initializeComponentFactory方法和configure方法进行读取和修改,获得的XML格式的元数据已预先被构件容器角军析为元数据对象,并利用org.trustie.loong.dservice.metadata.Element接Π和org.trustie.loong.dservice.metadata.Attribute进行操作,这两个接口位于loong-dservice-metadataBundle中。其中,Element)(寸象代XML元素,该元素的每一个属性使用一个Attribute对象表示。需要说明的是,在构件容器解析元数据时,将所有的扩展方面构件解析为org.trustie.loong.dservice.metadata.ExtendElement0并将所有能够被构件容器识别的元数据,解析成对应的元数据对象。其中,构件容器能够识别的元数据包括DService的XML元数据的schema中定义的内容。元数据对象的类图如图2所示,图中DService类以下所有的类都是用于描述元数据的,都继承自图中的Elementlmpl,并在该类中封装大部分的操作。步骤S103,初始化方面构件工厂和方面实例,启动构件实例中的方面实例,获取Valid或hvalid两种状态中任一状态的方面实例。在方面构件中存在四个生命周期和两种状态,该四个生命周期包括方面构件工厂初始化、方面实例初始化、方面构件启动和方面构件停止。在方面构件启动后会以Valid和Invalid两种状态存在,并在StateChanged方法中进行切换。步骤S104,当构件实例状态进行切换时,遍历通知所述构件实例中拥有的方面实例更改状态。在执行步骤S103和步骤S104的过程中,其中,针对方面构件中四个生命周期的执行顺序以及获取不同状态的方面实例的过程如图3所示步骤S201,方面构件工厂初始化。步骤S202,方面实例初始化。步骤S203,启动方面实例。步骤S204,检测当前方面实例的状态发生改变,通知所有构件实例中的方面实例改变状态,如没有改变执行步骤S206。步骤S205,改变构件实例中的所有方面实例的状态。步骤S206,停止方面实例的启动。针对上述具体的执行四个生命周期的过程,下面详细进行说明初始化方面构件工厂的过程主要包括当DService框架检测到Bundle启动、并且Bundle配置有DService元数据,以及该元数据中声明有通过DService根节点名称和命名空间确定唯一的方面构件时,DService框架查找Bundle中的方面构件实现类,由方面构件工厂创建用于调用initializeComponentFactory方法所对应的临时方面构件对象。输入构件实例中声明的方面构件元数据,在完成输入后自动销毁原方面构件元数据。在调用initializeComponentFactory方法所对应的临时方面构件对象时,验证元数据的正确性,当方面构件中存在不正确的元数据时,修正或补全所述方面构件中的元数据。在初始化方面构件工厂完成后,进行初始化方面实例的过程主要包括DService框架为每一个构件实例创建所配置的方面的实例,并调用方面实例的configure方法,输入构件定义的元数据,完成方面实例的初始化。需要说明的是,所调用的configure方法用于检测每一个构件实例特有的属性,以及构件实例配置信息的正确性,以便于完善该方面实例的描述信息。在进行初始化方面实例之后,构件容器会调用该方面实例的start方法。该方法用于定义需要完成的业务逻辑。在调用start方法完成之前,先启动所有该方面实例声明中需要的子方面实例。在调用start方法完成之后,方面实例的状态一般默认为Valid。但是,仍调用AspectManager检测该方面实例的真正状态,即该方面实例中使用的所有的子方面实例的具体状态。具体检测的过程为当该方面实例使用的所有子方面实例的状态是Valid时,该方面实例的状态为Valid;当该方面实例中使用的所有子方面实例状态有一个为hvalid,则所述方面实例的状态为hvalid。同样使用该方面实例的构件实例的状态也是^^1土(1,即构件实例与方面实例的状态一致。在方面实例启动完成之后,停止之前,由上述可知,方面实例具有两种状态。当构件实例状态改变的时,遍历通知所有该构件实例使用的方面实例状态变更,并调用各个子方面实例的stateChangedFromhstance方法,由各个方面实例根据自己的需求完成状态变更。一般情况下状态Valid在系统中的定义设置为intVALID=2,定义在org.trustie.loong.dservice.spi.ComponentInstance接口中。当构件实例的状态变为Valid的时候,遍历通知所有该构件实例使用的方面实例,通知状态改变为Valid。一般情况下状态^walid在系统中的定义设置为intInvalid=1,定义在org.trustie.loong.dservice.spi.ComponentInstance接口中。当构件实例的状态变为Invalid的时候,遍历通知所有该构件实例使用的方面实例,通知状态改变为hvalid。在最后,当构件实例停止时,所有该构件实例引用或使用的方面实例调用stop方法,进入停止状态。以便于确保释放掉所有在当前方面实例中引用的资源,减少系统内存被占用。需要说明的是,构件实例停止后并没有被销毁回收,构件实例停止后还可以再通过start方法重新启动构件实例。相应的,对应构件实例的方面实例同样可以在stop方法之后重新调用start方法进入启动状态,并且当stop方法调用之后,方面实例进入方面初始化完成的状态。步骤S105,与构件实现类实例化的对象P0J0进行交互,直接通过元数据获取宿主构件的类型信息,由确定状态的方面实例为宿主实例的字段注值。在执行步骤S105时,与构件实现类实例化的对象P0J0进行交互,方面实例直接通过元数据获取宿主构件的类型信息,该类型信息包括父类、扩展的接口、字段、公共方法等。而上述获取宿主构件的各类型信息时,构件元数据通过org.trustie.loong.dservice.metadata.Component的getPojoMetadata方法获取,具体为getSuperClass返回构件实现类的父类;getlnterfaces返回构件实现类实现的所有接口;getFieIdMetadatas返回构件实现类的所有字段;getMethodMetadata返回构件实现类的所有公共方法。在执行步骤S105时,获取宿主构件的类型信息后,由确定状态的方面实例为宿主实例的字段注值,即在方面实例对宿主构件进行注值时,由每个org.trustie.loong.dservice.spi.FieldValueftOvider接口的实现类专门管理一个字段的值,当字段的值提供器实例化之后,注册到宿主构件实例的管理器中,以便于调用gethstanceManagerO.register(FieldValueProvider)方法进行注册。该接口对应的执行方法包括getFieldName指定本实现类所管理的宿主字段的字段名称;getType指定本实现类所管理的宿主字段的字段类型;isDynamic:本实现类管理的字段是否是动态的,如果是动态的则每次值的变化都会注入到宿主实例中;getValueFromProvider从当前实现类中取得最新的字段值。监听器收到通知后会通过该方法获取最新值,并注入到宿主实例的P0J0中;getUpdateTime从当前实现类中取得最后一次更新的时间;setValueFromOtherProvider宿主实例该字段值的变化都会通过该方法传递到本实现类中,从而本实现类可以拿到该字段被其他地方修改后的最新值。需要说明的是,在setValueFromOtherfrovider中,每个字段并不一定只对应一个值提供器。setFieldChangedListener由构件容器传入本字段值变化的监听器,当在本实现类中管理的字段值改变之后实现者需要主动通知监听器该字段的值已经变化了,并主动记录下当前时间毫秒值作为getUpdateTime方法的返回值。需要说明的是,在执行步骤S105与Java对象POJO进行交互的过程中,还包括当宿主实例的POJO对象中的公共方法被调用前或后,出现错误时,由方面实例拦截所述宿主实例的所有公共方法。上述出行出现错误对应的方法为onEntry进入宿主公共方法之前执行;onExit执行完宿主公共方法之后执行;onError当宿主公共方法抛出异常后执行;onFinally:不论宿主公共方法是正常退出还是异常退出,都会在最后执行。在用于拦截宿主实例的方法拦截器实例化之后,通过调用getInstanceManager().register(methodMetadata,methodInterceptor)方法将其注册到宿主构件实例管理器中。在本发明实施例所公幵的方法中,执行步骤SlOl时,其中涉及的在元数据文件中进行构件的设置。一般情况下,在元数据文件metadata,xml文件中对构件自身属性,以及构件所包含的各方面动态的进行配置。以下以一个元数据文件metadata,xml进行举例说明<DServicexmlns:log=MtestNameSpaceM>〈componentclassname=Mdservice.serviceimpLBorrowImpr'name=MBorrowProviderMimmediate="true"factory-method="qetborrowImpl"<service><!--1--><provideinterface="dservice.example.interfaces.Borrow,dservice.example.interfaces.BorrowMoneyBuy">〈propertyname="borrowPrice"field="m_price"type="int"mandatory="true"immutable="true"value="8"/></provide></service>〈propertiespropagation="true"pid="borrow—id"><!--2■■>〈propertyname="borrowPrice"field="m_price"value="70"/>〈/properties〉〈/component〉</DService>对于上述以metadata,xml文件为例所涉及的内容其中,Dkrvice节点是元数据的根元素。一个XML元数据文件只有一个DService根节点。构建为Component,其对应一个Java类。构建中的属性如下表1所示。表1:权利要求1.一种基于OSGi的服务转换方法,其特征在于,包括进行编码,基于DService框架的项目管理模块maven增加元数据内容,并织入构件实现类;当OSGi平台启动时,在DService框架中对构件实例的元数据进行配置,在OSGi的Bundle中声明组件构件实例的方面构件;读取宿主实例对所述方面实例的元数据和宿主实例配置信息;初始化方面构件工厂和方面实例,启动构件实例中的方面实例,获取valid或invalid两种状态中任一状态的方面实例;当构件实例状态进行切换时,遍历通知所述构件实例中拥有的方面实例更改状态;与构件实现类实例化的对象POJO进行交互,直接通过元数据获取宿主构件的类型信息,由确定状态的方面实例为宿主实例的字段注值。2.根据权利要求1所述的方法,其特征在于,所述声明组件实例的方面构件包括为所述方面构件声明唯一的XML命名空间和名称。3.根据权利要求1所述的方法,其特征在于,包括一个所述Bundle中声明多个组件实例的方面构件;当一个所述Bundle中声明多个组件实例的方面构件时声明服务构件使用该方面构件。4.根据权利要求1所述的方法,其特征在于,初始化方面构件工厂的过程包括当DService框架检测到Bundle启动、所述Bundle配置有DService元数据,以及所述元数据中声明有通过DService根节点名称和XML命名空间确定唯一的方面构件时,DService框架查找Bundle中的方面构件实现类,由工厂创建用于调用initializeComponentFactory方法所对应的临时方面构件对象;输入构件实例中声明的方面构件元数据。5.根据权利要求1所述的方法,其特征在于,初始化方面构件工厂完成后,进行初始化方面实例的过程包括DService框架为每一个构件实例创建所配置的方面实例;调用方面实例的configure方法,输入构件定义的元数据,完成方面实例的初始化。6.根据权利要求1所述的方法,其特征在于,启动构件实例中的方面实例,获取Valid和hvalid两种状态中任一状态的方面实例的过程包括调用start方法之前,启动方面实例中的所有声明需要的子方面实例;调用start方法之后,检测方面实例的当前状态,当所述方面实例中使用的所有的子方面实例状态为Valid,则所述方面实例的状态为Valid;当所述方面实例中使用的所有子方面实例状态有一个为invalid,则所述方面实例的状态为Invalid。7.根据权利要求1所述的方法,其特征在于,当方面实例状态进行切换时,遍历通知所述构件实例中拥有的方面实例更改状态的过程包括当构件实例的状态从Invalid变为Valid时,遍历通知所述构件实例中拥有的方面实例改变状态为Valid;当构件实例的状态从Valid变为hvalid时,遍历通知所述构件实例中拥有的方面实例改变状态为hvalid。8.根据权利要求1所述的方法,其特征在于,还包括当构件实例停止时,所述构件实例的所有方面构件调用stop方法,进入停止状态。9.根据权利要求1所述的方案,其特征在于,在与构件实现类实例化的对象POJO进行交互的过程中,还包括当宿主实例的POJO对象中的公共方法被调用前或后,出现错误时,由方面实例拦截所述宿主实例的所有公共方法。10.一种基于OSGi的服务转换装置,其特征在于,包括编码织入模块,用于进行编码,基于DService框架的项目管理模块maven增加元数据内容,并织入构件实现类;配置声明模块,用于在OSGi平台启动时,在服务构件元数据中对构件实例进行配置,声明组成构件实例的方面构件;读取模块,用于读取宿主实例对所述方面实例的元数据和宿主实例配置信息;初始模块,用于初始化方面构件工厂和方面实例,启动构件实例中的方面实例;获取模块,用于获取Valid和Invalid两种状态的方面实例;切换模块,用于当所述Valid和Invalid两种状态的方面实例进行切换时,遍历通知所有构件实例中拥有的方面实例更改状态;注值模块,用于与构件实现类实例化的对象POJO进行交互,直接通过元数据获取宿主构件的类型信息,由确定状态的方面实例为宿主实例的字段注值。全文摘要本发明公开了一种基于OSGi的服务转换方法和装置,其方法为进行编码,基于DService框架增加元数据内容并织入构件实现类;当OSGi平台启动时,对构件实例的元数据进行配置并声明组件构件实例的方面构件;读取宿主实例对方面实例的元数据和宿主实例配置信息;初始化方面构件工厂和方面实例,获取确定状态的方面实例;当构件实例状态切换时,通知构件实例中的方面实例更改状态;与构件实现类实例化的对象交互时,由确定状态的方面实例为宿主实例的字段注值。上述过程不仅减少系统的启动时间,而且只在需要时加载服务构件,降低系统内存的占用量,且采用声明式的方式发布、查找和绑定OSGi的服务,简化注册和处理服务的工作过程。文档编号H04L29/08GK102158490SQ20111008681公开日2011年8月17日申请日期2011年4月7日优先权日2011年4月7日发明者刘春,刘鹏申请人:山东中创软件商用中间件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1