CN1879082B - 用于编译软件的方法和装置 - Google Patents

用于编译软件的方法和装置 Download PDF

Info

Publication number
CN1879082B
CN1879082B CN2004800334613A CN200480033461A CN1879082B CN 1879082 B CN1879082 B CN 1879082B CN 2004800334613 A CN2004800334613 A CN 2004800334613A CN 200480033461 A CN200480033461 A CN 200480033461A CN 1879082 B CN1879082 B CN 1879082B
Authority
CN
China
Prior art keywords
application
action
software
data
mbb
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.)
Expired - Fee Related
Application number
CN2004800334613A
Other languages
English (en)
Other versions
CN1879082A (zh
Inventor
曼纽尔·罗曼
纳伊姆·伊斯兰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Docomo Inc
Original Assignee
NTT Docomo Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NTT Docomo Inc filed Critical NTT Docomo Inc
Publication of CN1879082A publication Critical patent/CN1879082A/zh
Application granted granted Critical
Publication of CN1879082B publication Critical patent/CN1879082B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering

Abstract

描述了一种用于编译软件的方法和装置。在一个实施例中,该方法包括:获获取用于识别多个与所请求的功能性相关联的应用组件的软件结构数据;获取用于表示多个应用组件之间的交互规则的软件逻辑数据;在存储器中存储软件结构数据和软件逻辑数据;以及基于软件逻辑数据在运行时对多个应用组件的调用进行协调。

Description

用于编译软件的方法和装置
本申请涉及并要求于2003年11月12日提交的美国临时专利申请NO.60/519756以及于2004年3月26日提交的美国临时专利申请NO.60/556537的优先权益,其公开内容在此以引用的方式作为参考。
技术领域
本发明涉及数据通信;更具体地,本发明涉及编译软件。
背景技术
最近几年移动电话的功能得到了惊人的发展。最初仅存在语音传输。之后增加了短消息和网页浏览。后来,与自动售货机的交互以及多媒体消息发送变得可用。最近,视频会议、因特网访问以及与周围物理环境的交互变为可能。移动电话和无线使能手持设备的研发,以及无线网络的与日俱增正在改变着用户对计算机的传统理解。台式计算的概念正慢慢地发展为一种更加动态的模型。移动电话能够连接到无线网络,并且具有足够的处理能力来执行先前为服务器和工作站预留的任务。由此,移动电话成为用户的数字伙伴,其工作在单个用户环境下,并帮助用户处理日常事务。此外,渐增的无线传输速率使允许移动电话与分布式服务(例如,Web服务)进行交互,并且访问和共享丰富的多媒体内容这样的应用得到开发。
对于移动电话装置来说,软件服务的渐增的相关性要求移动电话设备的更加复杂的操作系统。这些操作系统为基于诸如Java(MIDLET2.0,DoJa,Personal Java)、C#、C和C++语言的应用开发提供支持。此外,这些操作系统为对开发分布式应用有帮助的中间件服务提供支持。渐增的移动电话的复杂化暗含着渐增的设备结构复杂度、更高的软件错误概率以及要求增强所运行的现有软件。例如,移动电话可配备有数字摄像机、支持图片的传送(已知的MMS)并且支持因特网连接,因特网连接允许浏览Web和WAP页面、下载并发送电子邮件以及访问在因特网上运行的服务。然而,在使用这些服务之前,用户必需配置他或她的终端。这种配置任务一般是冗长且易出错的处理,该处理包括呼叫客户支持中心并且遵从多条指令,这些指令包括输入像主机名、IP地址、用户名和密码这样的参数。
另外,随着软件平台的变大,软件出错的概率也随之变大。根据最近的研究,百分之十的移动电话由于软件问题被退回。对于全球12亿用户来说,这就意味着每年要有1.2亿部移动电话被退回。也就是说,1.2亿用户不得不将他们的终端返回到客户支持中心以便更新他们的电话。这对于运营商来说成本非常之高,而且会使移动电话用户感到失望。
此外,软件厂家会周期性地为现有的移动软件提供新的功能。例如,现有的邮件客户机可以为传统的附件提供支持,或者网页浏览器可以为多种操作脚本程序提供附加的功能。再者,为了软件更新而要求移动用户带他们的移动电话到客户支持中心对于用户来说不方便。
存在处理某些上述问题的解决方案。例如,某些现有的产品提供对运行时的移动电话的固件进行更新的功能。这些产品完成该功能是通将现有固件的映象与新固件的映象进行比较,计算两个映象之间的二进制差别,并且利用计算的差别更新现有映象的映象。然而,这种方法需要用户介入来实现更新,仅可以替换整个软件映象(而不是某些逻辑或结构属性),并且仅可以在系统停止时执行更新。
在美国专利No.4954941中描述了用于在运行时进行替换处理的示范性技术。该技术包括利用信令机制的登记处理。当信令机制产生信号时,相关的处理可将自身替换为更新的二进制映象。然而,在美国专利No.4954941中描述的技术不允许替换处理中的个别段,可能会造成正在处理的数据的中断,并且不能支持动态软件编译。另外,上述技术缺乏管理软件应用的状态、结构和逻辑的机制。
在美国专利No.5155847中描述了一种用于对驻留在客户设备集上的软件进行替换的示范性技术。通过使用为不同的客户设备存储有更新资料并且生成补丁的中央主机来更新软件。客户代理与主机相连,检索最新的补丁程序,并且将这些补丁程序安装到相关的客户设备上。然而,在美国专利No.5155847中描述的技术要求在更新处理期间要停止受影响的应用。另外,该技术不能够支持远程状态配置、动态软件编译和系统的结构与逻辑的检查和修改。
美国专利No.5359730描述了用于在运行时替换操作系统(OS)组件的技术。使用将OS组件的调用重新定向到相应的模块的硬件陷波器来替换OS组件。然而,在美国专利No.5359730中描述的技术依赖于平台,并且缺乏在运行时对动态软件编译和系统检查支持的能力。
美国专利No.5732275描述了一种用于对驻留在客户设备上的软件进行更新的技术。该技术依靠修改应用起动装置来使得在执行最新应用之前下载并安装该最新应用版本。在美国专利No.5732275中描述的技术的主要局限在于,仅在起动时才能够更新软件,而在软件运行期间不被更新。
发明内容
说明一种用于编译软件的方法和装置。根据一个方面,该方法包括:获得用于识别多个与被请求的功能性相关联的应用组件的软件结构数据,获得用于表明应用组件之间的交互作用规则的软件逻辑数据,将软件结构数据和软件逻辑数据存储到存储器中,并且基于软件逻辑数据在运行时间协调应用组件的调用。
根据附图和下面的详细描述,本发明的其它特征将显而易见。
附图说明
根据下面给出的详细描述和本发明多个实施例的附图来更加完整地理解本发明,然而,这不应该将本发明限制到特定的实施例,而是仅用于说明和理解。
图1是用于使动态构造可重构软件容易的系统的一个实施例的框图。
图2A是动态地构造软件的过程的一个实施例的流程图。
图2B是软件构造系统的一个实施例的框图。
图3A示出了微型构建块(MBB)的示范性操作。
图3B是MBB的结构的实施例的框图。
图3C示出了用于MBB的示范性XML描述文件。
图4A示出了示范性的解译动作。
图4B示出了示范性的编译动作。
图4C示出了用于提供对解译和编译动作进行限定的示范性XML描述文件。
图5A示出了示范性的域的结构。
图5B示出了示范性的域的分级编译。
图5C示出了用于提供对软件体系结构进行限定的示范性XML描述符文件。
图5D示出了用于提供对域的软件结构进行限定的示范性XML说明符文件。
图6是用于执行解译动作的过程的一个实施例的框图。
图7示出了解译动作的示范性执行。
图8A是域的一个实施例的框图。
图8B示出了示范性的数组容器(tuple container)。
图9-21示出了一组在域中使用的协议。
图22-24是用于将程序转换为可重构的软件的过程的一个实施例的流程图。
图25-27示出了示范性的可重构的通信中间件服务的结构。
图28是一种示范性计算机系统的框图。
具体实施方式
一种编译软件的方法和装置。在以下说明中,对大量的细节进行阐述。然而,对于本领域的技术人员,在没有这些特定的细节的情况下也可以实践本发明是显而易见的。在其它的例子中,以框图形式而非详细地示出了公知的结构和设备,以避免与本发明混淆。
以下详细描述中的某些部分是按照算法和对计算机存储器中数据比特的运算进行符号表示的形式来介绍的。这些算法描述和表示是数据处理领域中的技术人员使用的手段,以便最有效地将他们工作的内容传递给本领域的其他技术人员。在这里算法通常被认为是导致所希望结果的有条理的步骤序列。这些步骤要求对物理量进行物理运算。通常,尽管不是必需的,但是这些量采用能够被存储、传送、组合、比较、另外被运算的电或磁信号的形式。将这些信号称作比特、值、元素、符号、字符、术语、数字等有时证明是方便的,原则上是为了通用的原因。
然而,应当牢记的是,所有这些以及类似的术语将与适当的物理量相关联,并且仅仅是施加给这些量的方便标签。除非进行了特别的说明,否则根据下面的描述显而易见的是,应当理解在整个说明书中,利用了诸如“处理”或“计算(computing)”或“计算(caculating)”或“决定”或“显示”等术语的讨论是指计算机系统或类似的电子计算设备的动作或处理,该计算机系统或类似的电子计算设备对计算机系统中的被表示为物理(电子)量的数据进行计算并将其转换成在计算机系统存储器或寄存器或其他这样的信息存储、传输或显示设备中的被类似地表示为物理量的数据。
本发明还涉及用于执行在此的运算的装置。该装置可以针对所要求的用途被特定地构造,或者该装置可以包括由存储在计算机中的计算机程序选择性地激活或者重构的通用型计算机。这种计算机程序可以被存储在计算机可读存储介质中,诸如但不仅限于任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁或光卡,或者适于存储电指令的任何类型的介质,并且每一个都与计算机系统总线耦接。
这里介绍的算法和显示本来并不与任何特定计算机或其它装置相关联。可以根据这里的教导借助程序来使用各种通用系统,或者可以证明构建更加专用的装置来执行所需的方法步骤是方便的。对于多种这些系统所要求的结构将从下面的描述中显见。另外,并没有参照任何具体的编程语言来描述本发明。应当理解,多种编程语言可用于执行这里所描述的本发明的教导。
机器可读介质包括用于以机器(例如计算机)可读形式存储或发送信息的任何机制。例如,机器可读介质包括只读存储器(“ROM”);随机存取存储器(“RAM”);磁盘存储介质;光存储介质;闪存设备;电、光、声或者传播信号(例如,载波、红外信号、数字信号等)的其它形式。
概述
本发明的实施例提供了一种允许在运行时对软件进行汇编、重构、迁移和修改的机制。图1是便于动态地构造可配置软件的系统100的实施例的框图。
参照图1,系统100包括网络服务器106,网络102,和经由网络102与网络服务器106耦接的客户设备104。客户设备104是交互式通信设备。在一个实施例中,网络102是无线网络,而客户设备104是诸如无线电话、手掌大小的计算设备、PDA或者因特网能够应用的远程控制器的移动设备。这些无线设备可与网络服务器106进行无线通信,而且彼此都经由无线网络102。在一个另选实施例中,网络102为非无线网络(例如因特网),而客户设备104为诸如PC系统、PDA、客户电子设备等的非无线设备。在本领域中熟知的很多通信技术都可以用来实现在客户设备104和网络服务器106之间的通信。
软件构造系统108可以驻留到任意客户设备104上。另外,软件构造系统还可以驻留在网络服务器106上。软件构造系统108负责为由客户设备104的用户或者网络服务器106、或者由某些其它系统或者设备所请求的功能性编译软件(例如,应用或者服务)。软件构造系统108通过获取用于识别应用组件集(该组件集用于实现被请求的功能性)的软件结构数据、获取用于说明应用组件间交互规则的软件逻辑数据、将软件构造数据和软件逻辑数据存储在存储区域中、然后使用软件逻辑数据与软件结构数据所指定的应用组件的调用协作来编译软件。
在一个实施例中,应用组件(这里还称作微构建块或MBB)是系统中最小的可寻址功能单元。每个MBB接收输入参数集,执行可能影响其状态的动作,并且产生输出参数集。MBB不存储对其它MBB的引用。因此,如果MBB被新的MBB替换,则无需向其它MBB通知该替换。
通过在指定的存储区域中保持与软件结构的所有组件有关的信息以及与在这些组件之间的交互规则有关的信息,软件构造系统108可以使所编译的软件的结构和逻辑被明确地具体化。另外,在一个实施例中,软件构造系统108通过将各个组件的内部状态属性、内部软件执行状态(正在执行的组件的状态)和执行软件(例如用户选择和执行库)所需的配置参数保持在存储区域中,来明确地使被编译的软件状态具体化。
软件状态的明确具体化(explicit externalization)支持软件的可配置性(即提供修改软件内部状态的能力)。例如,客户支持代理可以与用户的移动电话相连,并且可以在无需用户介入的情况下修改软件参数以远程配置移动电话。其它可配置性的示例可以包括修改对远程对象、缓存器尺寸和网络参数的引用。软件状态明确具体化化允许在运行时检查软件的状态。而后,可以在用户正在访问应用时将该信息用于配置软件。
在一个实施例中,软件构造系统108提供一个用户界面,该用户界面允许指定的人浏览软件状态并且确定所希望的改变。
另外,软件状态、逻辑和结构的具体化支持软件的更新能力(即通过替换具体组件或者修改软件的执行逻辑来允许校正或改进软件的行为(behavior))。特别是,状态具体化允许修改系统中特定参数的值(例如缓冲器尺寸)以校正错误行为。结构具体化允许在运行时替换软件组件,以及逻辑具体化提供对软件组件之间的交互规则进行修改的功能。因此,在不需要重新启动系统的情况下就能够更新软件。这适用于使用任何类型的存储器(例如,电存储器、磁存储器、光存储器等)的系统。
在一个实施例中,由软件构造系统108提供的用户界面允许用户查看应用组件列表、应用组件之间的交互规则以及软件状态,而且还允许指定对任何一条这种数据的所希望的改变。
此外,软件的逻辑、结构和状态的明确具体化支持自动的软件升级。即,可以通过访问被明确地具体化的逻辑并且提出改变(例如,经由用户界面)来修改应用逻辑。而后,运行时的基础结构可以更新新的逻辑规则并且对软件的行为进行相应地修改。另外,可以通过更新明确具体化的软件结构并且修改软件的逻辑来为新组件添加新的交互规则或者编辑现有的交互规则,以不再使用被删除的组件,从而可以修改或者去除软件组件。
软件的动态构造
图2A是用于动态地构造软件的过程200的一个实施例的流程图。通过可能包括有硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如在通用计算机系统或者专用机器上运行)或者二者组合的处理逻辑来执行该过程。在一个实施例中,通过图1的软件构造系统108来执行过程200。
参考图2A,处理逻辑从接收用于识别一组与所请求的功能性相关联的应用组件的软件结构的定义开始(处理块202)。在一个实施例中,用XML来介绍软件结构的定义。另选地,可用其它各种计算机语言(例如,Java、HTML、C++等)来介绍软件结构的定义。在一个实施例中,应用软件组件可由用户选择。另选地,由处理逻辑或者一些其它系统根据所希望的功能性来选择应用组件。在一个实施例中,应用组件(或MBB)是系统中最小的可寻址功能单元。下面将结合图3A和3B更加详细地来描述MBB的一种示范性结构。
在处理块204,处理逻辑接收用于表示应用软件组件之间的交互规则的软件逻辑的定义。在一个实施例中,用XML来介绍软件逻辑的定义。另选地,可用其他各种计算机语言(例如,Java、HTML、C++等)来介绍软件结构的定义。在一个实施例中,通过用于指定MBB的执行顺序的动作来定义软件逻辑。在一个实施例中,通过解译动作来规定MBB的执行顺序。另选地,通过一个编译动作来规定MBB执行顺序。解译动作是一个确定的定向图(从各个节点仅有一种可能的转变),其中节点是表示出执行状态的MBB,而边限定了转变的顺序。编译动作是规定MBB调用顺序的代码段。下面将结合图4A到图4C来详细地讨论这些动作。
接下来,处理逻辑从软件结构的定义中提取用于识别各个所列的MBB的信息(处理块206),在一个实施例中,使用该信息来例示各个本地MBB(处理块208)。本地MBB是驻留在与软件构造系统108相同的设备上的MBB。
在处理块210,处理逻辑将MBB数据存储到存储区域中。在一个实施例中,MBB数据包括各个MBB的MBB识别符(例如MBB名)和MBB引用(本地的或者远程的)。在一个实施例中,概念“域”是指存储器区域中相关的MBB的集合,而且在MBB数据中被识别的各个MBB被登记到该域中(即分配唯一的名称)。在一个实施例中,本地对象是驻留到当前域中的对象。下面将结合图5A到5D详细地讨论这些域。
接下来,处理逻辑从软件逻辑定义中提取用于识别各个所列动作的信息(处理块212),在一个实施例中,使用这些信息来举例说明各个本地动作的动作对象集(处理块214)。在一个实施例中,动作对象存储有定向图,在该定向图中节点表示MBB而边限定了转变顺序。在一个实施例中,各个动作与运行时的动作状态对象相关联。动作使用该对象来存储输入和输出参数,下面将更加详细地对此进行讨论。
在处理块216,处理逻辑将动作数据存储到存储区域中。在一个实施例中,存储数据包括各个MBB的动作对象识别符(例如名称)和动作对象引用(reference)(本地的或者远程的)。在一个实施例中,在动作数据中识别的各个动作被登记到域中。
在一个实施例中,处理逻辑还提取用于识别各个MBB内部属性的信息(处理块218),并且将该信息存储到存储区域中(处理块220)。在一个实施例中,从通过各个MBB的处理逻辑接收的相关MBB的定义中提取MBB属性信息。另选地,从在处理块202接收的软件结构的定义中提取该信息。在一个实施例中,对于所有的MBB,MBB属性信息都是包括各个MBB属性的识别符和值。另外,MBB属性信息识别各个MBB的输入和输出参数。在一个实施例中,在MBB属性信息中被识别的各个属性被登记到域中。
在处理块222,处理逻辑基于软件逻辑对所列MBB的调用进行调整,下面将结合图6就此进行更加详细的讨论。
图2B是软件构造系统250的一个实施例的框图。在一个实施例中,软件构造系统包括加载器252、调度器254和数据存储器260。
加载器252负责获取用于识别实现被请求的功能性的MBB集的数据(MBB数据)、用于识别这些MBB之间的交互规则的数据(逻辑数据)、以及用于识别各个MBB的状态属性的数据(状态数据)。在一个实施例中,加载器252通过分析软件结构的定义、软件逻辑的定义以及各个相关MBB的定义来获取该组数据。可以从在相同设备(例如相同的移动设备)上运行的不同应用、或从服务器或者某些其他设备(例如某些其他移动设备)将这些定义下载到软件构造系统250。在另一实施例中,软件结构的定义包括各个MBB的状态信息,但没有使用MBB的定义。
在一个实施例中,加载器252还负责基于所获得的数据组来例示本地MBB和动作对象,并且负责将MBB数据、逻辑数据和状态数据存储到数据存储器260中。在一个实施例中,数据存储器260表示具有结构存储器、逻辑存储器和状态存储器的域,下面将结合图5A更加详细地就此进行描述。在一个实施例中,数据以名称和数值的数组形式被存储到数据存储器260中。特别是,MBB数据包括MBB名称/MBB引用数组,逻辑数据包括动作名称/动作引用数组,以及状态数据包括属性名称/属性值数组。
调度器254负责基于逻辑数据来调整MBB的调用。在一个实施例中,调度器254还负责保持并输出与所编译的软件的执行状态有关的信息。该信息用于例如指定当前被执行的动作、当前执行动作的MBB以及与该动作相关联的参数(例如动作的输入参数以及由该动作的MBB生成的参数)。
在一个实施例中,按照MBB来实现调度器254。因此,像任何其他MBB那样,在运行时可以访问并且可以修改调度器254的状态。因此,替换调度器254的能力允许开发者提供不同的执行语义。例如,他们能够选择支持透明的本地或远程MBB调用的调度器,从而简化了运行时的软件分割。另外,他们能够在每个MBB调用之后选择检测参数和状态的调度器,从而提供容错语义(fault tolerant semantic)。此外,他们能够对用于限定动作执行边界并且为动作执行次数提供保障的实时调度器进行选择。对与动态软件替换能力相组合的指定调度器进行选择的能力简化了自适应软件的构造,该自适应软件能够根据执行条件和外部要求修改其执行模型。
在一个实施例中,软件构造系统250还包括用户界面管理器256和修改调节器258。用户界面管理器256负责提供相关的用户界面并经由用户界面接收用户输入。用户界面可以指定对用户可用的应用的列表以及各个应用的组件的列表。用户可以使用该用户界面来选择应用组件并且请求将它们移到不同的设备。用户界面还可以指定应用分割方案的列表,并且允许用户选择其中一个方案来快速地定制应用。用户界面还可以允许用户浏览软件状态并且指定所希望的变化来重构软件。另外,用户界面允许用户查看应用组件列表、应用组件之间的交互规则及软件状态,并且指定对任意条这种数据的所希望的改变以便更新软件。此外,用户界面可以允许用户请求对软件逻辑或应用组件的改变以便升级软件。
修改调节器258负责处理对软件重构,软件更新或软件升级的请求,并且修改数据存储器260中的相关信息以响应这样的请求。在一个实施例中,修改调节器258与调度器254协作来实现这些改变。例如,修改调节器258可以请求调度器254对请求被修改的组件确定安全的组件交换状态,然后在数据存储器260中修改该组件。
因此,软件构造系统250在运行时对软件进行汇编,并且为其逻辑、结构和状态的非工作(on the fly)状态修改提供支持。特别是,明确的执行状态具体化(externalization)为软件构造系统250提供详细的信息,该信息在不需要任何来自开发者支持的情况下,能够计算安全的组件交换状态。软件构造系统250对组件的调用进行控制,从而清楚什么时候引入变化是安全的。另外,明确的软件状态具体化消除了对状态转换的请求。当插入新的组件时,该新的组件就被自动地连接到前一组件的状态。此外,因为这些组件不存储对其他组件的引用,因此无需更新组件的引用。类似地,因为应用组件是通过名称而非引用被寻址的,所以对软件的改变不会影响组件。
下面将参考图3A到图3C更加详细地讨论应用组件或MBB。
图3A示出了MBB 300的示范性操作,即接收输入参数302,执行可能影响其内部状态参数304的动作,并且生成输出参数306。
图3B是MBB 320的结构的一个实施例的框图。参考图3B,MBB 320包括一组一种或多种方法324、一组零个或多个属性322和解复用器326。方法324是用于实现任务的算法。方法324要求一组零个或多个输入值并且生成一组零个或多个输出值。在一个实施例中,解复用器326是MBB的输入点,用于接收输入参数328并选取相应的MBB方法324。在一个实施例中,各个属性322是名称和数值数组。该数值是变量,该变量存储有方法实现其算法所要求的信息。属性322存储在外部存储区域中,并可通过名称被访问。
在一个实施例中,在应用组件定义中对每个MBB进行描述。对于相关的MBB,该定义指定了输入参数列表、输出参数列表、状态属性列表和平台依赖字段,该字段指定用于实现MBB的实体(例如,Java类文件,NET对象,DLL等)。图3C示出了针对MBB“RegisterObject”的示范性XML描述文件,利用了类标记来表示各个平台的实现、利用了状态标记来指定用于各个状态属性的名称和类型数组、利用了输入标记按照名称和类型数组来描述输入参数,以及利用了输出标记来表示MBB按照名称和类型数组所生成的参数。
下面将参考图4A到4C更加详细地讨论动作。
如上所述,动作用于规定MBB的执行顺序,从而限定软件的逻辑。动作可以是解译动作或者是编译的动作。解译动作是确定的定向图,其中节点表示用于表示执行状态的MBB,边用于限定转变顺序。每条边都具有相关联的条件声明,该条件声明是在运行时被评估的,以确定下一转变。条件声明可以指由MBB生成的参数(输出参数)。对于具有多条输出边的节点来说,在运行时这些边中仅有一条能被评估为真(确定的图形)。默认地,该条件声明的值为真。动作图形一般的具有一个起点、多个中间节点以及一个终点。起点和终点(终点表示动作图形终止)是每个图形遍历的一部分。中间节点取决于根据分配给边的条件声明的图形遍历。动作图形包括用于在出现错误的情况下指定转变的附加节点和边。即,如果没有检测到错误,则系统使用默认的动作图形。然而,如果检测到执行错误,则系统使用错误的节点和边。例如,每个节点可以具有附加的边,如果检测到错误,该附加边就进入到结束状态以使得该动作终止。动作图形可以限定更加复杂的行为(例如,支持循环声明,诸如“while”、“for”和“repeat”)。执行解译动作相当于遍历该图形。
图4A示出了一种示范性的解译动作,其中MBB1是起点。动作以MBB1的调用开始,随后进行MBB2的调用,而后根据“X”的值来调用MBB3或MBB4,最后调用MBB5。变量“X”的值要么由调用动作的客户提供,要么是由MBB1或MBB2生成的输出参数。该值作为下面将更加详细描述的动作执行状态的一部分被存储。
解译动作通过输出与当前执行状态有关的信息,并且通过提供对运行时修改动作图形的支持,来提供执行水平的反射(reflection)。此外,明确的表示简化了与系统逻辑有关的推论、支持静态分析、并且允许第三方通过添加或去除状态并且配置图形来修改系统的行为。
编译动作是规定MBB调用顺序的代码段。图4B示出了一种与图4A中描述的解译动作相应的示范性编译动作。
编译动作使用指定的库来调用MBB。在一个实施例中,指定的库接收MBB名称和输入数组集,并利用所提供的输入参数来调用指定的MBB。该机制允许软件构造系统对MBB的调用进行控制,允许MBB的安全替换。在一个实施例中,提供编译动作代码作为利用软件构造系统登记的MBB。因此,调用动作相当于调用MBB,因此允许软件构造系统在运行时替换动作定义。
图4C示出了一种示范性的XML描述文件,该文件提供了解译动作(左)和编译动作(右)的定义“exampleAction”。
参考图4C,对于解译动作,每个状态都具有名称、在该状态下调用的MBB的名称、如果没有异常出现时的下一状态、以及当出现异常时的下一状态。对于有条件的转变来说(例如状态2),将条件声明分配给各个状态名称。也可能将有条件的转变用于错误状态转变。在一个实施例中,为各个动作创建ActionState对象以存储与动作状态相关联的信息,即状态名称、在该状态下调用的MBB的名称、如果没有出现异常时的下一状态、以及当出现异常时的下一状态。
编译动作描述包括动作的名称和实现该动作的MBB。
解译动作和编译动作二者都支持MBB替换。特别是,对于自动的运行时刻MBB替换的一个主要要求是检测该系统(是否)达到安全组件交换状态(即其中任何其他组件不参考目标组件的执行状态),并且避免剩余的组件访问被交换的组件。利用解译动作和编译动作两者,可以自动地确定安全组件交换状态。利用解译动作,解译器明确地调用MBB。编译动作使用指定的库来调用MBB。在两种情况下,系统对调用进行控制,从而能够安全地替换MBB。
另外,解译动作和编译动作都有助于软件的更新能力和升级能力。更新动作相当于替换现有动作,即在解译动作的情况下,对执行图形进行修改。对系统升级意味着添加新的动作,或在解译动作的情况下下,修改动作图形以合并或者修改状态。
解译动作和编译动作之间的一个差别是运行时间操作粒度。在运行时不能修改编译动作,即不可能进行添加、删除或者修改转变状态。改变编译动作的行为要求替换它们的相关的MBB,即替换动作代码。此外,在运行时不可能对编译代码进行检查,因此也不可能了解有关当前执行状态,或者了解有关动作行为。利用解译动作,图形提供充分的信息来了解动作的行为。然而,编译动作比解译动作执行得更快,这是因为编译动作不需要解译器来驱动它们的执行。根据所编译的软件所要求的功能性,软件构造系统可以使用解译或者编译动作。
下面将参照图5A到图5C更加详细地讨论域。域是使相关MBB集聚集的一种抽象概念。域提供用于存储域的结构(MBB列表)、域的逻辑(动作列表)和域的状态(MBB状态属性和执行状态值)的存储区域。可以分级编译域,以便于将MBB集作为单个单元进行操作(例如,移动、暂停和恢复)。
图5A示出了域500的一种示范性结构。
参照图5A,域500包括结构存储器502、逻辑存储器504和状态存储器506。每个存储器都存储有名称和数值数组。结构存储器502保持与登记在域中的MBB相对应的数组集。数组名称指MBB的名称(在登记时为每个MBB分配一个名称),以及数值存储对MBB的引用。该引用(reference)可能是本地指针或者是远程MBB的指针。在一个实施例中,软件构造系统使得本地或远程调对开发者透明。
逻辑存储器504存储有由域输出的动作列表。类似于结构存储器,逻辑存储器504通过名称来查阅动作,数值可以是本地指针或者远程引用。
状态存储器506存储在域中登记的MBB的状态属性。状态存储器506通过名称来查阅属性,该数值是属性值。在MBB登记期间,系统将状态存储器506的指针分配给MBB。属于同一个域的MBB共享同一状态存储器506。
可以分级编译域,以使得对较大的MBB集的组织简化。域存储器存储有被登记的子域的域存储器的引用(名称和数值数组),并且它们还存储有根域存储器的引用。图5B示出了示范性的域(domain)的分级组成。
参考图5B,根域520具有两个子域(域522和5242),而且域522具有三个子域(域526、528和530)。
在一个实施例中,默认的可见度策略规定域有权使用子域存储器。例如,根域520可以有权使用系统的所有域存储器(即域522到530),而域530仅有权使用其自己的域存储器。修改可见度策略(例如,允许子域有权使用它们的父母或兄弟域存储器)是可以的。
在一个实施例中,软件结构的定义用于描述由软件结构系统保持的域级别。图5C示出了一种示范性的XML描述符文件,该文件提供了软件结构的定义。
参照图5C,结构描述符中的每个域项目指向两个附加文件、结构和逻辑描述符,他们指定了登记在域中的MBB和动作。上面已经结合图4C讨论了逻辑描述符。结构描述符为单个域提供了软件结构的定义。图5D示出了一种示范性的XML描述符文件,该文件为域提供了软件结构的定义。
参照图5D,结构描述符提供属于域的MBB列表。该描述符包括名称和MBB描述符列表。MBB描述符是提供相关MBB的定义的文件(例如,在图3中示出的MBB描述符)。在一个实施例中,MBB描述符用于例示相关的本地MBB。所有的MBB都在域结构存储器中以<名称,MBB引用>数组进行登记。MBB名称用作访问MBB的关键词。
现在将更加详细地讨论动作的执行。解译动作的执行依赖于解译器。执行编译动作相当于调用MBB,因此无需编译器。
解译动作使系统的逻辑具体化,并且提供与执行软件的功能性方面所需的MBB调用顺序有关的信息。在一个实施例中,解译动作的执行通过图2B的调度器254来执行,该调度器使用动作数据作为MBB调用方案来驱动所编译的软件的执行。在一个实施例中,动作数据是指定MBB调用顺序的动作定义(例如,确定的有限状态自动装置(DFSA))。调度器保持并输出有关软件执行状态的信息。该信息例如指定当前的执行动作,当前执行动作的MBB,和与该动作相关联的参数(例如,输入参数和由动作的MBB生成的参数)。
在一个实施例中,每个动作都与动作状态对象相关联。动作使用该对象来存储与动作执行相关联的输入和输出参数。通过客户调用动作来提供参数,并且由MBB生成作为他们调用的结果。MBB使用在动作状态对象中存储的参数来执行它们的算法。对动作调用期间生成的参数进行保存、使MBB对这些参数的状态属性的调用同步,使得允许客户同时调用动作。
图6是用于执行解译动作的过程的实施例的流程图。该处理过程可以通过处理逻辑来执行,该处理逻辑可能包括硬件(例如电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如运行在通用计算机系统或者专用机器上)或者它们的组合。在一个实施例中,通过图2B的调度器254来执行处理6200。
参照图6,处理逻辑从接收对执行动作的请求开始(处理框602)。该请求包括包含有输入参数的动作状态对象。
在处理块604,处理逻辑使用动作名称作为关键词来访问逻辑存储器中的被请求动作的对象。
在处理块606,处理逻辑从动作对象中获得第一MBB的名称。
接下来,处理逻辑使用MBB名称作为关键词,从结构存储器中获得对一MBB的引用(处理块608),并且通过向其传送作为输入参数的动作状态对象来调用该MBB(处理块610)。
此外,处理逻辑确定在动作对象中是否存在更多的MBB(处理块614)。如果存在,则处理逻辑就从动作对象中获得下一个MBB的名称(处理块616)并且返回到处理块608。如果不存在多个MBB,则处理逻辑就将具有输出参数的动作状态对象返回到请求者(处理块618)。
图7示出了解译动作的一种示范性执行。动作的名称为“exampleAction”并且该动作由两个MBB组成。为了简化说明,假定动作不具有有条件的转变或者循环。
参照图7,调度器接收对执行称为“exampleAction”的动作的请求。该请求包括含有两个参数a和c的动作状态对象(步骤1)。调度器使用动作名称来访问逻辑存储器,并且获得动作图形的第一节点的指针。调度器从动作图形节点获得MBB的名称,并且使用该名称(MBB1)来分析来自结构存储器的MBB。
在对MBB1进行分析之后,调度器通过动作状态对象来调用MBB。MBB1需要从动作状态对象中获得的名称为a的输入参数。MBB1执行其算法并且生成输出参数b,输出参数b存储在动作状态对象中(步骤2)。
接下来,调度器从当前动作图形节点中获得下一状态的名称,获得MBB(MBB2)的名称,并且对来自结构存储器的MBB2进行分析。调度器通过将动作状态对象用作参数来调用MBB2。MBB2需要两个参数,b和c,这两个参数是MBB2从动作状态对象中获得的。MBB2执行其算法,生成称为d的输出参数,并且将该参数存储到动作状态对象中(步骤3)。
最后,调度器将动作状态对象返回给请求者,请求者能对在动作执行期间生成的任何输出参数进行检索。
上面所述的动作执行处理可用于自动地检测安全软件重构点。特别是,仅在MBB调用之间才可以对软件进行重构。MBB被允许访问和修改具体化的结构、逻辑和状态。因此,修改这些参数可能影响MBB的执行,并且可能导致不一致的软件状态。软件构造系统在MBB完成执行以前一直,以避免不希望的结果。这种行为适用于解译动作和编译动作二者。编译动作使用指定的库来调用MBB,从而对该系统进行控制以完成重构。
协议
如上所述,本发明的某些实施例使用域来支持在运行时构造软件。图8A是域800的一个实施例的框图。
参照图8A,域800包括三个子组件:域存储器802,域加载器804和域调度器806。域存储器802是一个数组容器,其存储有由实体控制的MBB的名称和引用、MBB的属性和一组一个或多个动作。
域加载器804负责创建MBB、删除MBB、提供MBB列表、加载动作、删除动作、提供动作列表、修改动作和分析软件结构描述、MBB描述和软件逻辑描述。
域调度器806负责分析动作定义(例如,动作的DFSA),并且以动作定义确定的顺序来调用MBB动作。
图8B示出了一种示范性的数组容器。数组容器是按照名称和数值对来存储信息的存储区域。该数组容器提供存储信息数组并且提供将名称用作搜索关键词来检索信息数组的功能性。
在一个实施例中,使用一组协议来实现软件的动态组成。该组协议包括域初始化协议、MBB创建协议、MBB删除协议、MBB列表协议、软件结构分析协议、动作加载协议、动作删除协议、动作列表协议、动作修改协议、软件逻辑分析协议、MBB调用协议、远程MBB调用协议和动作调用协议。
图9示出了域初始化协议。参照图9,当创建域对象时,域对象例示出域调度器、域存储器对象(数组容器)和域加载器对象。而后,域对象输出域调度器作为远程对象,以允许在域中远程调用动作。
图10示出了MBB创建协议。参照图10,域加载器执行创建并初始化微构建块的功能。在一个实施例中,域加载器执行称之为CreateMBB的用于接收MBB名称和MBB类名称的方法。该方法例示指定类的对象、初始化MBB,并且利用MBB的名称和对象的引用将数组存储到域存储器中。另外,CreateMBB方法将数组的引用计数器值设置为零,以指明在任何动作中都不使用该MBB。
图11示出了MBB删除协议。参照图11,域加载器执行删除微构建块的功能性。在一个实施例中,域加载器执行称为DeleteMBB的方法,该方法接收MBB名称、检测MBB引用计数器,并且如果引用计数器等于零,则删除MBB。否则,域加载器返回一个错误消息。
图12示出了MBB删除协议。参照图12,域加载器实现列出微构建块的功能性。在一个实施例中,域加载器实现称之为ListMBB的方法,该方法返回在域存储器中存储的所有MBB的列表。
图13示出了软件结构加载协议。参照图13,加载软件结构意味创建指定软件所要求的所有微构建块并进行初始化。在一个实施例中,当域加载器接收到软件构造描述以及加载该软件结构的请求时,协议启动。域加载器分析该描述并且为该描述中的各个实体创建MBB。为了创建MBB,域加载器对MBB创建协议起到杠杆作用。
图14示出了软件动作加载协议。参照图14,域加载器实现加载软件动作的协议。在一个实施例中,域加载器分析软件逻辑描述,并且对于包含在该描述中的各个状态,创建动作状态信息对象,并且在域存储器中存储包含有状态名称和动作状态对象引用的数组。另外,对于在该状态下涉及的各个MBB,域加载器使MBB引用计数器增加。
图15示出了动作删除协议。参照图15,域加载器实现删除动作的功能性。在一个实施例中,域加载器执行称之为DeleteAction的方法,该方法接收动作的名称,从域存储器中检索该动作,并且对于所涉及的各个MBB,减小引用计数器并且删除该MBB。
图16示出了动作列表协议。参照图16,域加载器实现列出动作的功能性。在一个实施例中,动作加载器实现称之为ListActions的方法,该方法将存储在域存储器中的所有动作的列表返回。
图17示出了动作修改协议。参照图17,域加载器实现修改动作的功能性。在一个实施例中,域加载器实现称之为ModifyAction的方法,该方法接收动作状态的名称以及包含有新状态的对象。该方法从域存储器中检索动作状态,对现有状态的和新状态的MBB的名称进行比较,并且在不同的情况下降低MBB引用计数器。该方法还利用新的状态信息来替换该状态信息。
图18示出了本地MBB调用协议。参照图18,该协议规定如何来调用本地MBB,即包含在与域调度器相同的域中的MBB。在一个实施例中,协议以invokeMBB方法开始,要求两个参数:MBB的名称和Action StateObject。域加载器使用MBB的名称从域存储器中检索包含有MBB的引用的数组。接下来,域加载器调用MBB并从动作状态对象中提取所需的参数。然后,在执行动作之后,MBB利用修改过的所有属性来更新域存储器,并将输出参数存储在动作状态对象中,并将该动作状态对象返回到域加载器。
图19示出了远程MBB调用协议。参照图19,协议提供对驻留在远程域中的MBB进行调用的支持。该功能性简化了MBB的引入而不会影响动作的执行。在一个实施例中,域调度器自动检测MBB是本地的还是远程的,并且使用适当的协议。在一个实施例中,该协议以域加载器接收到要调用MBB上的动作的请求而开始。该请求包括两个参数,MBB的名称和动作状态对象。域加载器从域存储器中分析MBB名称。该结果是对远程MBB的引用。域加载器调用动作以发布对远程程序的调用。提供动作集以发送和接收RPC请求。这些动作以及与它们相关联的MBB被默认地加载。该动作被称为SendRemoteRequest,并且需要MBB的引用、名称、远程调用的方法以及动作状态对象。该动作发布远程请求并且接收被更新的动作状态对象。
图20示出了MBB替换协议。参照图20,该协议允许以新的MBB来替换现有MBB,而不必停止正在运行的系统。在一个实施例中,协议以替换MBB的命令开始,等待安全重构状态,并且创建一个新的MBB,该新的MBB具有相同的数组名称和不同的实现类。
图21示出了动作调用协议。参照图21,动作调用协议定义了执行动作所需的所有步骤,包括分析DFSA和调用受影响的MBB。在一个实施例中,域对象输出用于实现动作调用协议的方法(invokeAction)。该方法接收动作名称和参数作为名称和数值数组集。域对象创建动作状态对象并且存储参数数组以及利用动作的名称被命名为ActionName(动作名称)的数组。接下来,该invokeAction(调用动作)方法通过动作状态对象调用对域调度器的处理方法。该域调度器根据动作状态对象来分析动作名称数组,并且使用该数值来解析第一DFSA状态信息对象。域调度器检索与DFSA状态相关联的MBB的名称以及动作名称以在该MBB上进行调用。接下来,域调度器将MBB动作名称存储在动作状态对象中并且调用域加载器的invokeMBB协议。当MBB调用协议结束时,域调度器从动作状态信息对象中检索下一动作状态名称(在错误条件下,检索下一错误状态),使用该名称来分析相关的动作状态信息对象,并且重复包含在块A中的所有步骤。该协议保持调用MBB直到达到最终的动作状态。由此,域调度器将更新动作状态对象返回给域对象,该域对象将其返回给请求者。
将程序转换为可重构的软件
在某些实施例中,使用常规方法创建的现有程序能被转换成后来可如上所述地被重构、更新或者升级的软件。在一个实施例中,转换适用于这样的程序,该程序可被定义为一组一个或多个任务,其中任务包括对象(例如Java对象)集,并且具有一组在对象之间的交互规则,这些规则限定了调用顺序和任务状态,该任务状态是所有对象的公共属性的集合。
图22到图24是用于将程序转换为可重构软件的处理2200的一个实施例的流程图。可以通过可能包括有硬件(例如电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如运行在通用计算机系统或者专用机器上)或者二者的组合的处理逻辑来执行该处理。在一个实施例中,通过图1的软件构建系统108来执行处理过程2200。
参照图22,处理逻辑从使任务的结构具体化开始(处理块2202)。在一个实施例中,处理逻辑通过下面的步骤对任务结构进行具体化(a)为各项任务和对该项任务的引用创建具有对象名称和对象引用的数组,(b)将各个已创建的数组存储到域存储器中,(c)创建命名为softwareArchitecture(软件结构)的一个数组,该数组的值是具有属于程序P的所有对象的名称的列表,以及(d)将数组softwareArchitecture存储到域存储器中。
在处理块2204,处理逻辑使任务的状态具体化。在一个实施例中,处理逻辑通过下列步骤对状态进行具体化:(a)为任务中的各个对象和对象中的各个公共属性创建数组名称为属性名称的数组,并且该数值对变量值的引用,以及(b)将各个创建的数组存储到域存储器中。
在处理块2206,处理逻辑将任务中的各个对象转换为MBB。下面将结合图23更加详细地描述将任务中的对象转换为MBB的过程的一个实施例。
在处理块2208,处理逻辑使任务的逻辑具体化。下面将结合图24更加详细地讨论对任务的逻辑进行具体化的过程的一个实施例。
图23A是用于将任务中的对象转换为MBB的过程的实施例的流程图。
参照图23A,处理逻辑从创建列表开始,该列表具有与对象相关联的所有公共方法的名称(处理块2302)。公共方法是能够从对象的外部被调用的函数(例如通过客户)。
在处理块2304,处理逻辑将所有的公共方法转换为专用方法。专用方法是可以在内部可被调用的功能性(例如通过其他的对象方法)。
在处理块2306,处理逻辑对对象代码进行修改,以使得按照名称和数值数组的形式在域存储器中对属性进行存储和存取。
在处理块2307,处理逻辑向接收名称和数组列表的对象代码添加一种方法,并且调用专用方法列表中的一种专用方法。
图23B是调用MBB的过程的一个实施例的流程图。
参照图23B,处理逻辑以从动作状态对象中提取actionName值以确定哪一个动作是客户请求的来开始(处理块2307)。动作状态对象存储有在动作执行期间所需要的和生成的输入和输出参数集。在一个实施例中,按照数组来存储输入和输出参数。
在处理块2310,处理逻辑对所请求的动作的名称是否与公共方法列表中存储的其中一种方法相对应进行核实。否则,处理逻辑出现异常。
在处理块2312,处理逻辑从动作状态对象中提取由所述动作要求的输入参数。
在处理块2314,处理逻辑使用所提取的参数来调用由actionName值指定的方法。
接下来,处理逻辑将调用结果存储到动作状态对象中(处理块2316),并且返回动作状态对象(处理块2318)。
图24是将任务逻辑具体化的过程的一个实施例的流程图。
参照图24,处理逻辑从分析任务的调用流程并且生成定向图开始,其中节点的名称与调用号相一致(处理块2402)。
在处理块2404,处理逻辑根据定向图,通过为各个图形节点创建数组来开始生成DFSA,该数组的名称是图形节点的名称,该数组的值是存储有与节点有关的信息的对象。
在处理块2406,处理逻辑将上述数组存储到域存储器中。
在处理块2408,处理逻辑存储名称为动作名称且值为具有第一图形节点的字符串的附加数组。
示范性通信中间件服务
现在将描述使用MBB构建的多协议对象请求代理程序(ORB)通信中间件服务。该服务提供独立于有线协议的客户和服务器功能性。即可以基于诸如IIOP、SOAP或者XML-RPC这样的不同协议来调用服务器对象的方法。类似地,客户请求使用相同的界面和语义而不考虑底层协议。该实现提供对IIOP和XML-RPC的支持。然而,可以通过在运行时开发和采用附加的MBB来添加附加协议。因为ExORB的结构(状态、结构和逻辑)被具体化,所以在运行时检查和操作ExORB结构是可能的。
ExORB包括被分组成11个域的28个微构建块组成。图25示出了ExORB的结构。
参照图25,CDR Parameter Management(参数管理)域提供根据Common Data Representation(命令数据呈现)(CDR)格式(CORBA默认的表示)对参数进行整理(marshal)和去整理(demarshal)的功能性。CDRMarshal Parameters(整理参数)微构建块接收参数和CDR缓冲器编码对象并且返回含有参数的CDR表示的字节数组。CDR Marshal Parameters微构建块接收字节缓冲器、具有参数类型列表的数组,从该缓冲器以及CDR缓冲器中提取解码对象,并且返回具有对象值的数组。
除了提供对根据XMLRPC协议编码的参数进行整理和去整理的功能性之外,XMLRPC Parameter Management域类似于CDR ParameterManagement域。
IIOP Protocol Processing(协议处理)域使输出功能性的微构建块聚集,以对符合IIOP协议的消息进行编码和解码。IIOP Encode Request(编码请求)微构建块接收经整理的参数的列表以及请求字段集(例如远程操作名称、所期望的响应以及请求id),并且产生根据IIOP格式化的字节缓冲器。IIOP Decode Request(解码请求)请求微构建块接收具有IIOP格式的输入请求的字节缓冲器和描述所述请求消息(例如长度)的字段集、分析所述请求,并且产生具有与所述请求有关的信息的属性集,包括请求的id、目标对象、目标方法和具有参数的字节缓冲器。IIOP Encode Reply(编码答复)和IIOP Decode Reply(解码答复)提供产生IIOP回复消息并对输入的IIOP服务消息进行解码的功能性。最后,IIOP Decode Header(解码首部)从网络(字节缓冲器)接收原始输入请求,并且分析最初的12个字节,这些字节构成了GIOP首部。该首部包括与剩余消息的长度、该消息的类型有关的信息。
XMLRPC Protocol Processing(协议处理)域与IIOP Protocol Processing域相当,并且提供用于处理XMLRPC请求和回复的功能性。
Network Data Management(网络数据管理)域负责处理输入和输出网络业务量。该域包括三个构建块:Send Data(发送数据)、Receive Data(接收数据)和Peek Data(取数数据)。Send Data微构建块接收缓冲器、其长度和通信点对象(例如TCP套接字),并且基于网络使用通信点发送数据。Receive Data微构建块接收缓冲器、要接收的数据长度和通信点对象,并且使用获取数据的该通信点对象将数据存储到缓冲器中。Peek Data微构建块类似于接收数据微构建块,但是它不去除从网络缓冲器中读取的数据。
Object Invocation(对象调用)域包含两个微构建块,以便使用Java语言映像能力来使服务器方法调用自动化。作为该功能性的结果,开发者无需构建用于它们服务器对象的框架而是简单地对其登记,并且系统自动地获得其请求的所有信息。Prepare Method Invocation(准备方法调用)微构建块接收对该对象的指针和要调用的方法的名称。该微构建块使用Java映像来检查方法签名,创建具有调用所述方法所需的参数类型的阵列,并将阵列返回作为输出参数。Invoke Method(调用方法)微构建块接收具有参数值的阵列、调用对象方法,并且返回具有由所述方法生成的参数的阵列。
TCP Incoming Connection Management(输入连接管理)域提供处理输入的TCP网络连接的功能性。Init(初始化)微构建块接收一个整数,该整数用于指定ExORB监听请求所用的端口。Accept(接受)微构建块监听输入的TCP请求,如果没有接收到任何输入参数,则返回网络连接进行封装的TCP通信点对象。
TCP Outgoing Connection Managemen(输出连接管理)域处理与远程对等(peer)的TCP连接建立。该域包括两个微构建块。Connect微构建块接收主机名称和端口,连接到主机并且返回对网络连接进行封装的TCP通信点。Return Communication Point(返回通信点)微构建块接收TCPCommunication Point(通信点)对象,并且要么将其关闭要么根据其高速缓存算法对其进行高速缓存。
Object Registration(对象登记)域负责管理服务器对象。Register Object微构建块接收对象id和对象引用,并且将其存储在表格中。该表格是被存储在域状态存储器中的状态属性。Remove Object(删除对象)微构建块接收对象id并且从所述表格中去除相关联的对象。Get Object(获得对象)微构建块接收对象id并且将该引用返回到其相关联的对象。
Protocol Detection(协议检测)域输出对输入请求的通信中间件协议进行识别的功能性。要求该功能性是为了支持ExORB的多协议行为。DetectProtocol微构建块接收字节缓冲器,分析该缓冲器,并且返回带有中间件协议名称的字符串。当前实施的MBB检测两种类型的协议:XMLPRC和IIOP。
URI Object Reference Management’(对象引用管理)域提供分析远程对象URI引用并且提取所有所需信息以将请求发送到远程对象的功能性。该域包含被称为Reference to Object(对对象引用)的单个微构建块,其接收URI和协议类型,并且返回主机名、端口号和对象id。
表格1列出了各个ExORB域(Java版本)的尺寸。在调试信息的情况下总的大小为70KB。
  域   尺寸
  CDR Parameter Management   16KB
  XMLRPC Parameter Management   20KB
  IIOP Protocol Processing   7KB
  XMLRPC Protocol Processing   8KB
  Network Data Management   3KB
  域   尺寸
  Object Invocation   2KB
  TCP Incoming Connection Management   5KB
  TCP Outgo ing Connection Management   4KB
  Object Registration   2KB
  Protocol Detection   1KB
  URI Object Reference Management   2KB
表格1ExORB尺寸
ExORB输出四个动作:发送请求、接收请求、初始化和登记对象。第一个动作旨在客户端功能性,而其余的三个(接收请求、初始化和登记对象)旨在服务器端功能性。初始化对象和登记对象是用于调用初始化MBB和登记对象MBB的单个节点的动作。
图26示出了发送请求动作的动作图形。为了简明,去除了错误状态。当客户对象调用动作时,其提供包含有动作名称、远程对象引用、要调用的方法、所需参数以及要使用的协议(即XMLRPC或IIOP)的动作状态对象(存储有在动作执行期间生成的参数的动作状态对象)。该动作开始调用用于分析远程对象引用,并且提取主机名、对象id和端口的对MBB的参考。这些参数被存储在动作状态对象中。
接下来,该动作调用连接(connect),该连接用于从动作状态对象中获取主机名和端口,与远程主机建立连接(或者重复使用现有连接),并将用于封装TCP套接字(TCP通信点)的对象存储在动作状态对象中。到下一个状态的这种转变是有条件的并且取决于存储在动作状态对象中的“协议”变量的值。如果变量的值为“iiop”,则动作调用CDR Marshal Parameters以便整理这些参数,随后调用IIOP Encode Request MBB以创建请求消息。如果变量值为“xmlrpc”,则该动作调用XMLRPC Marshal Parameters并且随后调用XMLRPC Encode Request。IIOP Encode Request和XMLRPCEncode Request MBB两者都生成字节缓冲器,该字节缓冲器具有根据恰当协议被格式化的请求。在动作图形中的下一个状态是Send Data(发送数据),该状态用于从动作状态对象中检索缓冲器,并且使用存储在动作状态对象中的TCP Communication Point对象将该缓冲器发送到远程对象。在调用Send Data之后,该动作从动作状态对象中检索名称为“oneway”的数组。如果该值为“true(真)”,则该动作从动作状态对象调用用于部署TCP通信点的Return Communication Point(返回通信点),并且结束,将该动作对象返回给动作调用者。
如果该“oneway”值为“false(假)”,则该动作继续对回复进行解码。首先,根据“protocol”数组的值,该动作对IIOP首部或者XMLRPC首部进行解码。这两个MBB分析消息首部并且将与请求有关的消息存储到动作状态对象中。对于这两个MBB都必需的一个字段是答复的剩余长度。动作调用Receive Data(接收数据),其需要长度数组以确定必须从网络读取的数据的量。接下来,动作继续对答复进行解码并且对参数进行去整理。再者,动作解译器使用“protocol”值以确定在图形中跟随什么路径。而后,动作调用Return Communication Point MBB(部署TCP通信点)并且终止,将动作状态对象返回给动作调用者。该动作状态对象包含结果参数。
图27描述了用于receive request(接收请求)的动作图形。该动作从调用accept开始,该accept在检测到输入网络请求并产生用于封装网络请求的TCP Communication Point之前一直中止。接下来,该动作调用用于将数取到输入数据缓冲器中的peek data,并且分析起始字节以检测协议的类型。如果协议类型为IIOP,则peek data MBB对以名称“协议”登记的值为“iiop”的数组进行存储。如果协议类型为XMLRPC,则MBB以相同的名称存储“xmlrpc”值。接下来,动作使用“protocol”值来确定是否跳到IIOP Decode Header或XMLRPC Decode Header。这两个MBB分析该首部并且提取它们存储在动作状态对象中的信息。这两个MBB必须存储用于指定剩余数据的长度的名称为“length”的必需数组。该值由ReceiveData MBB使用以便从网络缓冲器中获取剩余的请求数据。
动作根据存储在动作状态对象中的“protocol”数组的值来调用IIOPDecode Request或XMLRPC Decode请求。这两个MBB产生多个字段,包括目标对象的id和方法的名称。接下来,该动作调用Get Object,GetObject使用对象id来定位目标对象并且将其引用值存储到动作状态对象中。Prepare method invocation使用目标方法名称来检查采用Java映像调用该方法所需的参数。该MBB生成参数类型数组。接下来,根据“protocol”值,该动作调用CDR Demarshal Parameters或XMLRPC DemarshalParameters,其使用之前生成的类型数组对自输入请求的值进行去整理。这两个MBB产生参数值数组。该invoke method MBB使用该数组的值来调用存储在动作状态对象中的目标对象方法。该invoke method MBB产生具有输出参数值的阵列。接下来,该动作使用“协议”值来整理输出参数并且以IIOP或XMLRPC生成回复消息。IIOP Encode Reply和XMLRPCEncode Reply MBB生成具有该回复的字节缓冲器。Send data微构建块使用存储在动作状态对象(其利用accept微构建块产生)中的TCPCommunication Object将回复发送到客户端主机。之后,在发送数据之后,该动作调用return communication point,其对TCP通信点进行配置或根据缓冲算法将其存储在缓冲器中。
如上所述,可配置软件的关键特征在于支持对作为第一级对象的软件状态进行操作。每个MBB都明确地规定了依据名称和数值对而限定的该MBB的状态相关性。这些数组被存储在由MBB域提供的存储区域中。软件状态是所有MBB状态属性的集合。因此,ExORB的状态包括由28个微构建块定义的所有状态属性。
表格2列出了与ExORB相关联的状态属性。该表格包括属性名称、属性的目的和存储该属性的域的名称。
 域   目的
  Sent Data(长)  Network DataManagemnt   存储由ExORB发送的字节的总数
 域   目的
  Received Data(长)  Network DataManagemnt   存储由ExORB接收的字节的总数
  Send Timeout(长)  Network DataManagemnt   发送MBB在超时之前等待的毫秒值
  Receive Timeout(长)  Network DataManagemnt   接收MBB在超时之前等待的毫秒值
  Server Object Registry(哈希表)  Object Registration   存储登记服务器对象的列表
  Server communicationPoint Cache(列表)  TCPIncomingConnectionManagement   存储连接通信点的列表
  Client communicationPoint Cache(列表)  TCPOutgoingConnectionManagement   存储连接通信点的列表
表格2:ExORB状态属性
示范性计算机系统
图28是可用于执行这里所述的一种或多种操作的示范性计算机系统2800的框图。在另选实施例中,该机器可以包括网络路由器、网络交换机、网桥、个人数字助手(PDA)、蜂窝电话、网络设备或者任何能够执行指令序列的机器,该指令序列用于指定该机器要采用的动作。
计算机系统2800包括处理器2802,主存储器2804和静态存储器2806,它们经由总线2808相互通信。计算机系统2800还可以包括视频显示单元2810(例如液晶显示器(LCD)或阴极射线管(CRT))。计算机系统2800还包括字母-数字输入设备2812(例如键盘)、游标控制装置2814(例如鼠标)、磁盘驱动单元2816、信号发生装置2820(例如扬声器)和网络接口设备2822。
磁盘驱动单元2816包括计算机可读介质2824,其上存储有实施上述任何一种或者全部方法的指令集合(即软件)2826。该软件2826还被示出,以全部地或者至少部分地驻留在主存储器2804和/或处理器2802内。还可以经由网络接口设备2822发送或者接收软件2826。为了说明的目的,术语“计算机可读介质”应当被认为包括任何能够存储或编码指令序列的介质,该指令序列由计算机执行并且能使计算机执行本发明的任何一种方法。术语“计算机可读介质”因此应包括固态存储器、光磁盘和载波信号,但不限于此。
上面已经描述了用于在运行时动态地汇编和配置小执行单元(微构建块)的软件构造方法和装置。本发明的各个实施例可以使用诸如状态、结构和逻辑这样的执行单元的具体化。本发明的各个实施例是独立的语言和平台,并且提供软件组件的运行时配置能力、更新能力和升级能力,软件组件的无缝移动和构造软件的增加的可靠性。
尽管在阅读了下面的说明之后,本发明的多种另选方式和修改对所属领域的技术人员来说毫无疑问是显而易见的,但是应当理解借助于实例示出并描述的任何特定实施例并不意味着受到限制。因此,各个实施例的细节将不会限制仅在其中列举了有关发明本质的这些特征的权利要求的范围。

Claims (42)

1.一种用于编译软件的方法,包括:
获取用于识别应用的与被请求的功能性相关联的多个应用组件的软件结构数据,所述多个应用组件中的应用组件不彼此引用;
获取用于表示多个应用组件之间的交互规则的软件逻辑数据;
在存储器的指定区域中,以具体化的形式存储软件结构数据和软件逻辑数据;以及
基于软件逻辑数据协调在运行时的多个应用组件的调用,从而在应用运行时配置应用,其中协调在运行时的多个应用组件的调用包括:
接收执行动作的请求,该请求包括与动作相关联的动作状态对象;
获取由动作指定的应用组件的名称;
使用存储在存储器中的软件结构数据来获取对所述应用组件的引用;
将动作状态对象用作输入参数来调用所述应用组件;以及
如果所述应用组件是动作的最后一个应用组件,则将具有输出参数的动作状态对象返回给动作执行的请求者。
2.根据权利要求1的方法,其中所请求的功能性包括被请求的无线功能性。
3.根据权利要求1的方法,其中获取软件结构数据包括:
接收软件结构的定义,该软件结构的定义用于识别多个与所请求的功能性相关联的应用组件;以及
分析软件结构的定义。
4.根据权利要求1的方法,其中软件结构数据包括:多个应用组件中的每一个的识别符和对多个应用组件中的每一个的引用。
5.根据权利要求4的方法,其中所述对多个应用组件中的每一个的引用是本地对象和远程对象中的任何一个。
6.根据权利要求3的方法,还包括:
基于软件结构的定义中包含的识别多个应用组件中的每一个的信息来确定多个应用组件中的每一个是否是本地的;以及
例示每个本地应用组件的组件对象。
7.根据权利要求1的方法,还包括:
获取用于识别多个应用组件中的每一个的状态属性的软件状态数据;以及
在存储器中存储软件状态数据。
8.根据权利要求7的方法,其中获取软件状态数据包括:
接收多个应用组件中的每一个的定义;以及
分析多个应用组件中的每一个的定义。
9.根据权利要求7的方法,其中软件状态数据包括:多个应用组件中的每一个的各个属性的属性名称和属性值。
10.根据权利要求1的方法,其中获取软件逻辑数据包括:
接收用于表示多个应用组件之间的交互规则的软件逻辑的定义;以及
分析软件逻辑的定义。
11.根据权利要求10的方法,其中软件逻辑数据包括:在软件逻辑定义中涉及的各个动作的动作对象识别符和对动作对象的引用。
12.根据权利要求11的方法,其中对动作对象的引用是本地对象和远程对象中的任何一个。
13.根据权利要求10的方法,还包括:
基于从软件逻辑定义中提取的识别各个所列动作的信息来例示每个本地动作的动作对象。
14.根据权利要求1的方法,还包括:
接收在运行时替换多个应用组件的其中之一的请求;
确定安全的组件交换状态;以及
在安全的组件交换状态期间替换所述多个应用组件的其中之一。
15.根据权利要求14的方法,其中在无需重新启动系统的情况下替换所述多个应用组件的其中之一。
16.根据权利要求1的方法,还包括:
接收在运行时配置多个应用组件中的一个或多个的请求;以及
在运行时配置所述多个应用组件中的一个或多个。
17.根据权利要求1的方法,还包括:
向用户显示应用列表;
针对列表中的各项应用而向用户显示应用组件列表;以及
一旦用户请求,就将应用组件从所述列表移动到不同的设备。
18.根据权利要求11的方法,其中每个动作都与动作状态对象相关联,所述动作状态对象被指定用于存储与动作的执行相关联的输入和输出参数。
19.根据权利要求18的方法,其中协调多个应用组件的调用还包括:
获取由动作指定的另一应用组件的名称;
使用存储在存储器中的软件结构数据来获取对另一应用组件的引用;以及
将动作状态对象用作输入参数来调用另一应用组件。
20.一种用于客户端设备的装置,包括:
加载器,用于获取识别应用的与所请求的功能性相关联的多个应用组件的软件结构数据、并且用于获取表示在多个应用组件之间的交互规则的软件逻辑数据,其中所述多个应用组件中的应用组件不彼此引用;
存储器,用于以具体化的形式将软件结构数据和软件逻辑数据存储在存储器的指定区域中;以及
调度器,基于软件逻辑数据在运行时对多个应用组件的调用进行协调,从而在应用运行时配置应用,其中调度器执行以下操作:
接收执行动作的请求,该请求包括与动作相关联的动作状态对象;
获取由动作指定的应用组件的名称;
使用存储在存储器中的软件结构数据来获取对所述应用组件的引用;
将动作状态对象用作输入参数来调用所述应用组件;以及
如果所述应用组件是动作的最后一个应用组件,则将具有输出参数的动作状态对象返回给动作执行的请求者。
21.根据权利要求20的装置,其中加载器通过接收软件结构的定义并且分析该软件结构的定义来获取软件结构数据,该软件结构的定义用于识别多个与所请求的功能性相关联的应用组件。
22.根据权利要求20的装置,其中软件结构数据包括多个应用组件中的每一个的识别符和对多个应用组件中的每一个的引用。
23.根据权利要求20的装置,其中加载器还例示本地应用组件和动作对象。
24.根据权利要求20的装置,其中加载器还用于获取用以识别多个应用组件中的每一个的状态属性的软件状态数据,并且用于将软件状态数据存储到存储器中。
25.根据权利要求24的装置,其中加载器通过接收多个应用组件中的每一个的定义、并且通过分析多个应用组件中的每一个的定义来获取软件状态数据。
26.根据权利要求24的装置,其中软件状态数据包括:多个应用组件中的每一个的各个属性的属性名称和属性值。
27.根据权利要求20的装置,其中加载器通过接收软件逻辑的定义并且分析该软件逻辑的定义获取软件逻辑数据,其中该软件逻辑的定义用于表示多个应用组件之间的交互规则。
28.根据权利要求27的装置,其中软件逻辑数据包括:在软件逻辑定义中涉及的各个动作的动作对象识别符和对动作对象的引用。
29.根据权利要求20的装置,还包括用户界面,该用户界面用于向用户显示应用列表,向用户显示列表中的各个应用的应用组件列表,并且接收将应用组件从所述列表移动到不同设备的请求。
30.根据权利要求20的装置,其中加载器还在无需重新启动系统的情况下替换所述多个应用组件的其中之一。
31.根据权利要求20的装置,其中加载器用于在运行时配置多个应用组件中的一个或多个。
32.一种用于编译软件的系统,包括:
获取用于识别应用的多个与所请求的功能性相关联的应用组件的软件结构数据的装置,所述多个应用组件中的应用组件不彼此引用;
获取用于表示多个应用组件之间的交互规则的软件逻辑数据的装置;
用于在存储器的指定区域中,以具体化的形式存储软件结构数据和软件逻辑数据的装置;以及
用于基于软件逻辑数据在运行时对多个应用组件的调用进行协调,从而在应用运行时配置应用的装置,包括:
用于接收执行动作的请求的装置,该请求包括与动作相关联的动作状态对象;
用于获取由动作指定的应用组件的名称的装置;
用于使用存储在存储器中的软件结构数据来获取对所述应用组件的引用的装置;
用于将动作状态对象用作输入参数来调用所述应用组件的装置;以及
用于如果所述应用组件是动作的最后一个应用组件,则将具有输出参数的动作状态对象返回给动作执行的请求者的装置。
33.一种用于编译软件的方法,包括:
创建用于识别应用程序任务中的多个对象的软件结构数据,所述多个对象中的对象不彼此引用;
创建用于表示任务中多个对象之间的交互规则的软件逻辑数据;
创建用于识别多个对象中的每一个的一个或多个属性的软件状态数据;
在与应用程序任务相关联的存储区域的指定区域中,以具体化的形式存储软件结构数据、软件逻辑数据和软件状态数据,;
响应对重构应用程序的用户请求而在应用程序运行时修改软件结构数据、软件逻辑数据和软件状态数据中的任何一个,其中用户请求包括与应用程序重构相关联的动作状态对象;
获取由用户请求指定的应用程序的名称;
使用存储在存储器中的软件结构数据来获取对所述应用组件的引用;
将动作状态对象用作输入参数来调用所述应用组件;以及
如果所述应用组件是重构的最后一个应用组件,则将具有输出参数的动作状态对象返回给动作执行的请求者。
34.根据权利要求33的方法,其中软件结构数据包括多个对象中的每一个的识别符和对多个对象中的每一个的引用。
35.根据权利要求33的方法,其中软件状态数据包括:多个对象中的每一个的各个属性的属性名称和属性值。
36.根据权利要求33的方法,其中软件逻辑数据包括针对与所述任务相关联的各个动作的动作名称和对动作的引用。
37.根据权利要求33的方法,还包括:
将多个对象中的每一个转换成具有一个或多个输入参数、一个或多个输出参数和相关联的动作的应用组件。
38.根据权利要求37的方法,其中修改软件结构数据、软件逻辑数据和软件状态数据中的任何一个包括:
接收在运行时替换应用组件的请求;
确定安全的组件交换状态;并且
在所述安全的组件交换状态期间替换所述组件。
39.根据权利要求38的方法,其中在无需重启系统的情况下替换所述组件。
40.根据权利要求37的方法,还包括:
接收在运行时配置多个应用组件中的一个或多个的请求;以及
在运行时配置多个应用组件中的所述一个或多个。
41.根据权利要求37的方法,还包括:
向用户显示程序的应用组件列表;以及
一旦用户请求,就将应用组件从所述列表移动到不同的设备。
42.一种用于编译软件的系统,包括:
用于创建软件结构数据的装置,该软件结构数据用于对应用程序的任务中的多个对象进行识别,所述多个对象中的对象不彼此引用;
用于创建软件逻辑数据的装置,该软件逻辑数据用于表示任务中的多个对象之间的交互规则;
用于创建软件状态数据的装置,该软件状态数据用于识别所述多个对象中的每一个的一个或多个属性;
用于在与应用程序的任务相关联的存储区域的指定区域中,以具体化的形式存储所述软件结构数据、所述软件逻辑数据和所述软件状态数据的装置;以及
用于响应于对重构应用程序的用户请求而在应用程序运行时修改所述软件结构数据、所述软件逻辑数据和所述软件状态数据中的任意一个的装置,其中用户请求包括与应用程序重构相关联的动作状态对象;
用于获取由用户请求指定的应用程序的名称的装置;
用于使用存储在存储器中的软件结构数据来获取对所述应用组件的引用的装置;
用于将动作状态对象用作输入参数来调用所述应用组件的装置;以及
用于如果所述应用组件是重构的最后一个应用组件,则将具有输出参数的动作状态对象返回给动作执行的请求者的装置。
CN2004800334613A 2003-11-12 2004-11-11 用于编译软件的方法和装置 Expired - Fee Related CN1879082B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US51975603P 2003-11-12 2003-11-12
US60/519,756 2003-11-12
US55653704P 2004-03-26 2004-03-26
US60/556,537 2004-03-26
US10/898,521 US7526771B2 (en) 2003-11-12 2004-07-23 Method and apparatus for configuring an application while the application is running
US10/898,521 2004-07-23
PCT/US2004/038007 WO2005048098A2 (en) 2003-11-12 2004-11-11 Method and apparatus for composing software

Publications (2)

Publication Number Publication Date
CN1879082A CN1879082A (zh) 2006-12-13
CN1879082B true CN1879082B (zh) 2010-05-26

Family

ID=34557418

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2004800334613A Expired - Fee Related CN1879082B (zh) 2003-11-12 2004-11-11 用于编译软件的方法和装置

Country Status (5)

Country Link
US (1) US7526771B2 (zh)
EP (1) EP1683006A2 (zh)
JP (1) JP2007511018A (zh)
CN (1) CN1879082B (zh)
WO (1) WO2005048098A2 (zh)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409685B2 (en) 2002-04-12 2008-08-05 Hewlett-Packard Development Company, L.P. Initialization and update of software and/or firmware in electronic devices
US8479189B2 (en) 2000-11-17 2013-07-02 Hewlett-Packard Development Company, L.P. Pattern detection preprocessor in an electronic device update generation system
US7313791B1 (en) * 2002-08-22 2007-12-25 Hewlett-Packard Development Company, L.P. Firmware update network and process employing preprocessing techniques
US7114148B2 (en) * 2002-09-30 2006-09-26 Microsoft Corporation Runtime services for network software platform
US8555273B1 (en) 2003-09-17 2013-10-08 Palm. Inc. Network for updating electronic devices
US7526771B2 (en) 2003-11-12 2009-04-28 Ntt Docomo, Inc. Method and apparatus for configuring an application while the application is running
US7904895B1 (en) 2004-04-21 2011-03-08 Hewlett-Packard Develpment Company, L.P. Firmware update in electronic devices employing update agent in a flash memory card
US7278133B2 (en) 2004-07-23 2007-10-02 Ntt Docomo, Inc. Index-based parameter access and software for using the same
US8526940B1 (en) 2004-08-17 2013-09-03 Palm, Inc. Centralized rules repository for smart phone customer care
US20060155830A1 (en) * 2004-11-12 2006-07-13 International Business Machines Corporation Configuration mediator for a multi-component software solution environment
US8275793B2 (en) * 2005-04-29 2012-09-25 Microsoft Corporation Transaction transforms
US8799857B2 (en) 2005-04-29 2014-08-05 Microsoft Corporation XML application framework
US8132148B2 (en) 2005-04-29 2012-03-06 Microsoft Corporation XML application framework
US8418132B2 (en) 2005-04-29 2013-04-09 Microsoft Corporation Application description language
JP4876438B2 (ja) * 2005-05-31 2012-02-15 株式会社日立製作所 コンポーネントソフトウェアの運用方法および運用基盤
JP4541992B2 (ja) * 2005-08-02 2010-09-08 キヤノン株式会社 ネットワーク機器及びその制御方法、及びプログラム
CN101248418A (zh) * 2005-08-26 2008-08-20 汤姆森许可贸易公司 用于从网络来配置设备的方法和装置
EP1774890B1 (en) 2005-10-11 2013-08-07 Samsung Electronics Co., Ltd. A multi cyclone dust collector for a vacuum cleaner
US20070174318A1 (en) * 2006-01-26 2007-07-26 International Business Machines Corporation Methods and apparatus for constructing declarative componentized applications
US8065660B1 (en) * 2006-05-12 2011-11-22 Cisco Technology, Inc. Method and system for run-time customization of network management applications
US8209676B2 (en) 2006-06-08 2012-06-26 Hewlett-Packard Development Company, L.P. Device management in a network
WO2008014454A2 (en) 2006-07-27 2008-01-31 Hewlett-Packard Development Company, L.P. User experience and dependency management in a mobile device
EP1926019B1 (de) * 2006-11-24 2012-05-16 Tangro Software Components GmbH Datenaustauschverfahren und Steuerverfahren zwischen Softwarebausteinen sowie wiederverwendbare Softwarebausteine
US7805403B2 (en) * 2007-01-07 2010-09-28 Apple Inc. Synchronization methods and systems
US8141065B2 (en) * 2007-09-27 2012-03-20 Alcatel Lucent Method and apparatus for performing non service affecting software upgrades in place
US8146069B2 (en) * 2007-09-27 2012-03-27 Alcatel Lucent Method and apparatus for performing non service affecting software upgrades in place
CA2607537A1 (en) * 2007-10-22 2009-04-22 Ibm Canada Limited - Ibm Canada Limitee Software engineering system and method for self-adaptive dynamic software components
US8543994B2 (en) * 2007-12-07 2013-09-24 Sap Ag Developing java server components without restarting the application server
US8219595B2 (en) * 2008-02-14 2012-07-10 Hewlett-Packard Development Company, L.P. System and method for efficient remote data access for server management
US8402452B2 (en) * 2009-04-02 2013-03-19 International Business Machines Corporation Automatically recommending an upgrade approach for a customizable software product
US8856670B1 (en) * 2009-08-25 2014-10-07 Intuit Inc. Technique for customizing a user interface
US8997040B2 (en) * 2010-03-24 2015-03-31 Microsoft Technology Licensing, Llc Variable closure
GB2482681B (en) 2010-08-09 2013-01-09 Quadrant Systems Ltd A configurable bridge circuit for integrating a new subsystem with an existing computing environment
CN102073544B (zh) * 2011-01-28 2012-11-21 武汉天喻信息产业股份有限公司 一种基于页操作的EEPROM cache方法
CN103853554A (zh) * 2014-02-20 2014-06-11 上海大唐移动通信设备有限公司 一种软件重构位置确定方法及装置
US9195447B2 (en) 2014-03-10 2015-11-24 Raytheon Company Optimized SCA descriptors with run-time deployment additions
JP6379599B2 (ja) * 2014-04-02 2018-08-29 富士通株式会社 適用判定プログラム、適用判定方法、及び適用判定装置
US20160170739A1 (en) * 2014-12-15 2016-06-16 Dimitar Kapashikov Alter application behaviour during runtime
CN104657185B (zh) * 2015-03-12 2017-08-11 东港股份有限公司 一种Java卡的Java代码补丁方法
CN106155755B (zh) * 2015-06-03 2020-06-23 上海红神信息技术有限公司 程序编译方法和程序编译器
US10938561B2 (en) * 2018-06-21 2021-03-02 International Business Machines Corporation Tuple level security for streams processing
US11580189B2 (en) * 2018-07-31 2023-02-14 Verified First LLC Systems and methods for application data amalgamation
CN109857396B (zh) * 2019-01-11 2023-11-17 平安科技(深圳)有限公司 组件构建方法及装置、存储介质、电子设备
CN110489219B (zh) * 2019-08-05 2022-05-03 北京字节跳动网络技术有限公司 一种调度功能对象的方法、装置、介质和电子设备
GB2593485B (en) * 2020-03-24 2022-06-15 Advanced Risc Mach Ltd Apparatus and method using plurality of physical address spaces
CN113411231A (zh) * 2021-06-15 2021-09-17 中国电子科技集团公司第二十研究所 一种corba中间件通信时延性能优化方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609250B1 (en) * 1999-03-09 2003-08-19 Fujitsu Limited Software generating device

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152551A (ja) * 1993-11-30 1995-06-16 Toshiba Corp コンピュータシステムおよびプログラム実行方法
JP3437284B2 (ja) * 1994-09-21 2003-08-18 株式会社エヌ・ティ・ティ・データ サ−ビス処理システム
US6065116A (en) * 1997-05-07 2000-05-16 Unisys Corporation Method and apparatus for configuring a distributed application program
CA2249252A1 (en) 1998-09-30 2000-03-30 Garry David Whitworth Automation of the design recovery and forward engineering of legacy applications
WO2001059569A2 (en) * 2000-02-09 2001-08-16 Apriva, Inc. Communication systems, components, and methods with programmable wireless devices
JP2001312414A (ja) * 2000-04-28 2001-11-09 Matsushita Electric Ind Co Ltd サービス提供システム及びサービス提供サーバ
US7171661B1 (en) * 2000-10-19 2007-01-30 International Business Machines Corporation Realtime configuration updates and software distribution to active client positions
US7080159B2 (en) * 2000-12-15 2006-07-18 Ntt Docomo, Inc. Method and system for effecting migration of application among heterogeneous devices
US20040015822A1 (en) * 2001-03-23 2004-01-22 Linton Samuel W. Method and apparatus for dynamic assembly and verification of software components into flexible applications
US7007280B1 (en) * 2001-04-30 2006-02-28 Adobe Systems Incorporated Schema driven management of a component-based application
US20040031015A1 (en) 2001-05-24 2004-02-12 Conexant Systems, Inc. System and method for manipulation of software
JP2002358199A (ja) * 2001-05-31 2002-12-13 Shima Masahiko コンポーネントシステム及びコンポーネント作成方法
US7076417B2 (en) * 2001-09-05 2006-07-11 Agilent Technologies, Inc. Method for modeling and processing asynchronous functional specification for system level architecture synthesis
EP1440386A2 (en) * 2001-11-01 2004-07-28 Koninklijke Philips Electronics N.V. Scalable browser
US7133874B2 (en) * 2001-12-13 2006-11-07 Microsoft Corporation Prototyping model for components of a software program
US20040002943A1 (en) * 2002-06-28 2004-01-01 Merrill John Wickens Lamb Systems and methods for application delivery and configuration management of mobile devices
US20040216147A1 (en) * 2002-07-18 2004-10-28 Motorola, Inc. Component based application middleware framework
US6978452B2 (en) * 2003-04-02 2005-12-20 Beach Unlimited Llc Upgrading digital media servers
JP4232092B2 (ja) * 2003-06-06 2009-03-04 日本電気株式会社 携帯端末システム及び携帯端末
US7526771B2 (en) 2003-11-12 2009-04-28 Ntt Docomo, Inc. Method and apparatus for configuring an application while the application is running
US7278133B2 (en) 2004-07-23 2007-10-02 Ntt Docomo, Inc. Index-based parameter access and software for using the same

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609250B1 (en) * 1999-03-09 2003-08-19 Fujitsu Limited Software generating device

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
A. De Lucia, G. A. Di Lucca, A. R. Fasolino, P.Guerra,S.Petruzzelli.Migrating Legacy Systems towards Object-Oriented Platforms.Software Maintenance, 1997. Proceedings., International Conference on Bari, Italy.1997,122-129. *
A.DeLucia G. A. Di Lucca
Ying Zou, Kostas Kontogiannis.Towards a Web-centric Legacy System Migration Framework.3RD INT'L WORKSHOP ON NET-CENTRIC COMPUTING (NCC) : MIGRATING THE WEB.2001,31-5. *

Also Published As

Publication number Publication date
CN1879082A (zh) 2006-12-13
US7526771B2 (en) 2009-04-28
WO2005048098A2 (en) 2005-05-26
WO2005048098A3 (en) 2005-09-22
JP2007511018A (ja) 2007-04-26
EP1683006A2 (en) 2006-07-26
US20050102615A1 (en) 2005-05-12

Similar Documents

Publication Publication Date Title
CN1879082B (zh) 用于编译软件的方法和装置
CN103336813B (zh) 一种基于中间件架构的物联网数据集成管理方案
CN104699718B (zh) 用于快速引入业务数据的方法和装置
US8402081B2 (en) Platform for data aggregation, communication, rule evaluation, and combinations thereof, using templated auto-generation
JP2008507755A (ja) インデックスベースのパラメータアクセス及びこれを使用するためのソフトウェア
US20060150188A1 (en) Method and apparatus for supporting soft real-time behavior
WO2002086679A2 (en) Service provision system and method
CN100583846C (zh) 语义化电信网络能力服务网关组件、网络系统和工作方法
CN103164249A (zh) 用于脚本语言编译器的扩展机制
CN103942055A (zh) 面向融合网络混合服务流程编制语言的开发系统及方法
US9075672B2 (en) Monadic evaluation of injected query compositions
CN110162559B (zh) 一种基于通用json同步和异步数据api接口调用的区块链处理方法
CN113377805B (zh) 数据查询方法、装置、电子设备及计算机可读存储介质
US20130138593A1 (en) Method and Apparatus for Operating a Finite State Machine
CN103942281A (zh) 一种对持久化存储的对象进行操作的方法及装置
CN101883107A (zh) 实现上下文感知业务应用的方法和相关装置
CN109343983A (zh) 功能模块间的信息交互方法、装置、设备及存储介质
CN112579319B (zh) 一种基于LRU Cache优化的服务调用方法及装置
CN105637912B (zh) 用于把智能电话应用转换成基本电话应用的方法和系统
Zyrianoff et al. Two-way integration of service-oriented systems-of-systems with the web of things
CN113918149A (zh) 接口开发方法、装置、计算机设备和存储介质
CN115857907B (zh) 一种业务流动态装配系统及方法
CN115878860A (zh) 一种菜单的生成方法、装置、服务器设备及介质
CN102148755A (zh) 大型机注入组件和仿真器与大型机间传输的分组的操纵法
KR20210128096A (ko) 사물인터넷 플랫폼 간 연동 방법 및 장치

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100526

Termination date: 20131111