具体实施方式
在本发明实施例中,首先,DM服务器将软件组件包直接下发给终端,或将软件组件包的下载地址和指示下载的命令下发给终端,该软件组件包包含了一个以上软件组件;然后,若所述终端接收到的是所述下载地址和指示下载的命令,则利用所述下载地址下载所述软件组件包;最后,所述终端将获得的该软件组件包安装在本地,并在Deployed子树下生成所述软件组件对应的管理节点及其子节点(本发明实施例中所提到的生成管理节点的同时会生成该管理节点的子节点)。
下面结合说明书附图详细说明本发明。
如图2所示,为本发明实施例系统结构示意图,该系统包括DM服务器和终端,其中,所述DM服务器用于将软件组件包通过DM命令直接下发给终端,或将软件组件包的下载地址和指示下载的命令下发给终端,该软件组件包包含了一个以上软件组件;所述终端用于若接收到的是所述下载地址和指示下载的命令,则利用所述下载地址将所述软件组件包下载,将获得的该软件组件包安装在本地,并在Deployed子树下生成所述软件组件对应的管理节点及其子节点。
若所述指示下载的命令中包含的下载方式为间接下载,且利用DownLoad指令下载,则当所述软件组件包下载之后,且将安装之前,或,若当指示下载的命令中包含的下载方式为间接下载,且利用DownLoadInstall或DownLoadInstallInactive指令下载,则若下载成功且安装失败,则所述终端还可以用于在Delivered子树下生成所述软件组件包对应的管理节点,并为该管理节点和该管理节点的子节点分配访问控制权限。
在Delivered子树下生成所述软件组件包对应的管理节点之前,所述终端还可以用于判断下载的所述软件组件包的标识是否与Delivered子树下已有的一管理节点对应的软件组件包的标识相同,若相同,则将Delivered子树下该管理节点的信息修改为下载的所述软件组件包的信息,否则,在Delivered子树下生成下载的该软件组件包对应的管理节点。
所述DM服务器还可以用于将所述指示下载的命令下发之前,指示终端在Download子树中为所述软件组件包生成管理节点;则所述终端还可以用于将Download子树下生成的所述管理节点的访问控制权限,作为Delivered子树下生成的所述管理节点的访问控制权限,或将Delivered子树下生成的所述管理节点的访问控制权限设置为空,进而进程其父节点的访问控制权限,或为Delivered子树下生成的所述管理节点生成特定的访问控制权限,或将Download子树下生成的所述管理节点的访问控制权限和Delivered子树下生成的所述管理节点的父节点的访问控制权限进行合并,将合并后的访问控制权限作为Delivered子树下生成的所述管理节点的访问控制权限。
所述DM服务器还可以用于将所述指示下载的命令下发之前,指示终端在Download子树中为所述软件组件包生成管理节点;若判断下载的所述软件组件包与Delivered子树下已有的一管理节点对应的软件组件包相同,则所述终端还可以用于将Download子树下为该软件组件包生成的管理节点的访问控制权限与Delivered子树中已有的该管理节点的访问控制权限之和,作为Delivered子树下该管理节点的访问控制权限。
所述终端还可以用于将Delivered子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Download子树下的可执行节点的访问控制权限作为Delivered子树下生成的所述管理节点下可执行节点的访问控制权限。
所述终端还可以用于将软件组件包下载之后,且安装所述软件组件包之前,接收DM服务器下发的DM命令,并判断该DM服务器的权限是否满足Delivered子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
所述DM服务器还可以用于将参数下发给所述终端;则所述终端还可以用于根据所述参数下载所述软件组件包或安装所述软件组件包或删除所述软件组件包或激活所述软件组件或去激活所述软件组件或删除所述软件组件。
所述DM服务器还可以用于将参数下发给所述终端之前,指示终端在终端软件组件管理树(SCOMO)上增加子节点之后,将所述参数下发给该子节点。
所述DM服务器还可以用于通过DM命令将所述参数下发给终端,该DM命令用于指示终端执行所述软件组件包的下载操作或安装操作或删除操作,或指示终端执行所述软件组件的激活操作或去激活操作或删除操作。
所述终端还可以用于在软件组件包安装之后,且在Deployed子树下生成所述软件组件对应的管理节点之前,判断所述软件组件包中一软件组件是否与Deployed子树下已有的一管理节点对应的软件组件相同,若相同,则将Deployed子树下该管理节点的信息修改为所述软件组件包中该软件组件的信息,否则,在Deployed子树下生成所述软件组件包中软件组件对应的管理节点。
所述终端还可以用于若判断软件组件的标识或名称相同,则表示两个软件组件相同;否则,表示两个软件组件不相同。
所述终端还可以用于若判断所述软件组件包中一软件组件与Deployed子树下已有的一管理节点对应的软件组件相同,则将Deployed子树下该管理节点的信息修改为所述软件组件包中该软件组件的信息之后,将Delivered子树下或Download子树下为该软件组件包生成的管理节点的访问控制权限与Deployed子树中已有的该管理节点的访问控制权限之和,作为Deployed子树下该管理节点的访问控制权限。
所述DM服务器还可以用于将软件组件包通过DM命令直接下发给终端之前,指示终端在Delivered子树下生成所述软件组件包对应的管理节点,且该管理节点中包含软件组件信息,则所述终端还可以用于将Delivered子树下管理节点中包含的所述软件组件信息保存到Deployed子树中。
所述终端还可以用于在Deployed子树下生成所述软件组件对应的管理节点之后,为该管理节点和该管理节点的子节点分配访问控制权限。
所述终端还可以用于将Delivered或Download子树下生成的所述软件组件包对应的所述管理节点的访问控制权限,作为Deployed子树下生成的所述管理节点的控制权限,或为Deployed子树下生成的所述管理节点的访问控制权限设置为空,进而继承其父节点的访问控制权限,或为Deployed子树下生成的所述管理节点设定特定的访问控制权限,或将Delivered或Download子树下生成的所述管理节点的访问控制权限和Deployed子树下生成的所述管理节点的父节点的访问控制权限进行合并,将合并后的访问控制权限作为Deployed子树下生成的所述管理节点的访问控制权限。
所述终端还可以用于将Deployed子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Delivered子树或Download子树下的可执行节点的访问控制权限,作为Deployed子树下生成的所述管理节点下可执行节点的访问管理权限。
当在Deployed子树下生成所述软件组件对应的管理节点之后,且DM服务器对Deployed子树下生成所述软件组件对应的管理节点进行操作之前,所述终端还可以用于接收DM服务器下发的DM命令,并判断该DM服务器的权限是否满足Deployed子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
所述终端还可以用于当在Deployed子树下生成所述软件组件对应的管理节点之后,将安装响应消息上报给DM服务器,所述安装响应消息包括:Deployed子树中生成所述管理节点的URI;
若所述指示下载的命令中包含的间接下载的指令为Download,当下载完成之后,且安装所述软件组件包之前,或,若所述指示下载的命令中包含的间接下载的指令为DownloadInstall或DownloadInstallInactive,当下载完成,且安装失败时,将安装响应消息上报给DM服务器,所述安装响应消息包括:Deployed子树中生成所述管理节点的URI。
所述下载响应消息和所述安装响应消息的上报方式为:同步上报方式或异步上报方式。
若利用所述同步上报方式上报,则所述终端还可以用于在Status命令的Item元素中携带下载响应消息或安装响应消息中的URI。
所述下载响应消息还包括:所述软件组件包的名称和/或标识;所述安装响应消息还包括:所述软件组件的名称和/或标识。
若下载方式为直接下载或间接下载中利用DownLoad指令下载,则在Deployed子树下生成所述软件组件对应的管理节点之后,所述终端还可以用于将所述软件组件包的状态设置为已安装状态。
下面结合具体实施例详细说明本发明。
在本发明实施例中,软件组件包(Delivered Package)在终端中的状态迁移如图3所示,从图中可以看出,主要有4种状态:Not Downloaded表示软件组件包还没有被终端下载,在终端中不存在;Delivered表示软件组件包已经被终端下载,但是还没有被安装;Install表示软件组件包已经被安装;Removed表示软件组件包已经被删除。这4种状态之间可以进行相互迁移,如当软件组件包被下载后,由Not Downloaded进入Delivered;当安装后由Delivered进入Install,当然,此时软件组件可能被激活也可能未被激活;当软件组件未安装就包被删除时,由Delivered进入Removed,当软件组件包安装后被删除时,由Install进入Removed;若软件组件包安装失败,但没有从终端删除,则由Not Downloaded进入Delivered;若安装失败且删除,则由Not Downloaded进入Removed;若软件组件包下载且直接安装后,则由Not Downloaded进入Install,同样,此时安装组件可能被激活也可能未被激活。显然,软件组件包存在于Download子树和Delivered子树。其中Not Downloaded和Removed可以合并为一个Idle状态,表示软件组件包未被下载或者已被删除,即其在终端中不存在。
软件组件(Software Component)存在于Deployed子树,其在终端中的状态迁移如图4A所示,Inactive表示软件组件已经被安装,但是未激活因而不可用;Active表示软件组件已经被安装且已经激活,处于可用状态;Removed表示软件组件已经被删除。软件组件的三种状态之间也是可以相互迁移的,当软件组件被激活时,由Inactive进入Active,反之,由Active进入Inactive;若软件组件在未激活状态被删除,则由Inactive进入Removed;若软件组件在激活状态被删除,由Active进入Removed。其中可以将Removed改为Idel状态,表示软件组件未被安装或者已经被删除,即其在终端中不存在。当软件组件包进入Installed状态时,其中包含的软件组件从Idel进入Active或者Inactive状态。当软件组件被删除时,其从Active或者Inactive回到Idle状态。
在本发明实施例中,软件组件包也可以只作为封装一个或者多个组件进行传送的方式,并不对其进行管理,这样软件组件包也可以没有状态迁移,而只有软件组件的状态迁移,这时的软件组件的状态迁移如图4B所示,Idle表示软件未下载或者未安装或者已删除;Delivered标识软件已下载但未安装;Inactive表示软件组件已经被安装,但是未激活因而不可用;Active表示软件组件已经被安装且已经激活,处于可用状态,图中虚线表示执行操作失败后状态不变,实线表示正常的操作过程。软件组件的四种状态之间也是可以相互迁移的,当软件组件仅被下载或下载成功且安装失败时,由Idle状态进入Delivered状态(当下载失败时状态保持不变),当软件组件被安装时,由Idle或Delivered状态进入Active或Inactive状态(当安装失败时状态保持不变),当软件组件被激活时,由Inactive状态进入Active状态(当操作执行失败时状态保持不变),当软件组件被去激活时,由Idle或Delivered或Active状态进入Inactive状态(当操作执行失败时状态保持不变);若软件组件被删除时,则由Delivered或Inactive或Active状态进入Idle状态(当操作执行失败时状态保持不变)。
一个软件组件包可以包含一个或多个软件组件,而一个软件组件可以代表一个应用程序、一个病毒补丁或一个应用程序的库文件等。软件组件在安装之前必须被放置到软件组件包中,当软件组件包被下载并成功安装之后,则软件组件将成为已发布软件组件(Deployment Component)。
如图5所示,为本发明实施例1的步骤流程示意图,在本实施例中,设定软件组件包的名称(Name)为ascendo,该软件组件包的标识为PkgID_1,该软件组件包中包含3个软件组件,这三个软件组件的名称(Name)分别为ascendo_1、ascendo 2和ascendo_3,标识分别为ComID_1、ComID_2和ComID_3,该步骤主要包括:
步骤501:DM服务器将软件组件包通过DM命令直接下发给终端,或将软件组件包的下载地址和指示下载的命令下发给终端,该软件组件包包含了一个以上软件组件。
DM服务器首先确定终端的下载方式,若下载方式为直接下载,则DM服务器通过DM命令直接将软件组件包下发给终端;若下载方式为间接下载,则DM服务器将软件组件包的下载地址和指示下载的命令下发给终端,所述下载地址和指示下载的命令可以在同一DM管理会话中下发,也可以在不同的DM管理会话中下发,同时,DM服务器也可以针对同一下载地址向终端多次下发指示下载的命令。
为了方便管理,DM服务器还可以在下发操作指令前下发指令的相关参数给终端,这里的指令可以包括软件组件的下载指令、安装指令、删除指令、激活/去激活指令等,然后终端根据该参数执行该指令。下发参数可以有两种方法:一是在终端的软件组件管理树上增加节点,服务器通过该节点下发参数,二是服务器直接在下发的执行该指令的Exec命令的Data元素中携带参数。以下以软件组件的安装指令的相关参数下发为例说明参数下发方法(其它指令相关参数下发方法和该参数下发方法相同,不再赘述):只要在终端安装软件组件包之前,DM服务器都可以根据需要将参数下发给终端,也就是说,可以在利用DM命令下发软件组件包时、下发指示下载的命令或安装命令时下发参数(所述参数可以是用于指示终端只安装软件组件包中的某些组件,例如,只安装Java相关的组件或C++相关的组件,也可以是用于指示终端在安装后生成Deployed子树时的处理策略等),当然也可以在其他时间下发,具体时间可以根据需要设定。后续在安装过程中,终端就可以根据参数将下载的软件组件包安装在本地。而下发参数的方式也可以有多种,例如,指示终端在SCOMO的子树下为所述软件组件包生成管理节点,并为该管理节点增加一个子节点,DM服务器将该参数下发至该子节点;或者,DM服务器直接利用DM命令将参数下发给终端。后一种方法在步骤503中描述,在本步骤中只着重描述前一种方法,则操作步骤为:
指示终端在SCOMO的子树下为所述软件组件包生成管理节点,并为该管理节点增加一个子节点,但是,下载方式不同,生成该管理节点的子树就不相同。下载方式主要可以分为直接下载和间接下载,而间接下载中有可以分为利用Download命令下载,和利用DownloadInstall或DownloadInstallInactve命令下载。
若下载方式为间接下载,即指示终端在DownLoad子树下生成将要被下载的软件组件包的管理节点。如图6所示,在DownLoad子树中生成一个名为Pkg1的管理节点,并为该管理节点增加一个子节点,用以存储DM服务器下发的参数,该子节点可以命名为InstallPara,在利用此下载方式时,DM服务器可以将参数下发给DownLoad/Pkg1/InstallPara子节点。该Pkg1是生成的管理节点的名称。
若下载方式为直接下载,则指示终端在Delivered子树中生成将要被下载的软件组件包对应的管理节点。如图7中所示,在Delivered子树中生成一个名为Pkg1的管理节点,并为该管理节点增加一个子节点,用以存储DM服务器下发的参数,该子节点同样可以命名为InstallPara,在利用此下载方式时,DM服务器可以将参数下发给Delivered/Pkg1/InstallPara子节点。
不论是以何种下载方式,都需要在终端增加一个存储空间作为子节点,该增加的子节点是否存在可以根据服务器的需要设定,若在安装过程中需要参数(如序列号),或是需要实现个性化安装(如,只安装Java相关的组件或C++相关的组件),或是需要提供给服务器软件组件的使用环境等信息(如,此软件组件或软件组件包是Java环境还是C++环境)等情况,则可以增加子节点InstallPara;若确定不需要时,也可以不增加子节点InstallPara。
该InstallPara的节点信息如表1所示,该InstallPara子节点的位置为DownLoad/<X>/InstallPara,该子节点的状态是可选的,格式类型可以是任意类型,在本实施例中,设定格式类型为字符型,该InstallPara子节点最多可以添加一个,且能够接受的最小访问控制权限为Get命令。这些设定适用于各种下载方式。
![]()
表1
如表2所示,为Name子节点的信息,该子节点的位置为:DownLoad/<X>/Name或Inventory/Delivered/<X>/Name或Inventory/Deployed/<X>/Name,同样这些信息适用于各种下载方式。该子节点是必选的,格式类型为字符型,可以添加的可执行节点个数为一个,能够接受的最小访问控制权限为Get命令。
![]()
表2
另外,Pkg1的子节点中还包括State,该子节点的位置为Inventory/Delivered/<X>/State,包括的信息如表3所示。该State中记载了当前软件组件包或软件组件的状态信息,可以设定当状态为Delivered时,用“10”表示,当状态为Installed时,用“20”表示,如表4所示。
![]()
表3
![]()
表4
显然,DM服务器可以在下发指示下载的命令之后,且终端安装软件组件包之前下发该参数。
若下载方式为间接下载,则DM服务器将软件组件包的下载地址存放在名称为Pkg1的管理节点PkgURL子节点中,并下发指示下载的命令。终端可以根据设定的下载方式,利用下载地址将软件数据包下载到本地。
步骤502:若所述终端接收到的是所述下载地址和指示下载的命令,则利用所述下载地址下载并保存所述软件组件包。
如前所述,下载的方式主要分为直接下载和间接下载。直接下载即为DM务器指示终端在SCOMO中的Delivered子树下为待下载软件组件包创建管理节点,然后通过对Delivered子树的Data节点执行Replace命令,将软件组件包下发到终端;间接下载即为DM服务器指示终端在Download节点下为待下载的软件组件包创建管理节点,在该管理节点中的子节点中设定下载信息,其中包括软件组件包的名称,版本,下载地址等,并添加相应的操作权限,然后向终端发送指示下载的命令。图8为这三种下载方式的流程图,下面分别描述这三种下载方式。
1、间接下载中,利用DownLoad指令下载的方式。
首先,终端根据DM服务器提供的软件组件包的下载地址将该软件组件包下载到本地。
然后,在安装之前,终端在Delivered子树下生成下载成功的所述软件组件包对应的管理节点,即为所述软件组件包生成Delivered子树下的管理节点。在生成该管理节点之前,终端需要判断Delivered子树下是否有这种管理节点,该管理节点对应的软件组件包的标识(PkgID)与下载的该软件组件包的标识相同,所述PkgID可以是软件组件发布者(Software Publisher)或软件组件包发布者(Package Publisher)提供。若判断结果为有,则将原Delivered子树下的该管理节点以及其子节点的信息修改为当前下载的软件组件包的信息,并重新为该管理节点分配访问控制权限;若判断结果为没有,则在Delivered子树下为下载的软件组件包新生成管理节点以及其子节点,并为新生成的该管理节点分配访问控制权限。本发明实施例中所提到的为节点分配访问控制权限具体指:为该节点生成ACL属性,然后为该属性赋予ACL值,该ACL值可以为空(默认继承其父节点的ACL值)或者非空(自身的ACL值)。
在本实施例中,设定下载的软件组件包的标识为PkgID_1,则终端生成该软件组件包对应的管理节点之前,先判断当前的Delivered子树下是否有标识为PkgID_1的管理节点的标识子节点(PkgID),若有,则将已存在的该管理节点的信息以及其子节点修改为下载的软件组件包的信息,并重新为修改信息后的管理节点以及其子节点分配访问管理权限;否则,在Delivered子树下为该下载的软件组件包生成一个新的管理节点,该生成的管理节点的标识子节点(PkgID)的值为PkgID_1,并为该新生成的管理节点以及其子节点分配访问管理权限。如图6中所示,终端为Delivered子树下生成的所述软件组件包对应的管理节点的子节点设置值,该值可以与DownLoad子树下生成的该软件组件包对应的管理节点的子节点值相同,State子节点的状态设置为Delivered。除此以外,终端还为该Delivered子树下新生成的管理节点和该管理节点的子节点分配访问控制权限及其它属性值。
在本实施例中,分配访问控制权限的方法可以有多种,下面举例来说明。
Delivered子树下的管理节点权限赋予方法:通过步骤501的描述可知,在利用DownLoad指令下载的方式中,DM服务器下发指示下载的命令之前,已经在DownLoad子树下生成了该软件组件包对应的管理节点,则终端为Delivered子树下生成的管理节点赋予与Download子树下的管理节点相同的访问控制权限,或者让Delivered子树下的管理节点继承其父节点(Delivered节点)的访问控制权限,或者终端给Delivered子树赋予特定的权限(如Get=*)。
所述管理节点子节点的权限赋予方法:Delivered子树下该管理节点下的子节点继承该管理节点的访问控制权限,或者为Delivered子树下该管理节点下的子节点赋予其在Download子树下该软件组件包对应的管理节点的对应子节点相同的权限。另外还可已将上述两种方法合并使用,将部分Delivered子树下该管理节点下的子节点继承该管理节点的访问控制权限,其他Delivered子树下该管理节点下的子节点赋予其在Download子树下该软件组件包对应的管理节点的对应子节点相同的权限。
对于管理节点的可执行子节点(即Operations子节点下的Install、InstallInactive和Remove可执行节点),将Download子树下的可执行节点的访问控制权限作为其访问控制权限,即将Operations子节点的三个可执行节点Install、InstallInactive和Remove的权限设定为:DownLoad子树下的管理节点的Operations下的可执行节点的访问控制权限,较优的可以设定为Download子树下所执行下载业务的可执行节点的访问控制权限。例如,DownLoad指令为指示下载的命令,执行该指令的是DownLoad/Pkg1/Operations/DownLoad可执行节点,其权限为Get=*&Exec=ServerA,则为Delivered/Pkg1/Operations/节点下的所有可执行节点赋予权限Get=*&Exec=ServerA。
另外,若判断下载的所述软件组件包与Delivered子树下已有的一管理节点对应的软件组件包相同,则在分配权限时也可以将Download子树下该软件组件包的管理节点的访问控制权限与Delivered子树中已有的该软件组件包管理节点的访问控制权限之和,作为Delivered子树下该软件组件包对应的管理节点的新的访问控制权限,该管理节点的子节点分配方式可以与前述相同。
最后,终端将下载响应消息上报给DM服务器,该下载响应消息中包含所述软件组件包在Delivered子树上的管理节点的URI(即:Delivered的子节点的URI),同时还可以包含但不限于:软件组件包标识(即PkgID节点)和软件组件包名称(即Name子节点)等信息中的一个或多个。
在本实施例中,上报响应消息的方法也可以有多种,如同步上报或异步上报。同步上报即在给服务器下发的执行指令的回复消息中上报执行结果及其它信息;异步上报是独立于给服务器下发的执行指令的回复消息而上报执行结果,异步上报可以是同一管理会话或不同管理会话。同步上报的方式可以让服务器实时获知当前终端的执行结果,异步上报的方式可以减少终端与服务器之间的会话等待,减少资源浪费提高效率,用户可以根据自身需求选择合适的上报方式。下面分别描述这两种上报方式:
异步上报是利用Generic Alert命令来实现数据上报的,异步上报的信息包括:操作结果码、Source、Target、AlertType、Correlator,其中上报的结果代码放在Generic Alert命令的Item/Data元素中,在Source元素中携带所执行下载指令的URI,在Target元素中携带软件组件包在Delivered子树下生成所述管理节点的URI信息,在上报上述信息的基础上,还携带软件组件包的信息(如名称信息,即Delivered子树中生成的管理节点的Name子节点信息和/或该管理节点的标识信息,即Delivered子树中生成的管理节点的PkgID子节点信息)。具体的上报软件组件包信息的方式至少可以有三种:
1、利用Alert中MetaInf的可扩展元素EMI将软件组件包的名称上报至DM服务器,过程可以利用如下程序实现,Pkg1为终端生成管理节点时为该管理节点分配的名称:
<Alert>
<CmdID>2</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/Download</Loc
URI></Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI></Targe
t>
<Meta>
<Type xmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>text/plain</Format>
<Mark xmlns=″syncml:metinf″>critical</Mark>
<EMI xmlns=″syncml:metinf″>_Name</EMI><!--要上报的软件组
件包的信息-->
</Meta>
<Data>
<!--Result Code-->
</Data>
</Item>
</Alert>
上述程序中,EMI元素的值可以是Delivered/Pkg1/Name中的信息,或是Delivered/Pkg1/PkgID中的信息,或是这两种信息都上报。
2、在Alert中添加一个Item项,利用该添加的Item项中的Data将软件组件包的信息上报给DM服务器,具体可以利用以下程序实现:
<Alert>
<CmdID>2</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/Download</Loc
URI></Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI></Targe
t>
<Meta>
<Type xmlns=″symcml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>text/plain</Format>
<Mark xmlns=″syncml:metinf″>critical</Mark>
</Meta>
<Data>
<!--Result Code-->
</Data>
</Item>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/Download</Loc
URI><Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg1/Name</LocURI><
/Target>
<Meta>
<Type xmlns=″symcml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>chr</Format>
</Meta>
<Data>_Name</Data><!--要上报的软件组件包的信息-->
</Item>
</Alert>
上述程序中,Data元素的值就是Delivered/Pkg1/Name中的信息,或是Delivered/Pkg1/PkgID中的信息,或者将这两个信息都上报。
3、在Alert的Item/Data元素中上报操作结果码,同时组合的上报标识和/或Name,为了让服务器能够正确解析Item/Data元素中的操作结果码、标识和/或Name,需要为Item/Data元素的数据规定一个数据格式,这个数据格式可以是“操作结果码(分隔符)标识”,也可以是可扩展标记语言(xml)格式。具体上报程序片断如下(以xml格式为例),其中Pkg1为终端生成管理节点时为该管理节点分配的名称:
<Alert>
<CmdID>2</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/Download</Loc
URI></Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI></Targe
t>
<Meta>
<Type xmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>text/plain</Format>
<Mark xmlns=″syncml:metinf″>critical</Mark>
</Meta>
<Data>
<![CDATA[
<ResultCode>200</ResultCode>
<Identifier>1123sdf312</Identifier>
]]>
</Data>
</Item>
</Alert>
同步上报是利用Exec命令对应的Status命令来上报执行结果的,Status命令的Data携带操作的DM状态码,在此命令中同时上报Delivered子树下Pkg1管理节点URI信息,还可以上报软件组件包名称Name或者上报软件组件包标识PkgID,上报方法为:在Status命令中携带Item,Item的Target元素携带Delivered子树下Pkg1管理节点的URI信息,Source元素携带Exec操作所执行的节点的URI。具体可以利用下述程序实现:
<Status>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Exec</Cmd>
<Data>200</Data><!--Successful-->
<Item>
<Target>
<LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI>
</Target>
</Item>
</Status>
另外,也可以在上报执行状态的同时携带Delivered/Pkg1/NAME信息或Delivered/Pkg1/PkgID信息以及软件组件操作状态码。其中软件组件操作状态码可以携带在Item/Data元素中上报,Delivered/Pkg1/NAME信息或Delivered/Pkg1/PkgID信息可以携带在EMI元素中上报,或者使用并列的Item携带上报,或者组合在Item/Data元素的数据中上报(如果要上报软件组件操作状态码,则该状态码也进行组合),对于组合上报为了让服务器能够解析Item/Data元素中的不同数据,需要为Item/Data元素的数据规定一个数据格式,这个数据格式可以是“操作结果码(分隔符)标识”,也可以是xml格式。具体上报程序片断如下(以xml格式为例):
<Status>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Exec</Cmd>
<Data>200</Data><!--Successful-->
<Item>
<Target>
<LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI>
</Target>
<Meta><Format xmlns=″syncml:metinf″>text/plain</Format></Meta>
<Data>
<![CDATA[
<ResultCode>200</ResultCode><!--状态码-->
<Identifier>1123sdf312</Identifier>
]]>
</Data>
</Item>
</Status>
DM服务器通过终端上报的信息确定下载后的管理组件包及其对应的管理节点,通过这些信息可以进行后续对软件组件包的操作。
2、间接下载中,利用DownLoadInstall或DownLoadInstallInactive指令下载的方式。
此下载方式中,DM服务器同样会指示终端在Download子树中生成所述软件组件包对应的管理节点,然后,终端根据DM服务器提供的软件组件包的下载地址将所述软件组件包下载到本地,所述下载地址存放在Download子树管理节点的PkgURL子节点中,若下载成功,则在下载完后终端自动执行Install或者InstallInactive操作。
3、直接下载方式。
DM服务器指示终端在Delivered子树下生成所述软件组件包对应的管理节点,并向终端下发针对Delivered子树下生成的该管理节点的Data子节点的Replace命令,则终端接收服务器通过Replace命令下载的软件组件包数据并保存在Delivered子树下该管理节点的Data子节点上,并向DM服务器返回下载响应消息。
步骤503:所述终端将获得的该软件组件包安装在本地,并在软件组件管理对象SCOMO中的Deployed子树下生成所述软件组件对应的管理节点及其子节点。
当下载过程成功完成后,则将获得的软件组件包安装在本地,显然,若是直接下载,该获得的软件组件包是DM服务器直接下发的,若是间接下载,则该获得的软件组件包是从DM服务器下发的下载地址中获得的。
由于下载的方式不同,因此安装的方式也将会不同。下面分别以直接下载、间接下载中以DownLoad指令和间接下载中以DownLoadInstall或DownLoadInstallInactive指令为例说明安装的过程。
1、间接下载中以DownLoadInstall或DownLoadInstallInactive为指令。
若DM服务器下发的下载方式为DownLoadInstall或DownLoadInstallInactive指令,则说明终端成功下载软件组件包后,将直接对该软件组件包执行安装操作。在步骤502中已描述了终端利用DownLoadInstall或DownLoadInstallInactive指令下载软件组件包的过程,此时,终端可以为所下载的软件组件包在Delivered子树下生成管理节点,如图6所示,并为该管理节点以及其子节点分配访问管理权限。此处,分配访问控制权限的方式可以与步骤502中,以Download方式下载时,为生成的Delivered子树下的管理节点分配访问控制权限的方式相同,当然,此时也可以不在Delivered子树下生成对应的管理节点。
终端将下载的软件组件包安装在本地,在安装过程中可能会需要参数,在步骤501中记载了一种下发参数方式。本发明实施例中还可以有其他方式来使终端获得该参数,如:若DM服务器设定的是直接下载方式或是利用DownLoad命令下载,则当DM服务器接收到终端上报的下载响应消息后,认为此时终端已经成功下载,则再次下发安装指令:Install或InstallInactive,DM服务器通过该安装指令可以将参数下发到终端。若DM服务器设定的是利用DownLoadInstall或DownLoadInstallInactive命令下载,则DM服务器通过该DownLoadInstall或DownLoadInstallInactive命令将该参数下发到终端。实际上,就是通过包含“Install”指令的DM命令来下发参数的。以通过Inventory/Delivered/<Pkg1>/Operations/Install子节点执行业务为例,设定DM服务器下发的安装指令为Install,即指定Delivered/Pkg1/Operations/Install可执行节点来执行安装业务,其参数的携带可以利用以下程序来实现:
<Exec>
<CmdID>3</CmdID>
<Item>
<Target>
<LocURI>./SCOMO/Inventory/Delivered/Pkg1/Operations/Install</LocU
RI>
</Target>
<Data>-l-t</Data><!--参数-->
</Item>
</Exec>
在上述程序中,实际就是利用Exec指令中的Data来携带参数,在安装过程就可以利用该参数来执行安装。
在利用本步骤中利用DownLoadInstall或DownLoadInstallInactive进行安装时,若安装失败,但软件组件包并未被删除,且在安装之前没有在Delivered子树下生成该软件组件包对应的管理节点,则此时,终端为所下载的软件组件包在Delivered子树下生成管理节点,在生成该管理节点之前,终端需要判断当前Delivered子树下是否有这样一种管理节点,该管理节点对应的软件组件包与下载的软件组件包相同,若有,则将当前Delivered子树下的该管理节点以及其子节点的信息修改为下载的软件组件包的信息,并为该修改信息后的管理节点以及其子节点分配访问管理权限;否则,在Delivered子树下新生成该软件组件包对应的管理节点以及其子节点,并为该新生成的管理节点以及其子节点分配访问管理权限。此时,分配访问管理权限的方法可以与步骤502中记载的利用DownLoad指令下载时,分配访问管理权限的方法相同,当然,也不限于其他方法,然后,终端将包含安装失败信息的安装响应消息上报给DM服务器。
若安装成功,则终端需要为软件组件包中的每一个软件组件在Deployed子树下生成对应的管理节点,如图6所示,终端在为软件组件包中的软件组件生成管理节点时,获取该软件组件的标识,并将该标识设置为所述管理节点的软件组件标识子节点的值(即设置为Deployed子树下的ID节点的值)。所述软件组件的标识可以由网络侧提供(例如:由软件组件发布者(Software Publisher)或软件组件包发布者(Package Publisher)提供)。所述软件组件的标识可以作为软件组件包的元数据随软件组件包一同下发给终端,或独立于软件组件包下发给终端。此软件组件标识可以用来唯一标识一个软件组件,服务器(包括DM服务器或软件组件发布者或软件组件包发布者)可以利用此标识来识别一个软件组件。终端在生成管理节点之前,需要判断是否Deployed子树下有已生成的管理节点对应的软件组件与安装的所述软件组件中的一个或多个相同。该判断方法可以为:通过比较软件组件的标识(Deployed子树下的ID节点)或者比较软件组件的名称(Deployed子树下的Name节点)来判断两个软件组件是否相同,若以标识为判断基准,则当标识相同则两个软件组件就相同,否则就不相同。以名称为判断基准的方式与以标识为判断基准相同。若软件组件相同,则在修改该相同软件组件的管理节点及其子节点的信息的时候,保留其已有的PkgIDRef子节点的值(即保留该管理节点原对应的软件组件与原软件组件包的关联信息,其值为原软件组件包的标识PkgID),并添加新的关联信息(即在Deployed子树下新添加一个PkgIDRef节点,用以保存安装的所述软件组件包和该包中所述管理节点对应的软件组件的关联信息),这样在Deployed子树上会存在多个PkgIDRef节点。为了实现这个能力,需要把存放关联信息的PkgIDRef节点的出现次数由一个改为一个或多个,如表5所示。
![]()
表5
下面以名称为判断基准,说明本实施例中的该判断过程。
以名称为ascendo_1的软件组件为例,若当前Deployed子树下存在管理节点下的Name子节点的信息为ascendo_1的情况,则将该管理节点的信息修改为下载安装成功的ascendo_1软件组件的信息,并为修改后的管理节点及其子节点分配访问管理权限;当前Deployed子树下不存在管理节点下的Name子节点的信息为ascendo_1的情况,则在Deployed子树下生成一个名为Componentl管理节点,即该管理节点Name子节点的信息为ascendo_1,并为该管理节点以及其子节点分配访问控制权限。此在Deployed子树下生成名为Componentl的管理节点的方式可以有多种,例如,若在DownLoad子树中生成的管理节点中包含软件组件信息,如图9所示,则可以将该软件组件信息保存到Deployed子树下对应的管理节点上。
此时,不论判断结果为存在还是不存在相同的软件组件,都需要为修改信息后的或新生成的管理节点以及其子节点分配访问控制权限,分配的方法可以有多种,如步骤502中记载的方法,另外,若判断存在相同名称的管理节点时,还可以有其他分配方法,如:将一个设定的权限与原管理节点的权限相加,将相加之和作为新的访问管理权限,该设定的权限可以为Download子树下该软件组件包的权限等。具体的可执行节点的访问控制权限赋予实例为:Download/Pkg1/Operations/DownloadInstall可执行节点来实现了安装过程,Download/Pkg1的权限为Get=ServerA&Relace=ServerA,Download/Pkg1/Operations/DownloadInstall的权限为Get=ServerA&Exec=ServerA。当前,在Deployed子树下已生成的相同软件组件的管理节点的访问管理权限为Get=ServerB&Relace=ServerB,Operations下的可执行节点的权限均为Get=ServerB&Exec=ServerB。则将Deployed子树下的该相同软件组件的管理节点信息修改后,可以直接将ServerA作为新的访问管理权限;也可以将Get=ServerA+ServerB&Relace=ServerA+ServerB作为新的管理节点的访问管理权限;也可以将其权限设置为空ACL=以继承父节点Delivered节点的权限;也可以为其赋予一个特定的权限,如Get=*。
该管理节点的子节点的访问管理权限的分配方法可以是:继承该管理节点的访问控制权限,或者是为Deployed子树下该管理节点下的子节点赋予其在Download子树下该软件组件包对应的管理节点的对应子节点相同的权限,或是将DownLoad子树下的访问控制权限作为Deployed子树下的所述管理节点下可执行节点的访问控制权限,即将Deployed子树上的Operations的三个可执行子节点Activated、Deactivated和Remove的权限设定为:Download子树中管理节点中Operations下的可执行节点(Download或DownloadInstall或DownloadInstallInactive)的访问控制权限,较优的可以设定为Download子树下所执行安装业务的可执行节点的访问控制权限。例如,安装命令为DownloadInstall,则执行该指令的是Download/Pkg1/Operations/DownloadInstall可执行节点,其权限为Get=*&Exec=ServerA,则为Deployed/Pkg1/Operations/节点下的所有可执行节点赋予权限Get=*&Exec=ServerA。
通过这种相加得到访问管理权限的方式,可以在更新了原有的管理节点后,原ServerB也能够对该管理节点进行操作,但是这样可能会降低安全性,用户可以根据需要选择合适的分配访问管理权限的方法。
不论是安装成功与否,终端都需要向DM服务器上报安装响应消息,所不同的是,若安装失败,还需要将失败消息上报给DM服务器。该上报的方式可以是同步上报或异步上报。如果是异步执行,则使用Generic Alert命令上报,异步上报的信息包括:结果码、Source、AlertType、Correlator,其中上报的结果代码放在Generic Alert命令的Item/Data元素中,在Source元素中携带所执行下载安装指令的URI,如果安装成功,则需要在Target元素中携带在Deployed子树下对应的生成的管理节点的URI信息,如果下载成功而安装失败(结果码为60),并且在Delivered子树下生成了对应的管理节点,则还需要在Target元素中携带在Delivered子树生成的所述管理节点的URI信息,同时还可以携带软件组件的名称(Name)或软件组件的标识(ID),名称信息或标识的上报方法同步骤502中利用Download命令执行下载的过程时,将下载响应消息上报的过程相同,这里不再赘述。
如果是同步上报,则使用Exec命令对应的Status命令上报执行结果,Status命令的Data携带操作的DM状态码。同时如果安装成功,则需要在Status元素中携带在Deployed子树下生成的管理节点的URI,还可以携带软件组件包Name和/或软件组件包标识PkgID。上报方法为:在Status中携带Item,Item的Target元素携带Inventory/Deployed子树下生成的管理节点的URI信息,也可以在上报执行状态的同时携带软件组件信息(名称或标识ID)和/或软件组件操作状态码。其中Inventory/Deployed子树下的Name或ID信息可以携带在EMI元素中上报,或者使用并列的Item携带上报,或者组合在Item/Data元素的数据中上报(如果要上报软件组件操作状态码,则该状态码也进行组合),软件组件操作状态码携带在Data元素中。此处的同步上报前述步骤502中的同步上报类似,具体代码示例参见步骤502的同步上报代码示例。
显然,若DM服务器不下发参数,则本实施例的其他步骤仍然可以正常执行。DM服务器接收到上报的信息后,就可以根据信息对软件组件进行后续的操作。
2、直接下载方式或间接下载方式中以DownLoad为指令。
通过直接下载方式下发软件组件包后,或利用DownLoad指令完成下载后,终端向服务器发送下载响应消息,当DM服务器接收到该下载响应消息后,将向终端下发安装指令,该安装指令为Install或InstallInactive,执行该安装操作的可执行节点为Inventory/Delivered/<Pkg1>/Operations/Install或Inventory/Delivered/<Pkg1>/Operations/InstallInactive,甚至该安装指令可以是用户通过操作界面发送到执行安装操作的可执行节点中。在执行安装过程之前,还需要判断发送安装命令的DM服务器是否有权限对软件组件包进行操作,即判断该DM服务器访问管理权限是否达到了Inventory/Delivered/<Pkg1>/Operations/Install可执行节点或Inventory/Delivered/<Pkg1>/Operations/InstallInactive可执行节点的访问管理权限。若是以直接下载方式进行下载操作的,则Inventory/Delivered/<Pkg1>/Operations/Install可执行节点或Inventory/Delivered/<Pkg1>/Operations/InstallInactive可执行节点的访问管理权限是由下发指示下载的命令的DM服务器分配的。若是以DownLoad命令进行下载的,则Inventory/Delivered/<Pkg1>/Operations/Install可执行节点或Inventory/Delivered/<Pkg1>/Operations/InstallInactive可执行节点的访问管理权限是由终端分配的。
若DM服务器满足权限要求,即有可执行节点的访问管理权限,则在安装完成后,在Deployed子树生成ascendo_1、ascendo 2和ascendo_3这三个软件组件对应的管理节点,如图6或7所示。终端在为软件组件包中的软件组件生成管理节点时,获取该软件组件的标识,并将该标识设置为所述管理节点的软件组件标识子节点的值(即设置为Deployed子树下的ID节点的值)。所述软件组件的标识由网络侧提供(例如:由软件组件发布者(Software Publisher)或软件组件包发布者(Package Publisher)提供)。所述软件组件的标识可以作为软件组件包的元数据随软件组件包一同下发给终端,或独立于所述软件组件包下发给终端。此软件组件标识可以用来唯一标识一个软件组件,服务器(包括DM服务器或软件组件发布者或软件组件包发布者)可以利用此标识来识别一个软件组件。在生成之前,当确定Deployed子树没有与三个软件组件相同的软件组件对应的管理节点时,则在Deployed子树下生成ascendo_1、ascendo_2和ascendo_3这三个软件组件对应的管理节点,当有时,则将该相同软件组件的管理节点及其子节点的信息修改为软件组件的信息,若软件组件相同,则在修改该相同软件组件的管理节点及其子节点的信息的时候,保留其已有的PkgIDRef子节点的值(即保留该管理节点原对应的软件组件与原软件组件包的关联信息,其值为原软件组件包的标识PkgID),并添加新的关联信息(即在Deployed子树下新添加一个PkgIDRef节点,用以保存安装的所述软件组件包和该包中所述管理节点对应的软件组件的关联信息),这样在Deployed子树上会存在多个PkgIDRef节点。不论判断结果为什么,都将为修改信息后的或新生成的管理节点和该管理节点的子节点分配访问控制权限,该分配方法可以与上述间接下载中以DownLoadInstall或DownLoadInstallInactive为指令的方法一致。
当向DM服务器上报安装响应消息时,同样可以采用同步上报和异步上报的方式。如果是异步上报,则利用Generic Alert命令上报,异步上报的信息包括:结果码、Source、Target、AlertType、名称,其中上报的结果代码放在Generic Alert命令的Item/Data元素中,在Source元素中携带所执行安装指令的URI,在Target元素中携带组件安装后的Deployed管理子树URI信息。在上报上述信息的基础上,还应该携带软件组件的名称或标识,名称信息或标识的上报方法同步骤502中利用Download指令下载时,上报下载响应消息的过程相同,这里不再赘述。DM服务器通过终端上报的信息确定安装后的管理组件及其对应的管理树,通过这些信息可以进行后续对软件组件的管理。
如果是同步上报,则使用Exec命令对应的Status命令上报执行结果,Status命令的Data携带操作的DM状态码。同时上报Deployed子树下管理节点信息:软件组件的管理节点URI,还包括软件组件的标识(Deployed子树下的ID节点)和/或软件组件的名称(Deployed子树下的Name节点),上报方法为:在Status命令中携带Item,Item的Target元素携带Deployed子树下所安装软件组件管理节点的URI,也可以在上报执行状态的同时携带软件组件信息(名称或标识ID)和/或软件组件操作状态码。其中Deployed子树下管理节点的Name或ID信息可以携带在EMI元素中上报,或者使用并列的Item携带上报,或者组合在Item/Data元素的数据中上报(如果要上报软件组件操作状态码,则该状态码也进行组合),软件组件特有的操作状态码携带在Data元素中。此处的同步上报前述步骤502中的同步上报类似,具体代码示例参见步骤502的同步上报代码示例。
不管是同步上报还是异步上报,终端执行DownloadInstall或DownloadInstallInactive操作后,在Deployed下生成软件组件管理节点及其子节点之后,若还在软件组件管理对象的Delivered子树下生成所述软件组件包对应的管理节点,则所述安装响应消息包括:Deployed子树下生成的该管理节点的URI和Delivered子树下生成的管理节点的URI,服务器根据终端上报的消息中的Item/Target元素中的URI判断该URI所指示的是该软件组件包在终端软件组件管理对象上的地址还是已安装的软件组件在终端软件组件管理对象上的地址,具体判断方法可以是:判断URI中是否包含Delivered或者Deployed字符串,如果包含Delivered,则URI指示的是软件组件包的地址,否则为已安装软件组件的地址。以下是异步上报的消息示例;
<Alert>
<CmdID>2</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/DownloadInstall
</LocURI></Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg1</LocURI></Targe
t>
<Meta>
<Type xmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>text/plain</Format>
</Meta>
<Data>...</Data>
</Item>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg1/Operations/DownloadInstall
</LocURI><Source>
<Target><LocURI>./SCOMO/Inventory/Deployed/Com1
</LocURI></Target>
<Meta>
<Type xmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>chr</Format>
</Meta>
<Data>...</Data>
</Item>
</Alert>
当然,本实施例中,此过程也可以是利用参数进行安装过程,不论是否有参数,其他安装过将不会受到影响。安装结束后,可以利用Remove可执行节点执行删除。
通过对上述系统和实施例1的描述,本发明实施例还提供一种终端,如图10所示,包括接收单元11、下载单元12和安装单元13,其中,接收单元11用于接收DM服务器下发的软件组件包或该软件组件包的下载地址和指示下载的命令,该软件组件包包含了一个以上软件组件;下载单元12用于若接收到的是所述下载地址和指示下载的命令,则利用所述下载地址将所述软件组件包下载;安装单元13用于将获得的该软件组件包安装在本地,并在Deployed子树下生成所述软件组件对应的管理节点及其子节点。
若所述指示下载的命令中包含的下载方式为间接下载,且利用DownLoad指令下载,则当所述软件组件包下载之后,且安装之前,或,若当指示下载的命令中包含的下载方式为间接下载,且利用DownLoadInstall或DownLoadInstallInactive指令下载,则若下载成功且安装失败,则所述终端还包括第一生成单元14和第一权限分配单元15,其中,第一生成单元14用于在Delivered子树下生成所述软件组件包对应的管理节点;第一权限分配单元15用于为所述管理节点和该管理节点的子节点分配访问控制权限。
在Delivered子树下生成所述软件组件包对应的管理节点之前,所述终端还包括第一判断单元16,用于判断下载的所述软件组件包的标识是否与Delivered子树下已有的一管理节点对应的软件组件包的标识相同,若相同,则将Delivered子树下该管理节点的信息修改为下载的所述软件组件包的信息,否则,在Delivered子树下生成下载的该软件组件包对应的管理节点。
所述接收单元11还可以用于在接收信息之前,在Download子树中为所述软件组件包生成管理节点;则所述第一权限分配单元15还用于将Download子树下生成的所述管理节点的访问控制权限,作为Delivered子树下生成的所述管理节点的访问控制权限,或将Delivered子树下生成的所述管理节点的访问控制权限设置为空,进而继承其父节点的访问控制权限,或为Delivered子树下生成的所述管理节点设定特定的访问控制权限,或将Download子树下生成的所述管理节点的访问控制权限和Delivered子树下生成的所述管理节点的父节点的访问控制权限进行合并,将合并后的访问控制权限作为Delivered子树下生成的所述管理节点的访问控制权限。
所述接收单元11还用于在接收信息之前,在Download子树中为所述软件组件包生成管理节点;则所述第一权限分配单元15还用于若判断下载的所述软件组件包与Delivered子树下已有的一管理节点对应的软件组件包相同,将Download子树下为该软件组件包生成的管理节点的访问控制权限与Delivered子树中已有的该管理节点的访问控制权限之和,作为Delivered子树下该管理节点的访问控制权限。
所述第一权限分配单元15还用于将Delivered子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Download子树下的可执行节点的访问控制权限作为Delivered子树下生成的所述管理节点下可执行节点的访问控制权限。
所述下载单元12将软件组件包下载之后,且所述安装单元13安装所述软件组件包之前,所述接收单元11还用于接收DM服务器下发的DM命令;所述终端还包括第二判断单元17,用于判断所述DM服务器的权限是否满足Delivered子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
所述接收单元11还用于接收所述DM服务器下发的参数;所述安装单元13还用于根据所述参数将下载的所述软件组件包安装在本地。
在所述安装单元13执行安装操作之后,且在Deployed子树下生成所述软件组件对应的管理节点之前,所述终端还包括第三判断单元18,用于判断所述软件组件包中一软件组件是否与Deployed子树下已有的一管理节点对应的软件组件相同,若相同,则将Deployed子树下该管理节点的信息修改为所述软件组件包中该软件组件的信息,否则,在Deployed子树下生成所述软件组件包中软件组件对应的管理节点。
所述接收单元11还用于在接收到所述DM服务器通过DM命令直接下发的软件组件包之前,根据DM服务器的指示在Delivered子树下生成所述软件组件包对应的管理节点,且该管理节点中包含软件组件信息,则所述终端还包括第二生成单元19,用于将Delivered子树下管理节点中包含的所述软件组件信息保存到Deployed子树中。
在Deployed子树下生成所述软件组件对应的管理节点之后,所述终端还包括第二权限分配单元20,用于为所述管理节点和该管理节点的子节点分配访问控制权限。
所述第二权限分配单元20还用于将Delivered或Download子树下生成的所述软件组件包对应的所述管理节点的访问控制权限,作为Deployed子树下生成的所述管理节点的控制权限,或将Deployed子树下生成的所述管理节点的访问控制权限设置为空,进而继承其父节点的访问控制权限,或为Deployed子树下生成的所述管理节点设定特定的访问控制权限,或将Delivered或Download子树下生成的所述管理节点的访问控制权限和Deployed子树下生成的所述管理节点的父节点的访问控制权限进行合并,将合并后的访问控制权限作为Deployed子树下生成的所述管理节点的访问控制权限。
所述第二权限分配单元20还用于将Deployed子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Delivered子树或Download子树下的可执行节点的访问控制权限,作为Deployed子树下生成的所述管理节点下可执行节点的访问管理权限。
当在Deployed子树下生成所述软件组件对应的管理节点之后,且DM服务器对Deployed子树下生成所述软件组件对应的管理节点进行操作之前,所述接收单元11还用于接收DM服务器下发的DM命令;所述终端还包括第四判断单元21,用于判断该DM服务器的权限是否满足Deployed子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
若所述指示下载的命令中包含的间接下载的指令为Download,当下载完成之后,且安装所述软件组件包之前,所述终端包括上报单元22,用于将下载响应消息上报给DM服务器,所述下载响应消息包括:Delivered子树下生成的所述管理节点的统一资源标识URI;当在软件组件管理对象SCOMO中的Deployed子树下生成所述软件组件对应的管理节点之后,所述上报单元22还用于将安装响应消息上报给DM服务器,所述安装响应消息包括:Deployed子树中生成所述管理节点的URI。
所述下载响应消息和所述安装响应消息的上报方式为:同步上报方式或异步上报方式。
若利用所述同步上报方式上报,则所述上报单元22还用于在Status命令的Item元素的Target子元素中携带下载响应消息或安装响应消息中的URI。
所述下载响应消息还包括:所述软件组件包的名称和/或标识;所述安装响应消息还包括:所述软件组件的名称和/或标识。
若下载方式为直接下载或间接下载中利用DownLoad指令下载,则在Deployed子树下生成所述软件组件对应的管理节点之后,所述终端还包括设置单元23,用于将所述软件组件包的状态设置为已安装状态。
本发明实施例终端的工作步骤如图11所示,主要包括:首先,终端接收DM服务器下发的软件组件包或该软件组件包的下载地址和指示下载的命令,该软件组件包包含了一个以上软件组件;然后,若接收到的是所述下载地址和指示下载的命令,则利用所述下载地址下载所述软件组件包;最后,将获得的该软件组件包安装在本地,并在Deployed子树下生成所述软件组件对应的管理节点及其子节点。
为了进一步提高终端的安全性,需要为终端生成的管理节点和该节点的子节点分配访问管理权限,在下载过程中,具体到操作步骤为:若所述指示下载的命令中包含的下载方式为间接下载,且利用DownLoad指令下载,则当所述软件组件包下载之后,且将安装之前,或,若当指示下载的命令中包含的下载方式为间接下载,且利用DownLoadInstall或DownLoadInstallInactive指令下载,则若下载成功且安装失败,终端在软件组件管理对象SCOMO中的Delivered子树下生成所述软件组件包对应的管理节点,并为该管理节点和该管理节点的每一子节点分配访问控制权限。
在Delivered子树下生成所述软件组件包对应的管理节点之前,为了避免数据冗余和实现软件组件的升级,所述终端还要判断下载的所述软件组件包的标识是否与Delivered子树下已有的一管理节点对应的软件组件包的标识相同,若相同,则将Delivered子树下该管理节点的信息修改为下载的所述软件组件包的信息,否则,在Delivered子树下生成下载的该软件组件包对应的管理节点。
在终端接收DM服务器下发的信息之前,已在Download子树中为所述软件组件包生成管理节点,则终端分配访问控制权限的方法之一为:将Download子树下生成的所述管理节点的访问控制权限,作为Delivered子树下生成的所述管理节点的访问控制权限。若判断下载的所述软件组件包与Delivered子树下已有的一管理节点对应的软件组件包相同,则终端分配访问控制权限的方法之二为:将Download子树下为该软件组件包生成的管理节点的访问控制权限与Delivered子树中已有的该管理节点的访问控制权限之和,作为Delivered子树下该管理节点的访问控制权限。
终端为管理节点分配访问控制权限之外,还要为该节点下的子节点分配访问控制权限,该分配方法可以为:将Delivered子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Download子树下的可执行节点的访问控制权限作为Delivered子树下生成的所述管理节点下可执行节点的访问控制权限。
终端将软件组件包下载之后,且所述安装所述软件组件包之前,还要接收DM服务器下发的DM命令;当接收到该DM命令时,为了保证安全性,需要判断所述DM服务器的权限是否满足Delivered子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
在安装过程需要参数时,终端还需要接收所述DM服务器下发的参数,并根据所述参数将下载的所述软件组件包安装在本地。
在终端执行安装操作之后,且在Deployed子树下生成所述软件组件对应的管理节点之前,还需要判断所述软件组件包中一软件组件是否与Deployed子树下已有的一管理节点对应的软件组件相同,若相同,则将Deployed子树下该管理节点的信息修改为所述软件组件包中该软件组件的信息,否则,在Deployed子树下生成所述软件组件包中软件组件对应的管理节点。
终端在Deployed子树下生成所述软件组件包中软件组件对应的管理节点的方法可以有多种,例如:在接收到所述DM服务器通过DM命令直接下发的软件组件包之前,终端根据DM服务器的指示在Delivered子树下生成所述软件组件包对应的管理节点,且该管理节点中包含软件组件信息,并将Delivered子树下管理节点中包含的所述软件组件信息保存到Deployed子树中。
当然,终端在Deployed子树下生成所述软件组件包中软件组件对应的管理节点后,还需要为所述管理节点和该管理节点的子节点分配访问控制权限。
分配控制权限的方法包括但不限于:将Delivered或Download子树下生成的所述软件组件包对应的所述管理节点的访问控制权限,作为Deployed子树下生成的所述管理节点的控制权限。将Deployed子树下生成的所述管理节点下的子节点继承该管理节点的权限,或,将Delivered子树或Download子树下的可执行节点的访问控制权限,作为Deployed子树下生成的所述管理节点下可执行节点的访问管理权限。
当终端在Deployed子树下生成所述软件组件对应的管理节点之后,且DM服务器对Deployed子树下生成所述软件组件对应的管理节点进行操作之前,若终端接收到DM服务器下发的DM命令后,还需要判断该DM服务器的权限是否满足Deployed子树下生成的该DM命令所操作的节点的访问控制权限,若满足,则对该节点执行所述DM命令。
若所述指示下载的命令中包含的间接下载的指令为Download,当下载完成之后,且安装所述软件组件包之前,所述终端要将下载响应消息上报给DM服务器,所述下载响应消息包括:Delivered子树下生成所述管理节点的统一资源标识URI;当在软件组件管理对象SCOMO中的Deployed子树下生成所述软件组件对应的管理节点之后,所述终端还要将安装响应消息上报给DM服务器,所述安装响应消息包括:Deployed子树中生成所述管理节点的URI。
所述下载响应消息和所述安装响应消息的上报方式为:同步上报方式或异步上报方式。
若利用所述同步上报方式上报,则所述终端可以利用Status命令的Item元素的Target子元素中携带下载响应消息或安装响应消息中的URI。
当然,所述下载响应消息还包括:所述软件组件包的名称和/或标识;所述安装响应消息还包括:所述软件组件的名称和/或标识。
若下载方式为直接下载或间接下载中利用DownLoad指令下载,则在Deployed子树下生成所述软件组件对应的管理节点之后,所述终端还将所述软件组件包的状态设置为已安装状态。
本发明实施例还提供一种DM服务器,如图12所示,该DM服务器包括下发单元31,用于将软件组件包通过DM命令直接下发给终端,或将软件组件包的下载地址和指示下载的命令下发给终端,该软件组件包包含了一个以上软件组件。
该DM服务器还包括接收单元32,用于接收终端上报的消息,该消息中包含Delivered子树下生成所述管理节点的统一资源标识URI、Deployed子树中生成所述管理节点的URI、软件组件包的名称、标识、软件组件的名称和标识中的一个或多个。
所述下发单元31还用于在终端安装所述软件组件包之前,将参数下发给所述终端。
所述下发单元31包括第一指示单元33和发送单元34,其中,第一指示单元33用于于若下载方式为间接下载,则所述第一指示单元指示终端在Download子树下为所述软件组件包生成管理节点,并为该管理节点增加一个子节点,或,若下载方式为直接下载,则所述第一指示单元指示终端在Delivered子树中为所述软件组件包生成管理节点,并为该管理节点增加一个子节点;发送单元34用于将所述参数下发给Download子树或Delivered子树下增加的所述子节点。
所述下发单元31还用于通过DM命令将所述参数下发给终端,该DM命令用于指示终端执行安装操作。
所述下发单元31将软件组件包通过DM命令直接下发给终端之前,所述DM服务器还包括第二指示单元35,用于指示终端在Delivered子树下生成所述软件组件包对应的管理节点,且该管理节点中包含软件组件信息。
本发明实施例中DM服务器的工作流程如图13所示,主要包括:DM服务器将软件组件包通过DM命令直接下发给终端,或将软件组件包的下载地址和指示下载的命令下发给终端,该软件组件包包含了一个以上软件组件。
另外,DM服务器还接收终端上报的消息,该消息中包含Delivered子树下生成所述管理节点的统一资源标识URI、Deployed子树中生成所述管理节点的URI、软件组件包的名称、标识、软件组件的名称和标识中的一个或多个。
在终端安装所述软件组件包之前,DM服务器还可以将参数下发给所述终端。该下发的方法可以包括:
1、若下载方式为间接下载,则所述DM服务器指示终端在Download子树下为所述软件组件包生成管理节点,并为该管理节点增加一个子节点,或,若下载方式为直接下载,则所述第一指示单元指示终端在Delivered子树中为所述软件组件包生成管理节点,并为该管理节点增加一个子节点;然后,将所述参数下发给Download子树或Delivered子树下增加的所述子节点。
2、通过DM命令将所述参数下发给终端,该DM命令用于指示终端执行安装操作。
所述DM服务器将软件组件包通过DM命令直接下发给终端之前,所述DM服务器还指示终端在Delivered子树下生成所述软件组件包对应的管理节点,且该管理节点中包含软件组件信息。
在实施例1中记载的特征可以是并列的,如在不同的下载过程中,终端接收下发的参数的技术特征、为终端生成的管理节点和子节点分配访问管理权限的技术特征、将管理节点中NAME或ID、目标管理节点的URI通过同步或异步方式上报给DM服务器的技术特征、判断是否存在相同软件组件或软件组件包对应的管理节点的技术特征、在下载成功安装失败的处理的技术特征和在软件组件包对应的管理节点中包含软件组件信息的技术特征等,这些特征之间可以并列或结合应用,具体结合的可能性有多种,此处不一一赘述,只分别用两个实施例表明可以任意将特征结合,实施例2和实施例3为这些特征之间结合应用的事例。
实施例2为采用间接下载方法中,利用DownLoadInstall指令来实现下载和安装。在本实施例中设定DM服务器为ServerA,软件组件包名为ascendo,该软件组件包的标识为PkgID_2,包含的三个软件组件的名称为:ascendo_1、ascendo 2和ascendo_3,标识分别为ComID_1、ComID_2和ComID_3,下载过程成功但是安装过程失败,其步骤流程示意图如图14所示,该步骤主要包括:
步骤1401:终端下载软件组件包,并安装。
DM服务器ServerA指示终端在SCOMO的Download节点下生成软件组件包对应的Download子树中的管理节点,并为该管理节点赋值,其中包括软件组件的名称,版本,下载地址,参数等,如图15所示。当然,参数的下发过程可以与实施例1中记载的方式相同,也可以有其他方式。
在Download子树中生成该软件组件包对应的管理节点后,DM服务器会为该管理节点和子节点分配访问管理权限,例如,设定Download/Pkg2管理节点的访问管理权限为Get=*&Add=ServerA&Replace=ServerA。Download/Pkg2/OperationsDownloadInstall子节点的访问管理权限值为Get=*&Exec=ServerA,其它子节点都继承其父节点的访问管理权限。
然后,ServerA向终端发送Exec指令,在Target元素中指示执行下载业务的可执行节点为Download/Pkg2/Operations/DownloadInstall,具体操作可以根据以下程序来实现:
<Exec>
<CmdID>4</CmdID>
<Correlator>abc 123</Correlator>
<Item>
<Target>
<LocURI>./SCOMO/Download/Pkg2/Operations/DownloadInstall</LocURI>
</Target>
</Item>
</Exec>
终端将软件组件包下载后,将直接进行安装,设定由于某种原因安装失败,此时,软件组件包保留在终端中。
步骤1402:在Delivered子树下生成所述软件组件包对应的管理节点,并为该管理节点和子节点分配访问管理权限。
在Delivered子树下生成该软件组件包对应的管理信息前要先确定Delivered子树下是否有与下载的软件组件包同标识的管理节点,若无,则生成Delivered/Pkg2管理节点,并把Download/Pkg2的具体信息如名称,版本信息,参数等,保存到新生成的Delivered/Pkg2管理节点中,如图16所示;否则,将原Delivered/Pkg2的信息修改为当前软件组件包的信息。同样,不论是否有同名的情况,终端都将为Delivered/Pkg2管理节点和子节点分配访问管理权限,其分配过程可以与实施例1相同。
步骤1403:将Delivered/Pkg2管理节点的信息上报给ServerA。
生成了Delivered/Pkg2管理节点后,通过Alert命令向DM服务器上报该管理节点的URI和Delivered/Pkg2/NAME信息,如下述程序所示:
<Alert>
<CmdID>2</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Download/Pkg2/Operations/DownloadInst
all</LocURI></Source>
<Target><LocURI>./SCOMO/Inventory/Delivered/Pkg2</LocURI></Tar
get>
<Meta>
<Type xmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
</Meta>
</Item>
</Alert>
服务器在接到终端上报的执行结果及携带的URI信息后,可以后续在Delivered子树上直接发起执行Install操作,省去了重新下载的过程,减少了网络和终端的负担。
与前述的终端一样,实施例2也可以对应一种终端和DM服务器,该终端和DM服务器利用实施例2中描述的技术手段,能够实现实施例2的步骤。
实施例3为DM服务器ServerA选用直接下载方法,该实施例中,软件组件包的名称为ascendo,标识为PkgID_3,软件组件名为ascendo_1、ascendo_2和ascendo_3,标识分别为:ComID_1、ComID_2和ComID_3,当下载完成后,利用Install可执行节点执行安装业务,主要流程见图17。
步骤1701:DM服务器直接将软件组件包下发到Delivered/Pkg3/Data节点。
服务器ServerA在Delivered子树下生成软件组件包对应的Pkg3管理节点,并对该管理节点赋值,具体如软件组件名称,版本信息,参数等,如图18所示,DM服务器为该管理节点分配访问管理权限,如Delivered/Pkg3的访问管理权限为Get=*&Add=*&Replace=ServerA。Delivered/Pkg3/Operations的可执行子节点的访问管理权限为Get=*&Exec=ServerA。
步骤1702:DM服务器通过Inventory/Delivered/Pkg3/Operations/Install可执行节点指示终端执行安装业务,具体实现如以下程序所示:
<Exec>
<CmdID>5</CmdID>
<Correlator>abc123</Correlator>
<Item>
<Target>
<LocURI>./SCOMO/Inventory/Delivered/Pkg3/Operations/Install</LocURI>
</Target>
</Item>
</Exec>
终端在接收到所述安装指令后,对DM服务器的权限进行判断,若判断结果为该DM服务器的权限达到Inventory/Delivered/Pkg3/Operations/Install的访问管理权限(这里指具有Exec权限),则指示软件组件包的安装程序进行安装,同时给服务器返回Exec的状态码202,表示终端已成功接收数据并在处理中,若安装过程中需要参数,则可以从Inventory/Delivered/Pkg3/InstallPara中获得。
步骤1703:判断Deployed子树下是否有与该软件组件相同的软件组件的管理节点。
在本实施例中以ascendo_1为例,设定Deployed子树下没有软件组件名(Name节点)为ascendo_1的管理节点,则终端在Deployed子树下为ascendo_1生成管理节点以及其子节点,并为该管理节点以及其子节点赋值和分配访问管理权限,如图19所示。该分配访问管理权限的过程也可以与实施例1相同,例如:将./SCOMO/Inventory/Deployed/Component1节点的访问管理权限设置为与./SCOMO/Inventory/Delivered/Pkg3节点相同的访问管理权限,即为Get=*&Add=ServerA&Replace=ServerA。将./SCOMO/Inventory/Deployed/Component1/Operations的可执行可执行子节点的访问管理权限设置成与./SCOMO/Inventory/Delivered/Pkg3/Operations/Install节点的访问管理权限相同值,即为Get=*&Exec=ServerA。
步骤1704:向DM服务器上报安装结果,即Deployed/Component1中的信息,包括Deployed/Component1节点的URI,还包括NAME和/或ID。
安装响应消息的上报可以使用Generic Alert命令,其中上报的结果代码放在Generic Alert命令的Data元素中,所执行安装指令的URI携带在Source元素中,组件安装后的Deployed子树路径信息携带在Target元素中。软件组件名称信息和/或ID携带在Alert中MetaInf的可扩展元素EMI中,操作如以下程序所示:
<Alert>
<CmdID>6</CmdID>
<Data>1226</Data><!--Generic Alert-->
<Correlator>abc123</Correlator>
<Item>
<Source><LocURI>./SCOMO/Inventory/Delivered/Pkg3/Operations/Install
</Source>
<Target><LocURI>./SCOMO/Inventory/Deployed/Component1</LocURI>
</Target>
<Meta>
<Typexmlns=″syncml:metinf″>
org.openmobilealliance.softwarecomponent.OperationComplete
</Type>
<Format xmlns=″syncml:metinf″>text/plain</Format>
<Mark xmlns=″syncml:metinf″>critical</Mark>
<EMI xmlns=″syncml:metinf″>ComID_1</EMI><!--Deployed子树
上软件组件的标识(ID)-->
</Meta>
<Data>200</Data><!--Result Code-->
</Item>
</Alert>
EMI中要上报的信息可以为Name和/或ID。
与前述记载的终端一样,实施例3也可以对应一种终端和DM服务器,该终端利用实施例3中描述的技术手段,能够实现实施例3的步骤。
通过对上述实施例1、2、3、系统和终端的描述,可以获得以下优点:
1、由于可以在软件组件安装过程中支持参数,使得用户可以利用设备生成更为灵活的软件组件包,不用为每次安装生成特定的软件组件包,减少了服务器的压力,同时可以在软件包不变的情况下进行个性化的安装,使用户体验较好。
2、由于DM服务器只为自身指定生成的管理节点分配访问控制权限,而后续由终端生成的管理节点将无法保证设置访问控制权限或无法保证设置合理的访问控制权限而降低安全性的问题,因此,通过设定由终端生成的管理节点及其子节点的访问控制权限,使得只能由指定的设备对数据进行管理,提高了可靠性。
3、终端将软件组件包名称、软件组件名称和URI消息上报给DM服务器,使得DM服务器能够更加准确地识别软件组件,方便DM服务器实现后续的操作。
4、终端在生成管理节点时,要判断子树中是否已经存在同名的管理节点,减少了终端中软件组件的冗余,实现了终端中软件组件的更新、升级,保证了终端中的软件组件是最新版本。
5、对下载成功但安装失败的软件组件包进行处理,使得可以在以后对该软件组件包重新进行安装,减少了重新安装还需要重新下载的麻烦,减小了网络和服务器压力。
6、在生成软件组件包对应的管理节点时,该管理节点中包含了软件组件的信息,为后续安装成功后,生成软件组件对应的管理节点提供了方便。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。