CN105122209A - 从软件框架提供的网络服务 - Google Patents
从软件框架提供的网络服务 Download PDFInfo
- Publication number
- CN105122209A CN105122209A CN201480021476.1A CN201480021476A CN105122209A CN 105122209 A CN105122209 A CN 105122209A CN 201480021476 A CN201480021476 A CN 201480021476A CN 105122209 A CN105122209 A CN 105122209A
- Authority
- CN
- China
- Prior art keywords
- bundle
- framework
- service
- embedded device
- plug
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及用于由存储设备提供各种网络服务的方法和系统,其中,所述存储设备使用特定于存储设备的应用框架。因此,随着网络服务被使能,可以通过网络(例如,互联网或其他类型的网络)直接利用所述存储设备的各种特征来构建通信和事务。
Description
背景技术
在嵌入式的并因此资源受限的设备上进行更新以添加新的功能以及进行错误修正变得越来越必要。典型地,诸如网络附加存储(NAS)之类的存储设备被构建为专用计算机或设备。一般地,这样的设备使用低功耗硬件并且具有诸如LINUX之类的嵌入式操作系统,这样的设备被配置为专门作为存储设备。
如今,由于存储设备逐渐增加的复杂度,存储设备现在运行软件来实现它们的各种特征并且管理它们与其他设备的交互。不幸的是,针对每个存储设备的软件都是自定义构建的并且与操作系统集成在单个的封装中。这种形式的软件开发是困难的并且经常导致错误等。
当前在嵌入式设备中使用的软件架构,使得开发者和供应商难以写出以一致的方式与其他应用(例如,运行于该存储设备上的应用)交互的应用。以不同语言来编写应用以及更新程序代码,对开发者和供应商来说也是困难的。
因此,期望的是,提供一种针对嵌入式设备特别是存储设备的不同的架构。
附图说明
现在将参考以下附图来描述实施本发明的各种特征的系统和方法,在附图中:
图1示出了已被配置为网络附加存储系统以示出本发明的实施例的实施方式的示例性数据存储设备。
图1A示出了根据本发明的实施例的框架的示例性部署。
图2示出了根据本发明的实施例的框架的示例性架构。
图3示出了根据本发明的实施例的框架的示例性结构单元。
图4示出了示例性包。
图5示出了清单(manifest)及其头部的示例性结构。
图6示出了由一个实施例的框架所使用的示例性解析器。
图7示出了由本发明的一个实施例所使用的示例性服务对象。
图8示出了由一个实施例中的框架所使用的示例性服务观察器。
图9示出了一个实施例中的框架的示例性状态图。
图10示出了在一个实施例的框架中使用的示例性解析器。
图11示出了示例性捆绑包(bundle)状态图。
图12示出了在一个实施例的框架中使用的示例性服务对象。
图13示出示例性服务观察器对象。
具体实施方式
当前在嵌入式设备中使用的软件架构,使得开发者和供应商难以写出以一致的方式与其他应用(例如,运行于该存储设备上的应用)交互的应用。以不同语言来编写应用以及更新程序代码,对开发者和供应商来说也是困难的。因此,期望的是,提供一种针对嵌入式设备特别是存储设备的不同的架构。
实施例涉及用于针对嵌入式系统的跨平台框架的方法和系统。该框架实现了能够被实施在各种平台上的插件架构,所述各种平台包括诸如存储设备之类的嵌入式设备。该框架使得能够以模块化方式创建针对应用的部件,这些部件能够被聚集在一起并且能够整体地或部分地递增升级。一个实施例提供了针对网络附加存储或其他存储设备的框架。该框架为软件的模块(例如,插件)提供标准化的结构以在嵌入式系统上实施各种特征。在一些实施例中,该框架基于本地代码,所述本地代码被编译以用于运行嵌入式设备,并因此能够实质上支持编写针对该框架的应用和插件所使用的任何编程语言。此外,该框架支持以任一本地代码(例如,C++)编写的软件模块与各种客户端之间的互操作性。在一些实施例中,该框架可以支持以解释型代码编写的应用和插件,例如Java客户端及插件。
该框架提供抽象层并使得在诸如存储设备之类的嵌入式设备上运行的代码模块化、可配置。因此,各种嵌入式设备产品能够配置有不同的特征。在一些实施例中,框架还对供应哪些插件进行修改。
由框架所提供的一致的编程模型帮助捆绑包(bundle)开发者处理在很多不同维度中的可扩展性问题。框架可以在各种设备上运行,这些设备的不同的硬件特性可能影响服务实现的多个方面。由框架所提供的一致接口能够保证框架所支持的软件部件能够被混合和匹配并且仍然带来稳定的系统。
例如,框架允许捆绑包(bundle)通过框架服务注册表而在运行时选择可用的实现方式。捆绑包可以注册新的服务、接收关于服务状态的通知、或查找适合于设备的当前能力的已有服务。框架的这个方面使得安装的捆绑包在部署之后是可扩展的:即,可以安装新的捆绑包以添加特征或者可以修改和更新已有的捆绑包而不需要重新启动系统。
在一个实施例中,使用诸如C++之类的本地程序代码来实现框架。框架的本地实现方式提供了若干优点。可以利用标准的机制来实现模块的动态加载。当模块被加载时,可以对模块之间的依赖性进行解析。框架还可以提供关于能力和存储器需求的显著优势。一些实施例使用开放的标准和本地二进制代码的执行并且能够在任何标准POSIX系统上运行。
实施例使得能够基于共享的目标文件在运行时动态加载代码并且控制代码模块(例如,导入/导出包)的可见性。框架提供加载相同包的不同版本的机制,并且如果期望,框架支持面向对象的代码以及诸如Java归档文件格式(JAR)之类的不同的文件格式来对捆绑包(bundle)进行封装和部署。在一些实施例中,框架允许在运行时更新捆绑包。
此外,实施例提供了生命周期层(例如,解析/启动/停止/更新)、服务层(即,服务、服务监听器、过滤器)的功能,并且支持参与软件定义的存储的各种设备。
在一个实施例中,本发明的框架提供了一种异步的、事件驱动的、消息传递的框架,该框架实现了适合于跨平台和产品线使用的插件架构。该框架使得能够创建沿着软件工厂线开发的部件,所述软件工厂生产被设计为聚集成产品的软件部分,以及升级到现有产品和现有产品的未来版本。
现在将对本发明的某些实施例进行描述。这些实施例仅以示例的形式给出,而并不是想要限制本发明的范围。事实上,本文所描述的新颖的方法和系统可以以各种其他方式实现。此外,可以对本文所描述的方法和系统的形式进行各种省略、替换和改变而不偏离本发明的精神。为了对实施例中的一些进行说明,现在将参考附图。
图1示出了实施例可以在其中实现的系统100。出于说明的目的,示例性的框架被示出为在网络附加存储(NAS)上实施。然而,那些本领域的技术人员将会意识到,任何类型的嵌入式设备或能够运行框架的设备均在本发明的原理之内。
如所示出的,系统100可以包括客户端或主机设备102、网络104、以及存储设备106。存储设备106可以被实施为具有多个存储介质108的NAS设备。现在将对这些部件进行进一步的描述。
主机设备102指的是用于访问由存储设备106共享的文件的任何计算设备。例如,主机设备102可以是个人计算机、膝上型计算机、平板计算机、移动电话等。这样的设备对那些本领域技术人员而言是公知的。
网络104提供用于在主机设备102和存储设备106之间通信的通信设施。网络104可以包括各种部件和网络元件,例如,路由器、交换机、集线器等。
网络104可以支持各种通信协议,例如,以太网、互联网协议等。此外,网络104可以被实施为有线网络或无线网络或其组合。
存储设备106指的是能够提供或共享对文件的访问的任何数据存储设备。存储设备106可以被实施为硬盘驱动器、固态驱动器、混合驱动器、直接附加存储设备等。
在本公开中,以示例的方式,存储设备106被实施为NAS设备。作为NAS设备,存储设备106提供文件级访问并且通过网络104与主机设备102共享文件。存储设备106可以使用已知的硬件、固件和软件来实现。例如,作为NAS设备,存储设备106可以被实施为被配置为通过网络104来存储和供应文件的专用计算机或设备。在一些实施例中,存储设备106包括处理器,例如,ARM、PowerPC、或MIPS处理器。
存储介质108指的是存储设备106在其上存储数据的介质。例如,存储介质108可以包括磁盘或磁性介质、固态存储器、光学介质等。如所示出,出于容量和冗余的目的,存储设备106可以包括多个存储介质108。例如,作为NAS设备,存储设备106可以支持各种RAID级别。
控制器110表示控制存储设备的操作的硬件和软件。在一些实施例中,控制器110还可以包括用来补充其操作的一个或多个其他部件,例如,片上RAID控制器、存储器或磁盘缓存等。如下文将要进一步描述的,控制器110可以执行操作系统112以及框架114。
操作系统112表示由控制器110执行的软件以管理硬件资源以及向在存储设备106上运行的应用提供诸如网络服务之类的各种服务。控制器110可以支持各种操作系统,例如,那些本领域技术人员已知的UNIX、LINUX、Windows等。例如,在一个实施例中,控制器110可以基于操作系统运行,所述操作系统例如是Plan9、UNIX、LINUX等。
此外,在一个实施例中,存储设备106包括为软件的模块(例如,插件)提供标准化结构的框架114,以在存储设备106上实现各种特征。在一些实施例中,该框架可以利用诸如C++之类的本地代码来实现,并且因此能够虚拟地支持任何编程语言。此外,该框架支持以任一本地代码(例如,C++)编写的软件模块与以解释型代码(例如,Java)编写的软件模块之间的互操作性。例如,在一个实施例中,Java运行时环境(“JRE”)可以被安装在存储设备106上并且在框架114上执行以支持基于Java的软件和插件。
实施例提供了能够在任何标准的POSIX兼容的操作系统(例如,LINUX)上运行的框架114。实施例使用共享对象来提供软件模块化。例如,每个包(即,C++命名空间)可以由采用可执行和链接格式或者可执行可链接格式(“ELF”)的共享对象文件来表示。这允许利用dlopen和ELF机制在运行时实现在捆绑包之间对包的动态导入和导出。在一些实施例中,框架114可以支持其他类型的文件格式,例如,通用对象文件格式(“COFF”)、Win32、对象模块格式(“OMF”)等。
捆绑包可以被实施为ZIP归档,其包括标准化清单和表示包的共享对象文件。在清单中没有任何导入的情况下,不同捆绑包的共享对象可以是彼此隔离的。
为了建立共享对象之间的可见性,框架114的运行时系统在根据指定的导入对可用的包进行解析后,向所述共享对象文件添加ELF依赖性。因此,在一些实施例中,代码共享功能是由高度成熟的标准ELF机制提供的。
此外,框架114的实施例提供生命周期层功能(例如,捆绑包的启动、更新、和停止)。例如,框架114可以利用服务注册表来实现服务层,服务注册表包括对RFC1960兼容过滤器的支持。最后,实施例通过提供框架、捆绑包以及服务监听器来支持事件和监听器的概念。
在一个实施例中,框架114采用消息传递接口。例如,框架114可以采用BOOST.MPI库。BOOST.MPI可以充当消息传递接口(MPI)的包装。BOOST.MPI是用于在高能力并行应用中的消息传递的库。BOOST.MPI程序是能够或者经由发送和接收单独的消息(点到点通信)或者通过作为一个组协调(聚合通信)来进行通信的一个或多个进程。与线程环境中的通信或使用共享存储器库的通信不同,BOOST.MPI进程能够遍布可能具有不同操作系统和底层架构的很多不同的机器。
BOOST.MPI是到标准消息传递接口(MPI)的C++友好的接口,用于高能力、分布式计算的最常用的库接口。MPI定义了从C、Fortran和C++可用的库接口,针对C、Fortran和C++有很多MPI实现方式。
BOOST.MPI库提供了到MPI的可替代的C++接口,其更好地支持现代C++开发风格,包括完全支持用户定义的数据类型和C++标准库类型、用于聚合算法的任意函数对象、以及使用现代C++库技术来维持最大效率。
在一个实施例中,BOOST.MPI被配置为支持MPI1.1中的功能。BOOST.MPI中的抽象允许对底层CMPI库的调用。
例如,在一个实施例中,BOOST.MPI用于支持:
通信器:BOOST.MPI支持对MPI通信器的创建、解构、复制和拆分,以及对进程组的操作。
点对点通信:BOOST.MPI利用阻塞(blocking)和非阻塞(non-blocking)接口,支持利用发送和接收操作对原始的数据类型和用户定义的数据类型的点对点通信。
聚合通信:BOOST.MPI支持聚合操作,例如,对内建数据类型和用户定义的数据类型以及函数对象二者进行约减和聚集。
MPI数据类型:BOOST.MPI可以使用例如BOOST序列化库来针对用户定义的类型建立MPI数据类型。
将结构与内容分离:BOOST.MPI可以传送复杂数据结构(列表、图等)的形状(或“骨架”)并且然后独立地传送它们的内容。这种设施对大的、静态数据结构中的数据需要被多次传输的情况进行了优化。
在实施例中,可以或者通过BOOST.MPI的本地C++绑定,或者通过诸如Python接口之类的可替代物来访问BOOST.MPI。在另一实施例中,框架114可以利用通信协议,诸如由Plan9操作系统提供的9P。
框架114提供通用的、安全的、以及托管(managed)的框架,该框架支持对被称为捆绑包(bundle)的可扩展和可下载的应用的部署。框架114以动态和可扩展的方式来管理捆绑包的安装和更新。为了实现这一点,框架114对捆绑包和服务之间的依赖性进行详细地管理。框架114为捆绑包开发者提供利用平台独立性和动态代码加载能力所必要的资源,以便于容易地开发针对能够被大规模地部署的小型存储器设备的服务。
在一个实施例中,框架114使得存储设备106能够支持和实施软件定义的存储。特别地,框架114提供了平台和通信协议,通过该平台存储设备106可以将它的存储容量虚拟化,通过该通信协议独立地或与其他存储设备(未示出)合作地在存储设备106上建立虚拟化的存储。例如,框架114可以充当在存储设备106上运行的平台以递送块和文件存储服务。在一个实施例中,框架114为存储设备106的底层硬件提供抽象层。此外,框架114可以为各种存储管理函数提供一个或多个API,所述存储管理函数例如卷管理(volumemanagement)、存储配置(storageprovisioning)服务、RAID配置等。
图1A示出了框架114的示例性部署实现方式。框架114使用捆绑包(bundle)来部署一个或多个服务。捆绑包包括库、资源,并且另外包括描述捆绑包的内容的清单文件。在C中,库仅包含由源编译出的对象。在先前技术中,添加资源和清单是不可能的。因此,在实施例中,使用zip文件,库和资源被打包在zip文件中。
图2示出了框架114的示例性架构。如所示出,框架114可以包括以下层:捆绑包(bundle)层200、执行环境层202、模块层204、生命周期层206、服务层208、以及安全层210。现在,将对框架114的这些部件进行进一步地描述。
捆绑包层200中的捆绑包为请求框架114的各种服务的插件以及其他插件提供程序代码。在实施例中,框架114定义模块化的单元,称作捆绑包。捆绑包包括二进制文件和其他资源,二进制文件和其他资源一起能够向终端用户提供功能。捆绑包能够以明确定义的方式共享捆绑包能力和捆绑包需求。因此,在框架114中,捆绑包是用于部署应用的实体。
如所提到的,捆绑包(bundle)可以被部署为ZIP文件。ZIP文件被用于以标准的基于ZIP的文件格式来存储应用以及它们的资源。捆绑包是包括提供某种功能所必须的资源的ZIP文件。这些资源可以是HTML文件、帮助文件、图标等。
捆绑包(bundle)还可以包括描述ZIP文件的内容并且提供关于捆绑包的信息的清单文件(manifestfile)。该文件使用头部(header)来指定信息,框架114使用该信息来正确地激活捆绑包。例如,清单文件声明对在捆绑包能够运行之前必须对捆绑包可用的其他资源的依赖性。
一旦捆绑包被启动,它的功能就被提供并且服务被导出到安装在框架114中的其他捆绑包。捆绑包可以包括确定捆绑包如何执行的各种部件。例如,捆绑包激活策略规定一旦捆绑包被启动,框架应该如何激活捆绑包。在以下后续描述中对可能的头部的一些实施例进行描述。捆绑包激活器(bundle-activator)头部指定用于启动和停止该捆绑包的类的名称。捆绑包头部可以保持类别名(categoryname)的逗号分隔的列表。
另一个头部定义包括类和资源的捆绑包内的ZIP文件路径名或目录的逗号分隔的列表。版本(version)头部定义捆绑包已经根据序列化版本被发布。本地代码(nativecode)头部包括对包含在该捆绑包中的本地代码库的说明。
符号名称(symbolicname)头部指定该捆绑包的非本地化(non-localizable)的名称。捆绑包的符号名称与版本一起标识唯一的捆绑包,但在框架中该捆绑包能够被多次安装。
更新(update)头部指定URL,在该URL该捆绑包的更新是可获取的,例如,以ZIP文件的形式。动态导入包(dynamicimport-package)头部包括在需要时应该被动态地导入的包名称的逗号分隔的列表。
导出包(export-package)头部包括对被导出的包的声明。需求捆绑包(require-bundle)头部指定来自另一捆绑包的所有被导出的包都必须被导入,有效地请求另一捆绑包的公共接口。需求能力(require-capability)头部指定捆绑包需要其他捆绑包来提供能力。
在一个实施例中,执行环境层202建立用于运行捆绑包200的执行环境。
在一个实施例中,模块层204定义模块化模型。模块层204可以具有针对捆绑包间共享或对其他捆绑包隐藏包的严格规则。在模块层204中,由于捆绑包依赖于一个或多个外部实体。捆绑包能够需求其他捆绑包、执行环境、特定的窗口系统、DLL或共享库、扩展器(extender)、特定外围设备等。一旦捆绑包启动,则假定这些依赖性被满足。捆绑包能够经由对由运行时环境或其他捆绑包所提供的能力的需求来表达它们的外部依赖性。例如,BOOST提供易于使用的接口(诸如MPI1.1)并且提供使用任何版本的能力。
能力(capability)是在特定命名空间中的属性集合,而需求(requirement)是过滤器表达式(filterexpression),该过滤器表达式断言它们相对应的命名空间的能力的属性。当存在与过滤器相匹配的至少一个能力时,需求被满足。命名空间还提供将需求与能力相匹配的语义。在捆绑包(bundle)的需求被满足时,捆绑包(bundle)可以仅提供它们的能力,即,需求是可传递的。
在一个实施例中,生命周期层206向捆绑包(例如,捆绑包层200中的捆绑包)提供生命周期接口,例如,应用程序接口(API)。该API为捆绑包提供运行时模型。它定义捆绑包如何被启动和停止以及捆绑包如何被安装、更新和卸载。此外,它提供全面的事件API以允许管理捆绑包来控制服务平台的操作。
在一个实施例中,服务层208为捆绑包开发者提供动态、简洁和一致的编程模型,通过将服务规范所使用的API从其实现中解耦(de-coupling)来简化对服务捆绑包的开发和部署。实施例可以支持任何种类的服务,包括网络服务、网络应用服务器、网络服务器等。该模型允许捆绑包开发者仅使用服务的接口说明来绑定到服务。对针对特定需求或根据特定供应商所优化的特定实现的选择,能够因此被推迟到运行时。
在服务层208中,捆绑包被建立在根据共享的服务注册表可用的一组协同服务的周围。这样的服务由其服务接口语义地定义并且被实施为服务对象。可以利用尽可能少的实现细节来规定服务接口。
服务对象可以被捆绑包拥有并且在捆绑包内运行。在一个实施例中,该捆绑包必须利用框架服务注册表来注册该服务对象以使得该服务的功能对框架控制下的其他捆绑包可用。
在一个实施例中,框架114管理拥有该服务的捆绑包和使用该服务的捆绑包之间的依赖性。例如,当捆绑包停止时,由该捆绑包向框架114注册的所有服务必须自动地被注销。框架114将服务映射到它们的底层服务对象,并且提供简单但强大的查询机制,以使得捆绑包能够请求其所需要的服务。框架114还提供了事件机制,以使得捆绑包能够接收服务被注册、被修改、或被注销的事件。
在一个实施例中,安全层210定义安全封装格式以及与框架114的运行时交互。在一个实施例中,安全层210基于X.509v3数字证书模型。被认可的捆绑包的清单包括最小的必需的能力和授权。可以使用私钥(privatekey)来对清单进行数字签名,并且利用驻留在设备固件中的公钥(publickey)来对其进行认证。数字签名是对签名者进行验证并且保证内容在被当事人签名后没有被修改的安全特征。在一个实施例中,数字签名基于公钥密码学(publickeycryptography)。在一个实施例中,在框架114上运行的插件被受信任的实体签名,所述实体例如存储设备106的制造商。各种实体中的一个或多个可以对插件进行签名以增强插件的安全性和/或认证。另外,一个或多个实体的公钥可以被永久地存储在存储设备106上。例如,公钥可以被烧入控制器110的固件中。在一个实施例中,安装在存储设备106上的中间证书包括各种元数据。
图3示出了根据本发明的实施例的框架的示例性结构要素。该框架形成支持对被称为捆绑包的可扩展和可下载的应用进行部署的通用、安全并且托管的框架的核心。其可以被实施为单件并且使用指向实现的指针术语(PIMPLidiom)来将实现与框架API描述自身分离。下文是框架的结构要素的一些示例性描述。
示例性框架API
std::vector<std::shared_ptr<bundle_t>>get_bundles():返回由shared_ptr构成的向量,该向量指向当前安装在框架内的捆绑包的全部;
std::shared_ptr<bundle_t>get_bundle(bundle_id_t):返回共享指针,该共享指针指向由唯一标识符指定的捆绑包对象。
service_registration_tregister_service
service_reference_tget_service_reference(std::string)
图4示出了捆绑包的示例性包。捆绑包是在正常应用编程中可见的实体。下面提供一个示例。
bundle.std::shared_ptr<bundle_t>get_bundle():返回指向该捆绑包对象的共享指针。
bundle_identifier_tget_bundle_id()
std::stringget_symbolic_name()
std::stringget_vendor()
bundle_version_tget_version()
清单
每个捆绑包对象包括清单对象,该清单对象提供到作为该捆绑包的一部分交付的清单文件的内容的访问。
示例性清单API
const::string&bundle_copyright().
conststd::string&bundle_contact_address().
conststd::string&bundle_license().
voidparse_manifest(conststd::string&path).
voidparse_manifest(boost::filesystem::filebufinfile).
conststd::string&bundle_name().
conststd::string&symbolic_name().
const::string&bundle_vendor().
manifest_version_tmanifest_version().
std::vector<std::string>require_bundle():返回具有可选属性断言的所需的捆绑包符号名称(symbolic-name)的列表。
std::vector<std::string>provide_capability():指定捆绑包提供以一个或多个命名接口的形式的能力的集合。
std::vector<std::string>require_capability():指定捆绑包需求以一个或多个命名接口的形式的能力的集合。
图5示出了可以由框架114使用的清单及其头部的示例性结构。插件捆绑包在清单文件中承载关于其自身的描述性信息,清单文件包括在捆绑包档案中,例如,在名称META-INF/MANIFEST.MF之下。在一个实施例中,在以下部分中列出所规定的清单头部。
清单头部工厂
在一个实施例中,清单头部工厂类被实施为单件。其目的是对基于清单头部名称的特定manifest_header对象进行实例化。该类使得能够进行多态分派(polymorphicdispatch),并且如果需要新的头部类型,则不需要改变任何现有代码就可以添加新的头部类型。下面提供了一个示例:
示例性清单头部工厂API
staticmanifest_header_factory&instance()
voidregister_header()
值得注意的是,每个清单头部处理器均注册函数
voidunregister_header()
图6示出了一个实施例的框架所使用的示例性解析器。捆绑包解析器使用包括在清单头部中的捆绑包需求(bundle_requirement)和捆绑包能力(bundle_capability)信息来识别针对任意给定捆绑包的“最佳匹配”。如果发生“无法解析”冲突,则解析器将创建“最佳”候选的重命名版本,对其进行解析,并且对elf中原始的捆绑包依赖性进行修改以反映“新”的库名称。然后该捆绑包的修改版本将被加载并在框架退出时被销毁。
图7示出了本发明的一个实施例的框架所使用的示例性服务对象。该服务对象由捆绑包所拥有并且在捆绑包内运行。该捆绑包必须利用框架服务注册表来注册该服务对象,以使得服务的功能对框架服务API(Framework.ServicesAPI)控制下的其他捆绑包可用。下面提供了一个示例:
std::shared_ptr<?>get_service(shared_ptr<service_reference>)
其中,服务接口(ServiceInterface):服务接口是对服务的公共方法的说明。
图8示出了一个实施例中的框架所使用的示例性服务观察器。
图9示出了一个实施例中的框架的示例性状态图。在退出已安装(INSTALLED)状态之后,以下动作可以发生:
事件处理被使能;
安全管理器被配置,
任何被安装的捆绑包处于已安装(INSTALLED)状态,以及
框架服务可用。
已解析状态
当框架处于已解析(RESOLVED)状态时,它是可操作的但是它的捆绑包都不是活动的。只要框架处在这个状态,新的捆绑包就能够被安装,而没有任何已安装代码的干扰。现有的捆绑包必须全部处在已安装(INSTALLED)状态。需要框架启动(framework_start)事件来将框架移动到启动(STARTING)状态。
可替代地,可以存在这样一个状态,其中捆绑包被解析,以及另一个状态,其中(在关闭期间)先前构建的资源在转变回框架已安装(INSTALLED)状态之前被销毁。
图10示出了一个实施例的框架中所使用的示例性解析器。
启动
在启动(STARTING)状态,框架启动所有安装的捆绑包。一旦所有捆绑包已经被启动,框架转变到活动(ACTIVE)状态。
活动
在框架活动状态,先前被记录为被启动的所有安装的捆绑包必须处于捆绑包活动(ACTIVE)状态。
停止
当框架被关闭时,它首先进入框架停止(STOPPING)状态,在该状态中,所有处于活动(ACTIVE)状态的捆绑包被停止。然后框架转变到已解析状态,在该状态中,资源被销毁。
图11示出了示例性的捆绑包的状态图。
已安装
捆绑包已经被成功地安装。当捆绑包被安装时,它被存储在框架的永久性存储中并且保持在其中直到它被明确地卸载为止。不论捆绑包已经被启动或停止,它必须被记录在框架的永久性存储中。每当框架启动时,已经被永久地记录为启动的捆绑包必须被启动,直到捆绑包被明确地停止为止。
已解析
捆绑包需要的所有类都是可用的。该状态表明捆绑包或者准备好被启动或者已经停止。
启动
捆绑包正在被启动。bundle_activator.start方法将已经被调用但是还没有返回。
活动
捆绑包已经被成功地激活并且正在运行。其bundle_activator.start方法已经被调用并且已经返回。
停止
捆绑包正在被停止。bundle_activator.stop方法已经被调用但是该停止方法还没有返回。
已卸载
捆绑包已经被卸载。它不能移动到其他状态。
图12示出了一个实施例的框架中所使用的示例性服务对象。服务可以由其服务接口语义地定义并且被实施为服务对象。服务接口被命名和版本化,并且由操作组成。
服务对象由捆绑包拥有并且在捆绑包内运行。该捆绑包必须利用框架服务注册表来注册该服务对象,以使得该服务的功能对框架控制下的其他捆绑包可用。
拥有该服务的捆绑包和使用该服务的捆绑包之间的依赖性由框架管理。框架使用解析器将服务映射到它们的底层服务对象。框架还提供事件机制,以使得捆绑包能够接收来自被注册的服务的事件。图13示出了示例性服务观察器对象。
上文所公开的特定实施例的特征和属性可以以不同的方式组合以形成另外的实施例,所有这些实施例全部落入本公开的范围内。尽管本公开提供了特定的实施例和应用,但是其他实施例对于那些本领域普通技术人员来说是显而易见的,包括没有提供本文所阐述的全部特征和优点的实施例也在本公开的范围内。因此,旨在仅通过参考所附的权利要求来定义本公开的范围。
Claims (17)
1.一种被配置为提供网络服务的嵌入式设备,所述嵌入式设备包括:
应用框架,其提供库的集合,所述库提供到运行在所述嵌入式设备上的操作系统的服务的访问;
网络服务器,其经由应用程序接口耦合到所述应用框架;以及
插件的集合,所述插件经由到所述应用框架的应用程序接口和所述网络服务器来提供网络服务。
2.根据权利要求1所述的嵌入式设备,其中,所述嵌入式设备是网络附加存储设备。
3.根据权利要求1所述的嵌入式设备,其中,所述插件的集合是Java插件。
4.根据权利要求1所述的嵌入式设备,其中,所述应用框架提供针对所述网络服务的安全服务。
5.根据权利要求1所述的嵌入式设备,其中,所述应用框架提供针对所述网络服务的事务管理服务。
6.根据权利要求1所述的嵌入式设备,其中,所述应用框架从作为插件运行在所述框架上的网络服务器来提供网络服务。
7.一种通过运行框架的嵌入式设备来提供网络服务的方法,所述方法包括:
提供库的集合,所述库提供到运行在所述嵌入式设备上的操作系统的服务的访问;
经由应用程序接口来运行作为所述应用框架的插件的网络服务器;以及
经由到所述应用框架的应用程序接口和所述网络服务器来提供网络服务。
8.根据权利要求7所述的方法,还包括基于到所述框架的Java插件来提供网络服务。
9.根据权利要求7所述的方法,还包括提供针对所述网络服务的安全服务。
10.根据权利要求7所述的方法,还包括提供针对所述网络服务的事务管理服务。
11.根据权利要求7所述的方法,还包括从作为插件运行在所述框架上的Apache网络服务器来提供网络服务。
12.一种由嵌入式设备共享存储的方法,所述方法包括:
提供库的集合,所述库提供到在所述嵌入式设备上运行的操作系统的服务的访问;
经由应用程序接口来运行作为到应用框架的插件的块存储服务,所述块存储服务将来自所述嵌入式设备的存储空间进行虚拟化;以及
经由所述块存储服务来提供到所述嵌入式设备上的所述存储的块的访问。
13.根据权利要求12所述的方法,还包括经由所述应用框架来提供用于供给虚拟化的存储空间的应用程序接口。
14.根据权利要求12所述的方法,还包括经由所述应用框架来提供用于将存储卷映射到所述存储设备中的磁盘上的第二应用程序接口。
15.根据权利要求12所述的方法,还包括经由所述应用框架来提供用于基于从另一设备接收的需求的集合来供给虚拟化的存储空间的第二应用程序接口。
16.根据权利要求15所述的方法,还包括经由所述应用框架来提供用于基于来自其他设备的所请求的服务级别协议来供给所述虚拟化的存储空间的第二应用程序接口。
17.根据权利要求12所述的方法,经由由所述应用框架所提供的所述应用程序接口来提供到存储在所述存储设备上的文件的文件级访问。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361798362P | 2013-03-15 | 2013-03-15 | |
US61/798,362 | 2013-03-15 | ||
US13/925,769 | 2013-06-24 | ||
US13/925,769 US20140280767A1 (en) | 2013-03-15 | 2013-06-24 | Web services provided from software framework |
PCT/US2014/029861 WO2014145147A1 (en) | 2013-03-15 | 2014-03-14 | Web services provided from software framework |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105122209A true CN105122209A (zh) | 2015-12-02 |
Family
ID=51533587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480021476.1A Pending CN105122209A (zh) | 2013-03-15 | 2014-03-14 | 从软件框架提供的网络服务 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20140280767A1 (zh) |
CN (1) | CN105122209A (zh) |
HK (1) | HK1218011A1 (zh) |
WO (1) | WO2014145147A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111433732A (zh) * | 2018-06-30 | 2020-07-17 | 西部数据技术公司 | 在对等存储设备上具有托管服务的多设备存储系统 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9450820B2 (en) * | 2014-02-26 | 2016-09-20 | International Business Machines Corporation | Dynamic extensible application server management |
US9569105B2 (en) * | 2014-06-18 | 2017-02-14 | Mediatek Inc. | Method for managing virtual control interface of an electronic device, and associated apparatus and associated computer program product |
US10866787B2 (en) * | 2018-12-21 | 2020-12-15 | American Express Travel Related Services Company, Inc. | Pluggable framework |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2359382A1 (en) * | 2001-10-19 | 2003-04-19 | Intrinsyc Software, Inc. | Method of providing web services on embedded device |
US20040153558A1 (en) * | 2002-10-31 | 2004-08-05 | Mesut Gunduc | System and method for providing java based high availability clustering framework |
US20080295110A1 (en) * | 2007-05-23 | 2008-11-27 | Fabrizio Muscarella | Framework for Startup of Local Instance of Remote Application |
US8458612B2 (en) * | 2007-07-29 | 2013-06-04 | Hewlett-Packard Development Company, L.P. | Application management framework for web applications |
US9888092B2 (en) * | 2008-04-28 | 2018-02-06 | Oracle International Corporation | System and method for executing third party module with web servers |
US8676848B2 (en) * | 2010-06-09 | 2014-03-18 | International Business Machines Corporation | Configuring cloud resources |
US8688660B1 (en) * | 2010-09-28 | 2014-04-01 | Amazon Technologies, Inc. | System and method for providing enhancements of block-level storage |
US20120324418A1 (en) * | 2011-06-20 | 2012-12-20 | Chad Gerid Fallon | Software Application Framework Using Microsoft SharePoint |
-
2013
- 2013-06-24 US US13/925,769 patent/US20140280767A1/en not_active Abandoned
-
2014
- 2014-03-14 CN CN201480021476.1A patent/CN105122209A/zh active Pending
- 2014-03-14 WO PCT/US2014/029861 patent/WO2014145147A1/en active Application Filing
-
2016
- 2016-05-24 HK HK16105889.5A patent/HK1218011A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111433732A (zh) * | 2018-06-30 | 2020-07-17 | 西部数据技术公司 | 在对等存储设备上具有托管服务的多设备存储系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2014145147A1 (en) | 2014-09-18 |
HK1218011A1 (zh) | 2017-01-27 |
US20140280767A1 (en) | 2014-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11023248B2 (en) | Assured application services | |
CN106537338B (zh) | 自扩展云 | |
JP6329547B2 (ja) | クラウドコンピューティング環境で使用するサービス管理エンジンを提供するためのシステムおよび方法 | |
Konstantinou et al. | An architecture for virtual solution composition and deployment in infrastructure clouds | |
Seinturier et al. | A component‐based middleware platform for reconfigurable service‐oriented architectures | |
US9830135B2 (en) | Declarative and pluggable business logic for systems management | |
CN111984269B (zh) | 提供应用构建服务的方法及应用构建平台 | |
CN105144085A (zh) | 针对存储设备的软件框架 | |
CA3095629A1 (en) | Method for managing application configuration state with cloud based application management techniques | |
CN109983434A (zh) | 用于在操作系统的初始机器配置期间消除重启的系统和方法 | |
US20040225952A1 (en) | Architecture for distributed computing system and automated design, deployment, and management of distributed applications | |
US10057377B2 (en) | Dynamic resolution of servers in a distributed environment | |
US20130104126A1 (en) | System and method for dynamically creating machine images for instantiating virtual machines | |
US20170364844A1 (en) | Automated-application-release-management subsystem that supports insertion of advice-based crosscutting functionality into pipelines | |
CN105144093A (zh) | 使用基础设施管理代理供应的工作负荷部署 | |
WO2022037612A1 (zh) | 提供应用构建服务的方法及应用构建平台、应用部署方法和系统 | |
US10033790B2 (en) | Method for a connector providing transactional interoperability to multiple messaging providers to multiple application servers using the same implementation | |
US20070282801A1 (en) | Dynamically creating and executing an application lifecycle management operation | |
CN111984270A (zh) | 应用部署方法和系统 | |
CN102346669A (zh) | 一种基于元数据的移动终端安全中间件系统及方法 | |
CN105302563A (zh) | 移动应用服务的插件化方法及系统 | |
US20220255941A1 (en) | Method and System for Secure Container Application Framework | |
US20180136951A1 (en) | Policy enabled application-release-management subsystem | |
CN110908753A (zh) | 一种智能融合的云桌面服务器、客户端及系统 | |
US20130227572A1 (en) | Test device, a system, a program and a method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1218011 Country of ref document: HK |
|
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20151202 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1218011 Country of ref document: HK |