在OSGi服务平台上提供包捆组终止的系统和方法

文档序号:7960392阅读:118来源:国知局
专利名称:在OSGi服务平台上提供包捆组终止的系统和方法
技术领域
本发明一般地涉及OSGi服务平台。更具体地,本发明涉及OSGi架构中可扩展并且可下载的服务应用程序包捆的终止。
背景技术
OSGi代表“开放服务网关初始化”,在www.osgi.org上对之进行了讨论,是一种以协调的方式使用和管理服务的开放的公共结构。OSGi提供了一种通用的、安全的、被管理的基于Java的架构,该架构支持对可扩展可下载的已知为包捆的服务应用程序的使用。适应OSGi的设备可以下载和安装OSGi使用实体,并在不再需要的时候删除它们。所安装和开始的包捆可以登记许多服务,在架构的严格控制之下可以与其它包捆分享这些服务。
OSGi可以在标准Java虚拟机(VM)的上面运行。与传统的方法中一个Java应用程序运行在一个VM上不同的是,在OSGi中几个包捆可以同时运行在相同的VM上。使用OSGi,不需要对VM装载和执行与运行Java应用程序相同的次数。因此,极大地降低了存储器的消耗。
OSGi包捆具有清楚定义的生命周期,如图1所示。架构经过类事件“BundleEvent”将包捆的生命周期的变化报告给其它包捆。
为了保证OSGi运行时间的资源消耗没有连续增长,当停止包捆时,必须释放从激活开始已经分配的所有资源,正如在目前的OSGiR3规范4.8.7节中所要求的。根据OSGi R3规范的4.8.7节,包捆激活器接口定义了“public void stop(包捆环境上下文)throwsException”方法,该方法由架构调用以停止包捆。该方法必须释放自从激活以来分配的任何资源。所有与该停止包捆相关的线程都必须立即停止。
包捆的一个重要的特征是能够与其它包捆分享Java代码。在技术上,这通过将包捆所包含的Java包的一部分输出到由OSGi架构保持的名称空间数据库并且允许其它包捆输入并使用这些包。输出的包的可用性取决于包捆的生命周期阶段;当包捆在RESOLVE和ACTIVE状态之间循环时,必须使得输出的包连续可用。如果包捆的依存性被解决,则必须输出所选择的包。停止的包捆所输出的包对于其它包捆继续可用。这个连续的输出意味着其它的包捆可以执行来自所停止的包捆的代码。
OSGi还引入了“服务”的概念。根据当前OSGi R3架构规范,对于OSGi服务平台,在来自分享服务登记处的可用的协同操作服务集周围建立包捆。这种OSGi服务由它的服务接口进行语义定义,并作为服务对象进行实施。该服务接口应当用尽可能少的实现细节来规定。服务对象由包捆拥有并且在包捆中运行。这个包捆必须将该服务对象向架构服务登记处进行登记,从而该服务的功能在架构的控制下对于其它包捆可用。
拥有服务的包捆和使用服务的包捆之间的依存性由架构进行管理。例如,当包捆被停止时,所有由该包捆向架构登记的服务将自动地被解除登记。架构将服务映射到它们下面的服务对象,并提供能够使得安装的包捆能够请求它所需要的服务的查询机制。架构还提供事件机制,从而包捆能够接收被登记、修改或解除登记的类事件“ServiceEvent”。还要注意的是,ServiceEvent报告服务对象的登记、解除登记和属性变化。所有这种事件必须被同步发送。
OSGi规范目前要求停止包捆必须停止它的线程并且清除它的资源。同时,OSGi不规定使得这个要求可行的任何基础结构。恶意的包捆或容易有bug的包捆可能会忽略这个要求。结果是,只有对架构进行完全的重启才能解决这个问题。不幸的是,完全重启中断了OSGi运行时间所提供的功能的可用性。在希望运行在24/7环境中并提供重要功能的系统中,这种缺陷是不能容忍的。
OSGi规范还要求即使当包捆被停止时包捆的输出包仍然可用。输出包的用户或输入者一定不会经历由于输出包的停止而导致的输出包变得不一致。用于强制的包捆停止的符合OSGi的方案必须保证这些要求。
由于Java语言的一些特殊的特征,即使包捆从来没有开始,包捆也可能会消耗资源及其自已的线程。这个现象是因为使用了包捆的输出包。保持在RESOLVED状态中的包捆不能被停止,因为停止操作仅对保持在ACTIVE状态的包捆进行了定义。OSGi没有定义任何可用于要求保持在RESOLVED状态中的包捆清除它的资源的设备。
因此,希望提供一种能够实现强制性资源回收的基础结构,其中,不用重新启动运行Java VM的整个操作系统的处理,该Java VM对OSGi运行时间进行供能。

发明内容
本发明涉及包捆终止的使用,包捆的终止是一种强制性的操作,其导致特定包捆拥有的所有线程的终止和所有资源的回收。如果由于任何原因包捆必须被终止,则采用以下的步骤。首先,定义包捆的终止集。基于被选择来终止的包捆的所有包捆是终止集的成员。不是终止集成员的包捆不可基于终止集的任何成员。第二,作为单个的管理操作,处于ACTIVE状态的终止集的成员包捆被停止,并且该终止集的所有成员都被终止,而不管这些成员在开始该管理操作之前是处于ACTIVE状态或RESOLVED状态。
本发明实现了全部资源的回收,即使对于那些不处于ACTIVE状态但仍然消耗资源的包捆而言也是如此。没有包括在终止集中并且符合OSGi建议的包捆将不会受到对终止集成员进行终止的损害。
当将以下的描述和附图结合时,本发明的这些和其它的目的、优点和特征以及其组织和操作方式将变得明显,其中,在以下附图中相同的部件具有相同的标号。


图1表示OSGi包捆的生命周期;图2为表示可在本发明的实施中使用的移动电话的透视图;图3为图2的移动电话的电话电路的示意图;图4为表示根据本发明的一个实施例用于查找终止集的算法的流程图;以及图5为表示根据本发明的一个实施例用于查找无效参考的算法的流程图。
具体实施例方式
图2和图3表示其中可以实施本发明的一个有代表性的移动电话12。但是应当理解,本发明可以在范围广泛的电子设备中实施,包括个人电脑、个人数字助理、集成消息设备以及其它电子设备。图2和图3的移动电话12包括外壳30、采取液晶显示屏形式的显示屏32、小键盘34、麦克风36、耳机38、电池40、红外端口42、天线44、根据本发明的一个实施例的采取UICC形式的智能卡46、读卡器48、无线接口电路52、编解码电路54、控制器56和存储器58。单个的电路和部件都是现有技术中已知的类型,例如在Nokia范围中的移动电话。
本发明涉及包捆终止的使用,包捆的终止是一种强制性的操作,其导致特定包捆拥有的所有线程的终止和所有资源的回收。如果包捆由于任何理由而必须终止,则许多步骤将被采取以完成这个动作。首先,识别该包捆的终止集。终止集是与一对规则相一致的包捆的最小集。第一个规则是所有基于被选择来终止的包捆的所有包捆是该终止集的成员。根据第二个规则,不是终止集的包捆都不基于该终止集的任何成员。第二,作为单个的管理操作,处于ACTIVE状态的终止集的成员包捆被停止,并且该终止集的所有成员都被终止,而不管这些成员在开始该管理操作之前是处于ACTIVE状态或RESOLVED状态。
在寻找终止集的过程中必须考虑许多依存性的类型。包分享机制引入的依存性必须被考虑。结合线程终止产生的依存性也被考虑-当包捆的线程正在执行另一个包捆的输出包代码时被终止,可能会使这些包处于不一致的状态。
本发明假定在所讨论的系统中某个功能是可用的。例如,假定工作机制能够为每个具体资源决定哪个包捆是它的所有者。还可以假定,存在一种工作机制,用于终止具体包捆的线程。另外,假定线程的即时终止不会损害虚拟机的状态和运行虚拟机的整个操作系统处理的自身资源的状态。还可以假定,一种工作机制可用于包捆所拥有的资源(包括自身的资源)的完全回收。
考虑到依存性类型,第一种类别的依存性基于包分享机制。如果包捆输入另一个包捆的包,则输入者包捆明显地具有指向输出者的依存性。甚至不需要具有从输出者代码的示例的对象,因为输出包的静态字段所参考的对象(如果有)能够受到控制而不用对它们进行直接参考。这种类型的从输入者包捆指向输出者包捆的依存性在这里被参考作为包依存性。
第二种类别的依存性由线程终止的结果形成。在定义这种类别的依存性之前,必须建立包捆为线程终止安全的程度。两种类型的包捆分享包-线程终止安全包捆和终止不安全包捆。第一种类型包括被准备并且是可以抵制即时线程终止的包捆。这保证了正在执行输出包代码的线程的即时终止不会使得拥有输出页的包捆的资源处于不一致的状态。在鲁棒的OSGi系统中,正在提供重要服务(OSGi规范定义的标准服务)或正在分享重要API的包的所有包捆必须是可以抵制进行即时线程终止。使用处理自身资源(例如,使用自身调用)的代码的包捆也属于这个类别,因为,在不同的情况下,如果线程被即时终止,可能会使自身资源处于不一致的状态。这可能会导致对于整个操作系统处理的损害。
分享代码包的第二种类型的包捆是不抵制即时线程终止的包捆,称之为终止不安全包捆。如果执行它们代码的线程被即时终止,则这些包捆的状态变成未定义的。
下面是表示两种类型包捆的关联性的例子。在包捆X被终止的情况中,它所有的线程被终止。X输入由称为Y的包捆输出的某些包,Y不抵制即时线程终止。在这种情况下,Y可能会处于即时线程终止的结果的危险中,因为X的线程可能实际上正在执行Y的输出代码。这个危险的更准确的识别可以基于记录包捆(包捆的任何线程)是否曾经执行过输出包捆的代码的系统功能。这个依存性的更准确的识别可以基于调用栈分析,该调用栈分析决定将要被终止的线程是否实际上正在执行具体包捆的输出包的方法。
在前面所述的依存性类型中,其为从属于第二类型包捆中的输出者包捆指向输入者包捆,称之为线程依存性。对于是否以准确的形式或者以简单而不准确的形式识别这个依存性,这取决于系统实施。
图4描述了一种用于查找本发明的终止集的算法。该算法通过建立两个集进行操作需要分析依存性的包捆集,以及终止集。来自前面的集中的包捆被分析,并且如果需要则被移到后面的集中。当算法结束时,后面的集包括终止集。在步骤400,选择最初标志为将要终止的包捆。在步骤410,所选择的包捆被添加到包捆集中以便作为初始成员进行分析。在步骤420,所选择的包捆作为初始成员被添加到终止集中。然后在步骤430中确定在包捆集中是否存在仍然必须被分析的包捆。如果存在仍然需要被分析的包捆,则在步骤440,从剩余的有待分析的包捆集中取出一个包捆。在步骤450,找到所有基于包的包捆。在步骤460,找到所有基于线程的包捆。在步骤470,找到的包捆被添加到包捆集中以便分析。在步骤480,找到的包捆被添加到终止集中。在步骤490,刚被分析过的包捆从有待分析的剩余包捆集中被删除,并且处理返回步骤430。如果已经分析了所有的包捆,则查找终止集的处理完成,由步骤495表示。
还存在一个问题,即在强行回收资源期间生成无效的对象参考。在一些情况中,即使当没有输入和依赖由拥有被参考的对象的包捆输出的代码时,包捆也可以保持对另一个包捆的对象的参考。在这种情况中,保持参考的包捆可能不是终止集的成员。例如,包捆X可以是终止集的成员,而包捆Y不是成员。X输入由Y输出的包。通过由Y的输出包提供的方法调用,可将Y拥有的对象中的直接参考存储到X拥有的对象中。在另一个例子中,可以使用经过服务对象的基于直接参考的包捆之间的通信。
根据OSGi架构规范的要求,当服务被解除登记或包捆停止时,架构生成事件。正常工作的包捆应当对这些事件作出反应,并且清除对其它包捆所拥有的对象的参考。可能存在这样一些情况,即,保持对外部包捆对象的参考没有被清除,或者不能清除其外部参考。例如,操作外部参考的代码可能在输入包中(并且输入者包捆不是终止集的成员,因为在不同的情况下这可能意味着拥有外部参考的包捆也必须是终止集的成员),并且输入包中的代码可能没有写好。
根据本发明的一个实施例,如下地解决了前面提及的问题。一种算法找出所有从不是终止集成员的包捆的对象指向终止集成员的对象的参考。通过保证尝试使用无效参考的执行线程将接收运行时间异常,所有这些参考在虚拟机的帮助下被无效。异常是公共的,并且被怀疑使用外部参考的代码可以通过将关键部分放入try-catch块而为这种情况做准备。因为在OSGi或标准Java中没有这种机制,所以没有准备运行在能够对资源进行管理的架构上的包捆可能不能够处理异常。当出现可以在终止一个终止集中的包捆之后的任何时间发生的使用无效参考时,根据本发明还终止该包捆。
在本发明的一个实施例中,外部参考可以被考虑为附加的依存类型。在这种情况中,包捆被添加到终止集,如果该包捆保持对终止集包含的包捆的参考则该包捆还被添加到包捆集中。
图5为表示根据本发明的一个实施例用于查找由资源回收导致的无效参考的算法的操作流程图。优选地,该算法在所有包捆已经接收到作为终止集成员的活动包捆被停止的事件信令之后执行。在图5中的步骤500,取得没有被分析的一个参考。在步骤510,找到资源所有者包捆以及参考的目标对象的所有者包捆。在步骤520,确定该参考是否是包捆间的参考,或者资源和参考的目标对象是否由相同的包捆所有。如果参考是包捆间参考,则在步骤530,确定目标对象的所有者包捆是否在终止集中。如果其所有者包捆不在终止集中,则在步骤540将该参考标志为“已分析”。如果资源和目标参考由相同的包捆拥有,则该参考也被标志为“已分析”。如果目标对象的所有者包捆在终止集中,则在步骤550中确定参考的源对象的所有者包捆是否在终止集中。如果参考的源对象的所有者包捆在终止集中,则该参考被标志为“已分析”。如果参考的源对象的所有者包捆不在终止集中,则在步骤560中将该参考标记为无效参考,然后将参考标志为“已分析”。在已经将参考标志为“已分析”之后,在步骤570确定是否已经分析了所有的参考。如果是,则处理完成;否则,重新开始对必须分析的参考的处理。
系统可以向用户通知在本发明的一个实施例中的终止处理。对于具体包捆的关于终止集成员的信息可能对高级用户有价值,并且可以为采取进一步的动作提供“提示”(例如,卸载终止集的成员包捆)。
在方法步骤的一般上下文中对本发明进行了描述,这些方法步骤在一个实施例中可以由程序产品实施,该程序产品包括由网络环境中的计算机执行的计算机可执行指令,例如程序代码。
一般地,程序模块包括执行具体任务或实施具体的抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、相关数据结构以及程序模块表示用于执行这里所披露方法的步骤的程序代码的例子。这种可执行指令或相关数据结构的具体顺序表示用于实现这些步骤中描述的功能的相应动作的例子。
本发明的软件实施可以用标准的编程技术完成,这些技术具有基于规则的逻辑以及其它逻辑以完成各种数据库搜索步骤、关联步骤、比较步骤和决定步骤。还应当注意,这里以及权利要求书中所用的“部件”和“模块”意在包括使用一行或多行软件代码的实施、和/或硬件实施、和/或用于接收手工输入的设备。
已经基于示例和描述的目的提出了前面所述的本发明的实施例。并非意在穷尽性的或者将本发明限制到所披露的精确形式,根据上面的启示或者从本发明的实践中可以获得修改和变形。这些实施例被选择以及被描述,从而对本发明的原则及其实际应用进行解释,以使本领域技术人员能够使用各种实施例中的本发明以及适于具体使用的各种修改。
权利要求
1.一种用于在OSGi架构中终止包捆的方法,包括在为终止选择了包捆之后,识别出终止集,其中,基于所选择的包捆的包捆被包括在终止集中,不是所述终止集成员的包捆不基于所述终止集的任何成员;停止所述终止集中处于ACTIVE状态的成员包捆;以及在管理操作开始之前终止所述终止集的成员,无论其成员处于ACTIVE状态还是RESOLVED状态。
2.根据权利要求1所述的方法,其中,所述终止集的识别包括执行迭代处理,包括从有待分析的包捆组中选择包捆,对其包基于所选择的包捆的所有包捆进行定位,对其线程基于所选择的包捆的所有包捆进行定位,将所述定位后的包捆添加到有待分析的包捆组,将所述定位后的包捆添加到所述终止集,以及从所述有待分析的包捆组中删除所选择的包捆;重复所述迭代处理,直至在所述有待分析的包捆组中没有剩余的包捆。
3.根据权利要求2所述的方法,还包括在开始所述迭代处理之前,选择最初被标志为有待终止的包捆;通过添加所述最初标志的包捆生成有待分析的所述包捆组;以及通过添加所述最初标志的包捆生成所述终止集。
4.根据权利要求1所述的方法,还包括,将所述终止集的所述包捆通知给用户。
5.根据权利要求1所述的方法,其中,如果具体包捆输入由另一个包捆输出的包,则所述具体包捆为其包基于所述另一个包捆的包捆。
6.根据权利要求1所述的方法,其中,如果具有线程的第二个包捆的线程的即时终止使具体包捆的资源处于不一致的状态,则所述具体包捆为其线程基于所述第二包捆的包捆。
7.一种用于在OSGi架构中终止包捆的计算机程序产品,包括用于在为终止选择了包捆之后识别出终止集的计算机代码,其中,基于所选择的包捆的包捆被包括在所述终止集中,不是所述终止集成员的包捆不基于所述终止集的任何成员;用于停止所述终止集中处于ACTIVE状态的成员包捆的计算机代码;以及用于在管理操作开始之前终止所述终止集的成员的计算机代码,其中,无论其成员处于ACTIVE状态还是RESOLVED状态。
8.根据权利要求7所述的计算机程序产品,其中,所述终止集的识别包括用于执行迭代处理的计算机代码,包括用于从有待分析的包捆组中选择包捆的计算机代码,用于对其包基于所选择的包捆的所有包捆进行定位的计算机代码,用于对其线程基于所选择的包捆的所有包捆进行定位的计算机代码,用于将所述定位后的包捆添加到有待分析的包捆组的计算机代码,用于将所述定位后的包捆添加到所述终止集的计算机代码,以及用于从所述有待分析的包捆组中去除所选择的包捆的计算机代码;用于重复所述迭代处理直至在所述有待分析的包捆组中没有剩余的包捆的计算机代码。
9.根据权利要求8所述的计算机程序产品,进一步包括用于在所述迭代处理开始之前选择最初标志为有待终止的包捆的计算机代码;用于通过添加所述最初标志的包捆生成将要分析的所述包捆组的计算机代码;以及用于通过添加所述最初标志的包捆生成所述终止集的计算机代码。
10.根据权利要求7所述的计算机程序产品,还包括用于将所述终止集的所述包捆通知给用户的计算机代码。
11.根据权利要求7所述的计算机程序产品,其中,如果具体包捆输入由另一个包捆输出的包,则所述具体包捆为其包基于所述另一个包捆的包捆。
12.根据权利要求7所述的计算机程序产品,其中,如果具有线程的第二个包捆的线程的即时终止使具体包捆的资源处于不一致的状态,则所述具体包捆为其线程基于所述第二包捆的包捆。
13.一种电子设备,包括处理器;和存储单元,可操作地连接到所述处理器,包括用于在OSGi架构中终止包捆的计算机程序产品,包括用于在为终止选择了包捆之后识别出终止集的计算机代码,其中,基于所选择的包捆的包捆被包括在所述终止集中,不是所述终止集成员的包捆不基于所述终止集的任何成员;用于停止所述终止集中处于ACTIVE状态的成员包捆的计算机代码;以及用于在管理操作开始之前终止所述终止集的成员的计算机代码,其中,无论其成员处于ACTIVE状态还是RESOLVED状态。
14.根据权利要求13所述的电子设备,其中,所述终止集的识别包括用于执行迭代处理的计算机代码,包括用于从有待分析的包捆组中选择包捆的计算机代码,用于对其包基于所选择的包捆的所有包捆进行定位的计算机代码,用于对其线程基于所选择的包捆的所有包捆进行定位的计算机代码,用于将所述定位后的包捆添加到有待分析的包捆组的计算机代码,用于将所述定位后的包捆添加到所述终止集的计算机代码,以及用于从所述有待分析的包捆组中去除所选择的包捆的计算机代码;用于重复所述迭代处理直至在所述有待分析的包捆组中没有剩余的包捆的计算机代码。
15.根据权利要求14所述的电子设备,其中,所述存储单元还包括用于在所述迭代处理开始之前选择最初标志为有待终止的包捆的计算机代码;用于通过添加所述最初标志的包捆生成有待分析的所述包捆组的计算机代码;以及用于通过添加所述最初标志的包捆生成所述终止集的计算机代码。
16.根据权利要求13所述的电子设备,其中,如果具体包捆输入由另一个包捆输出的包,则所述具体包捆为其包基于所述另一个包捆的包捆。
17.根据权利要求13所述的电子设备,其中,如果具有线程的第二个包捆的线程的即时终止使具体包捆的资源处于不一致的状态,则所述具体包捆为其线程基于所述第二包捆的包捆。
18.根据权利要求13所述的电子设备,其中,所述存储单元还包括用于将所述终止集的所述包捆通知给用户的计算机代码。
全文摘要
一种用于定义可扩展可下载的服务应用程序的包捆的终止集的系统和方法。对于每个有待分析的包捆,对所有与所选择的包捆共享包的包捆进行定位。也对所有线程基于所选择的包捆的包捆进行定位。然后将定位后的包捆添加到有待分析的包捆组中,并将其添加到有待终止的包捆组中。然后可以对终止集中的包捆进行终止,这使得能够实现完全的资源回收,即使对于并不处于ACTIVE状态但是仍然消耗资源的那些包捆也是如此。
文档编号H04Q7/32GK1855057SQ20061007690
公开日2006年11月1日 申请日期2006年4月25日 优先权日2005年4月25日
发明者丹尼尔·费伊, 安德拉斯·博罗斯 申请人:诺基亚公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1