CN101387956A - 可扩展地实现非功能逻辑的方法和设备及其*** - Google Patents
可扩展地实现非功能逻辑的方法和设备及其*** Download PDFInfo
- Publication number
- CN101387956A CN101387956A CNA2007101536919A CN200710153691A CN101387956A CN 101387956 A CN101387956 A CN 101387956A CN A2007101536919 A CNA2007101536919 A CN A2007101536919A CN 200710153691 A CN200710153691 A CN 200710153691A CN 101387956 A CN101387956 A CN 101387956A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- definition
- strategy
- registration table
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/316—Aspect-oriented programming techniques
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种与功能逻辑相分离地且可扩展地实现非功能逻辑的方法和设备及其***和计算机程序产品,所述方法包括步骤:基于加载的策略需求配置获得策略与所需的插件之间的关联关系;根据所获得的关联关系,产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;以及基于插件上下文定义而产生插件上下文对象,其中,所述插件上下文对象是实例化的插件上下文定义。根据本发明的方法使得能够根据应用配置对基础架构服务插件进行隐式调用,避免了查询插件注册表并在插件调用期间获得更好的性能。
Description
技术领域
本发明涉及软件开发平台的实现,更具体地,涉及一种与功能逻辑相分离地且可扩展地实现非功能逻辑的方法和设备及其***。
背景技术
当今商业应用不够灵活的一个重要原因在于功能关注点与非功能关注点的紧密且不可管理地纠缠在一起,其中功能关注点是指商业功能和逻辑,而非功能关注点是指诸如性能、安全、监控、可扩展性等方面。在程序代码中功能关注点和非功能关注点的交叉极大地提高了复杂度,从而使得很难理解、构造、扩展和重用,例如:
—理解方面:商业逻辑代码和NFR(non-functionrequirement,非功能需求)相关代码彼此编织,从而使得难以从单一视角理解该代码;
—构造方面:需要谨慎地开发代码以考虑到功能和非功能方面,从而需要更大的工作量和更多的技能;
—可扩展方面:当功能或非功能需求变化时改变代码是相当困难的;
—重用方面:单纯地重用功能或非功能代码很困难。
因此,如下面将更详细地解释的那样,关注点的分离逐渐成为面向方面编程(Aspect Oriented Programming,AOP)、J2EE(JavaTM2 Platform Enterprise Edition Specification,JavaTM 2平台企业编辑规范)等现代软件技术主要目标和途径。然而,这些技术的利用仍然面临极大的约束。一方面,AOP只能处理简单的NFR任务,如日志。另一方面,尽管将容器引入到J2EE使其能够处理复杂的NFR问题(如,事务),添加这种NFR支持通常是一件耗时的工作,其需要对容器的实现有很好地了解并具有相关的技能。在当今的J2EE容器中支持定制和专门化NFR支持是相当困难的,使得在J2EE中仅仅支持一些通用NFR,从而留下其它NFR仍与功能代码混在一起。
AOP是由Xerox PARX公司于20世纪90年代提出的一种编程范式。AOP使开发者能够分离关注点。诸如日志、安全检查、事务管理等的很多非功能服务与功能服务分离开来。同时,这些非功能服务可以由功能服务共享。一旦非功能行为发生改变,不需要修改这些功能服务,而仅需要改变非功能服务。
根据来自AOSD(Aspect-Oriented Software Development,面向对象的软件开发,对其的相关介绍在因特网上的网址http://aosd.net上可以得到)的调查,有近100种AOP实现。对于基于Java的AOP实现,有超过20种实现。在此列出其中几种比较成熟的AOP实现:
1.AspectJ
AspectJ(商标)(对其的相关介绍在因特网上的网址http://www.eclipse.org/aspectj上可以得到)是一种通用的对Java的面向方面扩展。在部署之前,AspectJ在编译时进行编织。AspectJ是一种静态编织,其借助预编译器对源代码进行增强。AspectJ是成熟的AOP实现,但是它很复杂并且需要专用的Java编译器。
2.AspectWerkz
AspectWerkz(商标)(对其的相关介绍在因特网上的网址http://aspectwerkz.codehaus.org上可以得到)是一种动态的AOP框架。AspectWerkz修改Java字节码以实现方面编织。编织发生在两个不同的阶段中,其中一个阶段是类加载阶段,另一个阶段是激活阶段。
3.SpringFramework
SpringFramework(商标)(对其的相关介绍在因特网上的网址http://www.springframework.org/docs/wiki/Spring AOP Framework .html上可以得到)是一种基于动态代理的AOP框架,其中动态代理来自于代理设计模式。动态代理不需要为每个活动的业务对象生成代理。仅需要为将是活动的接口和代理实现代理生成,并且运行时将生成代理对象。SpringFramework缺省使用由JDK提供的代理机制。
4.JBoss AOP
JBoss AOP(商标)(对其的相关介绍在因特网上的网址http://www.jboss.org/products/aop上可以得到)使用Javassist来改变字节码以在类加载期间实现动态编织。
对于已知的AOP实现,非功能部分(方面)仍然由代码编写而成。在运行时或编译时将各个方面与功能代码编织在一起以形成混合代码。因而,每个方面都将与功能代码一起加载到内存中。如果有几个功能代码使用同一方面并且这些功能代码都在内存中,则内存将有该方面的几个副本。此外,还没有使用插件框架来为方面提供扩展机制的AOP实现。
在例如J2EE(JavaTM 2平台企业编辑规范,v1.4)容器(对其的相关介绍在因特网上的网址http://java.sun.com上可以得到)的一些应用容器中,一些经常被应用程序使用的非功能部分被分离出来由容器提供。目前,J2EE容器支持的非功能包括认证、事务、日志等。然而,目前的J2EE不提供扩展机制和框架以使第三方扩展这些非功能服务实现和将其编织到应用中。
Mayer等人在其2002年发表的标题为“Lightweightplug-in-based application development”的书中,提出了插件概念作为设计模式(所述设计模式具有Gamma等人1995年发表的、标题为“Design Patterns:Elements of Reusable Object-Oriented Software”的书中提出的形式),并且给出了在Java中的示例实现。其体系结构包括加载类和识别那些使用反射将已知的接口实现为主接口的类的插件管理器,其相关内容在Green等人于1997-2001年在SunMicrosystems,Inc.中发表的、标题为“The Reflection API”的技术报告中做了详细介绍,所述文章在因特网上的网址http://java.sun.com/docs/books/tutorial/reflect/上可以得到。Mayer等人提出的示例实现允许使用多个插件,还可能用不同的接口,来扩展一个应用,但是没有提及将插件添加到其它插件中。
PluggableComponent是提供一种用于在运行时交换组件的基础架构或体系结构的模式,其相关内容在于1999年在InEuroPLoP’99上发表的、标题为“Pluggable Component-A Patternfor Interactive System Configuration”的文章中做了详细介绍。该体系结构特征在于管理不同类型的PluggableComponent的注册表。该注册表由配置工具用来提供管理员可以用来配置其应用的可用组件的列表。
Eclipse平台是为构造集成开发环境而设计的,其相关内容在Object Technology International,Inc.于2001年7月发表的、标题为“Eclipse Platform Technical Overview”的技术报告中做了详细介绍,所述文章在因特网上的网址http:// www.eclipse.org/whitepapers/eclipse-overview.pdf上可以得到。Eclipse平台建立在用于发现、集成和运行被称为插件的模块的机制上。任何插件自由定义新的扩展点(对其的描述也可以在上述网址得到)以及提供新的API以供其它插件使用。插件可以扩展其它插件的功能以及扩展内核。这提供了创建更复杂配置的灵活性。
然而,所有这些插件框架都作用在应用层上。来自用户的请求给出了应当包括哪些插件以满足该请求的指示符。然而在应用容器中,仅仅根据用户请求,不能直接得到有关应当调用哪些非功能插件的信息。
在2007年5月31日公布的、公布号为US2007/0124797A1的、Gupta等人的美国专利申请中提出了一种在网络业务环境中创建、管理、执行策略的方法以及使用该方法的***,其意图也是要将功能逻辑与非功能逻辑分离开来。所述***包括策略管理器、策略执行器、客户端和服务。客户端包括请求服务的软件。服务是网络服务,例如,诸如登录过程的应用或可操作(或功能)过程和消息的接口和加密。策略管理器用于指定功能,诸如日志、认证、加密、高速缓存等,这些不是核心商业逻辑,但是确实提供了非功能贡献。策略管理器用于分离商业关注点和非商业关注点。策略执行器用于监视和执行经由策略管理器配置的策略。在该***中,在OSI(开放***互连)7层模型中的应用层中实现策略管理器,并且在低层执行所创建的策略。在该***中,没有对网络低层做任何改变。在该***中,可以将策略实现为消息的***从而将策略无缝地引入消息流路径中。或者,将策略部署到网关和服务代理中。由网关和代理拦截消息以实现相应的策略。由上述内容可知,该专利申请中公开的***通过策略管理器来配置和满足非功能需求,然而它并没有提供一个可扩展的方式来允许开发者扩展和定制非功能需求的支持。此外,该专利申请中公开的方法将策略管理器置于客户端和后端服务之间,实际上只能对服务接口访问进行控制,对多个服务之间的访问进行控制则需要相应添加多个策略管理器,从而增加了网络实现的复杂度并提高了实现成本和时间。
因此,现有技术中存在对方便快捷且可扩展地分离功能逻辑和非功能逻辑的机制的需求。
发明内容
为了克服现有技术中存在的上述问题,本发明提出了一种与功能逻辑相分离地且可扩展地实现非功能逻辑的方法和设备及其***和计算机程序产品。
为了实现上述目的,本发明提供了一种与功能逻辑相分离地且可扩展地实现非功能逻辑的方法,包括步骤:基于加载的策略需求配置获得策略与所需的插件之间的关联关系;根据所获得的关联关系,产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;以及基于插件上下文定义而产生插件上下文对象,其中,所述插件上下文对象是实例化的插件上下文定义。
为了实现上述目的,本发明还提供了一种与功能逻辑相分离地且可扩展地实现非功能逻辑的设备,包括:应用装载器,用于将应用的策略需求配置加载到内存;策略附加器,基于加载的策略需求配置获得策略与所需的插件之间的关联关系,以及根据所获得的关联关系,产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;和应用构造器,基于插件上下文定义而产生插件上下文对象,其中,所述插件上下文对象是实例化的插件上下文定义。
为了实现上述目的,本发明还提供了一种分离功能逻辑与非功能逻辑的***,包括:应用层实体,用于供用户实现功能逻辑并利用基础架构服务插件层实体提供的插件;基础架构服务插件层实体,用于利用应用运行时层实体的服务,实现所述插件;以及应用运行时层实体,用于实现上述方法以供所述基础架构服务插件层实体调用。
为了实现上述目的,本发明还提供了一种计算机程序产品,该计算机程序产品包括存储在计算机可读存储介质中的程序代码,该程序代码的执行实现了根据本发明的方法。
根据本发明的优选实施例,为基础架构服务提供方提供了抽象层,将应用的非功能逻辑与应用的功能逻辑分离开来,并且使得能够灵活地改变应用的非功能配置而不用重新编译、再部署该应用。
根据本发明的优选实施例,对运行时构造子进行一些修改以添加一些运行时扩展点,诸如创建组件实例之前或之后的扩展点Before(After)CreateComponentInstance、调用组件实例之前或之后的扩展点Before(After)InvokeServiceMethod等。实际上,大多数基础架构服务,例如,日志、安全、事务等,在这些运行时扩展点的时间段上活动。换言之,通过扩展这些扩展点,可以实现大多数基础架构服务。
根据本发明的优选实施例,引入了策略(非功能需求)注册表和/或插件注册表。策略注册表存储插件所支持的策略,而策略注册表存储所有插件和维护插件之间的关系,例如,扩展关系和/或依赖关系。
根据本发明的优选实施例,改变应用装载过程以将应用的策略配置映射到插件的依赖关系上。此外,所获得的插件的依赖关系被存储在插件上下文实体中,其中所述插件上下文实体附接于应用的相应的运行时对象上。这样,可以直接定位所依赖的插件,而不需要在应用的执行期间查询策略注册表和插件注册表。
根据本发明的优选实施例,能够方便快捷且可扩展地实现应用的功能逻辑和非功能逻辑的分离。
此外,根据本发明的优选实施例,在应用执行期间相关的插件将被直接调用无需查询注册表进行定位从而提高了运行性能。
与AOP技术相比,本发明可以保持对应用的全局综览,从而,可以实现事务的复杂策略等。而且,可以以可扩展的方式开发服务于策略的基础架构服务。
与在当前应用容器(例如,Java)中的策略支持相比,本发明可以以可扩展的方式开发基础架构服务,同时可以仅由J2EE容器提供商进行对当前应用容器中基础架构服务的改变或扩展。
与传统的扩展机制相比,本发明使得能够根据应用配置对基础架构服务插件进行隐式调用。
附图说明
从下面结合附图的详细描述中,本发明将会更易于理解,其中,相同的附图标记表示相同的结构元素,并且,附图中:
图1示出了根据本发明的支持功能逻辑与非功能逻辑相分离的***体系结构图;
图2示出了基于图1所示的***体系结构实现期望的应用的流程图;
图3是示出根据本发明的***体系结构进行的应用引导过程的信息流图;
图4是示出根据本发明的***体系结构进行的应用引导过程的流程图;
图5是示出运行时扩展点和运行时应用对象之间的关系的图;
图6是示例性地示出在插件上下文中插件之间的扩展关系的图;
图7是示例性地示出在插件上下文中插件之间的依赖关系的图;和
图8示意性地示出了其中可以实现本发明的实施方式的计算机***。
具体实施方式
下面,参考图1描述根据本发明的支持功能逻辑与非功能逻辑的分离并实现非功能逻辑的***的***体系结构。
如图1所示,***体系结构从下至上分为3层,即,应用运行时层、基础架构服务插件层和应用层。
应用运行时层包括两个子层,即,应用运行时核心子层117和基础架构服务插件框架子层115。
在应用运行时核心子层117中,包括如下部分:应用装载器127、应用构造器129、和应用构造子单元131。应用构造器129为应用的组件生成运行时对象以及组件之间的链接。在应用的引导期间(即,准备好运行期间)使用应用构造器129。应用构造子单元131用于创建组件实例或建立组件实例之间的通信。在应用的运行期间使用应用构造子单元131。上述各部分除了具有本领域技术人员所公知的功能之外,为了实现本发明还对其进行了一些修改,其中,应用构造子单元131被修改以添加运行时扩展点,诸如,BeforeComponentInstanceCreation和AfterComponentInstanceCreation等,其中所述运行时扩展点是指供应用运行时核心子层117调用的扩展点。从对于Eclipse的介绍中可知,扩展点是指在应用中提供的某一个点,通过该点第三方可以在应用中添加其自己的功能模块来扩展原有的应用。应用装载器127被修改以调用下面将描述的策略附加器125,策略附加器125通过基于来自应用装载器127的策略需求配置查询下面将描述的插件注册表,将应用的策略配置映射到支持的插件。应用构造器129被修改以不仅产生应用运行时对象,而且根据来自策略附加器的输入而产生相关的插件上下文。所谓的插件上下文包括插件所提供的服务以及对与其有联系的其它插件的引用。
在基础架构服务插件框架子层115中,包括如下部分:插件注册表121和策略附加器125。可选地,还包括策略注册表119和策略匹配器123。策略注册表119存储了插件所支持的策略以及策略之间的关系,例如,策略的包含关系,如个人身份认证包括口令认证、指纹认证、虹膜认证等。实际上,策略注册表119定义了***所支持的策略能力。而插件注册表121存储了有关插件的信息以及插件之间的关系。该关系,例如,包括插件之间的扩展关系和/或依赖关系。根据本发明,策略附加器125可以直接查询插件注册表121而将应用的策略配置映射到支持的插件,并返回策略需求配置与支持的插件之间的关联关系。在这种情况下,对策略需求配置的定义必须具体到每个插件,也就是说,对插件注册表的入口定义更加具体,这相对复杂且比较耗时。根据本发明的一个优选实施例,策略附加器125可以先将策略需求配置的定义传送给策略匹配器123,策略匹配器123从中分析出所需的策略并据此查询策略注册表119以确定本***架构是否支持所要求的策略配置。如果支持的话,才相应地查询插件注册表121而获得策略和插件之间的关联关系(即,句柄),并将其发送给策略附加器125。在这种情况下,能够提高***的运行效率并缩短引导所需的时间。
策略附加器125根据所获得的关联关系,产生应用的插件上下文定义,其中包括与所述插件实例的关联(即,句柄),并将其发送到应用构造器129。
基础架构服务插件层包括由基础架构服务开发者基于应用运行时层提供的非功能逻辑而开发的向应用层提供的各种服务插件,例如,事务107、安全109、日志111,以及其它服务插件113。所述其它服务插件113可以是在应用运行时层上可以实现的任何插件。通过扩展运行时扩展点而实现这些服务插件。
应用层包括用户(诸如,软件开发者)期望实现的各种应用,这些应用例如是航程及***点数交换***101、在线游戏103、以及其它应用105。所述其它应用105可以是需要调用基础架构服务插件层提供的服务插件的任何应用。当用户在基于本***架构的平台上实现该应用时,功能逻辑在应用层内实现,并且根据策略需求配置通过在应用构造子单元131中定义的运行时扩展点来调用基础架构服务插件,从而实现非功能逻辑。通过功能逻辑与非功能逻辑的结合,最终实现用户期望的应用。
此外,在插件中可以进一步定义指向其它插件的扩展点,以实现进一步的功能。如前面所述的,插件之间的关系包括扩展关系和/或依赖关系,且所述关系也存储在插件注册表121中。当然,根据需要,还可以定义插件之间的其他关系。在此,插件之间的扩展关系是指在一个插件中提供其它扩展点,并且在符合一定条件的情况下,才可以扩展该扩展点。依赖关系是指在运行时对一个插件的实例化依赖于另一插件的实现结果。在下面将举例说明插件之间的这两种关系。
图2示出了用户基于根据本发明的***架构实现所期望的应用的过程。
在步骤202中,用户在基于本发明的***体系结构的平台上定义功能逻辑以及策略需求配置,并将其加载到内存中。用户可以在任意编程平台上使用任意编程语言来定义功能模块,例如,用于可以在WindowsTM开发平台上使用Java语言来编写功能模块,其中,在需要调用非功能模块之处进行声明,即,给出需求描述即可。
在步骤204中,在内存中执行应用引导过程。关于步骤204的具体执行过程,后面将进行详细说明。
在步骤206中,在运行时应用构造子单元131扩展在步骤204中产生的扩展点,即,调用插件的注入点,并在运行时创建对应插件的实例以执行相应功能。
图3示出根据本发明的***体系结构中的应用引导过程中的信息流的流向。其中:
在信息流1中,包括根据功能需求和非功能需求分别定义的应用的组件功能和策略需求配置;
在信息流2中,包括根据功能需求定义的应用的组件功能;
在信息流3、4、5中,包括根据非功能需求定义的策略需求配置信息,其在应用装载器127、策略附加器125、和策略匹配器123处可能有相同或不同的形式,这根据需要而定;
在信息流6中,包括为所获得的策略和支持的插件之间的关联关系,诸如,包括实现非功能需要所需插件的描述和句柄;
在信息流7中,包括插件上下文定义,它是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;
在信息流8中,包括应用运行时对象、插件上下文对象及其关联。
下面参照图4,描述根据本发明的***体系结构中的应用引导过程。
在步骤402中,应用装载器127将应用的组件功能定义和策略需求配置加载到内存中,即,将应用包部署到应用运行时。所谓的应用运行时是指已经将应用包装载到内存中,此时,该应用包已经处于“就绪”状态,随时可以被调用。
在步骤404中,应用装载器127根据组件功能定义产生组件定义(即,功能逻辑模块),并将策略需求配置传递给策略附加器125,然后传递给策略匹配器123,在此过程中,所述策略需求配置可以根据需要有不同的形式。
应用的组件功能定义的加载和产生组件定义可以采用已有技术,例如使用SCA(服务组件体系结构)的运行环境Tuscany作为基层的应用运行就可以实现,因此省略对其的详细描述。而且,对于实现本发明目的而言,上述过程不是必需的。
在步骤406中,策略匹配器123基于策略需求配置查询插件注册表121以获得用于策略需求配置的支持的插件,并将策略和所需的插件之间的关联关系(包括该插件的描述和句柄)返回给策略附加器125。可选地,在步骤406,策略匹配器123先查询策略注册表119,以获知本***是否支持所需求的插件。如果支持的话,查询插件注册表121,并返回策略和所需的插件之间的关联关系,否则,返回异常指示。
在步骤408中,策略附加器125根据所接收的该插件的描述和句柄,为该插件产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务,其与该插件的句柄相关联,以及对与其有联系的其它插件的引用;其中,可以将所述插件上下文形成为链表的形式或树状结构,或者本领域技术人员所知的其它任何结构。
在步骤410中,应用构造器129基于组件定义而产生应用运行时对象,并基于插件上下文定义而产生插件上下文对象,并将该插件上下文对象与相应的应用运行时对象相关联,其中,所述插件上下文对象是实例化的插件上下文定义。
参照图5,其中示出了运行时扩展点和运行时应用对象之间的关系。如图5所示,应用运行时对象与多个运行时扩展点相关联,所述运行时扩展点包括两大类,一类是与服务调用有关的扩展点,诸如调用组件实例之前的扩展点BeforeInvokeServiceMethod和调用组件实例之后的扩展点AfterInvokeServiceMethod;另一类是与组件创建有关的扩展点,诸如创建组件实例之前的扩展点BeforeCreateComponentInstance和创建组件实例之后的扩展点AfterCreateComponentInstance。当与用户交互的过程中由构造子创建运行时扩展点的实例时,***插件上下文中所包含的与插件实例的关联关系而直接找到并调用对应插件。
下面,以在线支付***为例,说明本发明的参考实现。在本参考实现中,可使用SCA(服务组件体系结构)运行时环境Tuscany作为基层的应用运行时环境。在此,使用简化的伪代码以便更好地图解其后的机制。在如图1所示的基础架构服务插件层中实现作为示例的基础架构服务插件“日志”。而且,作为示例的应用,在线支付***,用来展示如何使用“日志”插件。该应用使用Paypal来提供在线支付服务,并且用户使用“日志”来记录Paypal服务的使用。
1.应用运行时核心子层117的修改
应用运行时核心子层117的修改包括修改应用构造子单元131、应用装载器127、和应用构造器129。下面给修改的伪代码加了下划线。
首先,为了使应用运行时知道Paypal组件对日志的需求并从而调用“日志”,需要如下修改运行时应用装载器127,ComponentLoader,以创建插件上下文定义:
//用于加载scdl文件的组件标签信息的Tuscany装载器
public class ComponentLoader extends LoaderExtension<ComponentDefinition<?>>{
PluginContextDefinitionpcd=null;//插件定义信息类型
public ComponentDefinition<?>load(CompositeComponent parent,
XMLStreamReader reader,DeploymentContext deploymentContext)
throws XMLStreamException,LoaderException{
... \
//解析插件定义信息
String intents=reader.getAttributeValue(null,"requires");
pcd=processListofIntent(intents);
…\
}
}
方法“ComponentLoader”将解析应用配置并识别一些关键词,如“需求”。关键词“需求”用来指定期望的基础架构服务(intent)。方法“processListofIntent”将调用策略附加器125来产生对应的插件上下文定义。
其次,需要如下修改应用构造器129,JavaComponentBuilder,来将插件上下文与对应的组件相关联:
//用于根据组件定义建立组件的Tuscany核心API
public class JavaComponentBuilder extends
ComponentBuilderExtension<JavaImplementation>{
public AtomicComponent build(CompositeComponent parent,
ComponentDefinition<JavaImplementation>definition,
DeploymentContext deployment)throws BuilderConfigException{
...\
JavaAtomicComponent component=new JavaAtomicComponent(definition
.getName(),configuration);
//创建插件上下文
component.createPluginContext(definition.getPluginContextDefinition());
}
}
最后,为了使运行时可扩展,需要指明在运行时应用构造子单元131中的运行时扩展点。为了实现在调用服务之前触发的扩展点“BeforeInvokeServiceMethod”,需要在获得组件实例并调用其服务之前对扩展点“BeforeInvokeServiceMethod”进行声明,然后,在实现应用构造子单元131时,在从应用构造器129获得的插件上下文中找出所有插件扩展的”System.BeforeInvokeServiceMethod”扩展点,并且对于每个插件,向其释放链接添加其子插件上下文并运行该插件。下面示出了对服务调用类PojoTargetInvoker的修改:
//用于调用组件服务的Tuscany核心API
public abstract class ProjoTargetInvoker implements TargetInvoker{
public Object invokeTarget(final Object payload)
throws InvocationTargetException{
try{
...\
//触发扩展点管理功能
processBeforeInvokeServiceMethod(payload,instance);
Object ret;
//获得组件实例并调用其服务
if(payload!=null &&!payload.getClass().isArray()){
ret=operation.invoke(instance,payload);
}else{
ret=operation.invoke(instance,(Object[])payload);
}
return ret;
}catch(IllegalAccessException e){
...\
}
}
//激活扩展其扩展点的所有插件
public void processBeforeInvokeServiceMethod(object payload,
AtomicComponentExtension instance){
//从组件实例获得插件上下文
PluginContext pc=instance.getPluginContext();
//从插件上下文中找出所有扩展了”System.BeforeInvokeServiceMethod”扩展点的 插件
List<Extension>elist=pc.getExtension(“System.BeforeInvokeServiceMethod”);
//执行所有插件
For(Extension e:elist)
{
e.run();
}
}
}
通过使用方法“processBeforeInvokeServiceMethod”,可以获得当前组件实例的插件上下文。根据该上下文,可以获得对插件“日志”的引用“e”,其扩展了扩展点“BeforeInvokeServiceMethod”,接着调用“日志”。注意,对“日志”的调用发生在服务调用operation.invoke()之前。
2.基础架构服务插件框架子层115的实现
基础架构服务插件框架子层115包括插件注册表121、策略匹配器123和策略附加器125。可选地,还包括策略注册表119。
首先,插件注册表121维护插件的信息(例如,所提供的策略)和插件之间的关系(例如,扩展关系和/或依赖关系)。以下示出了按照策略来索引插件以及按照扩展点来索引插件的插件注册表121的实现:
//定义索引插件的注册表
public class PluginRegistry{
public List<Plugin>getPluginsByPolicy(Policy policy);
public List<Plugin>getPluginsByExtensionPoint(ExtensionPoint ep);
}
插件类维护所提供的插件的扩展和扩展点。以下示出了在插件中对扩展点的扩展以及提供与该插件有扩展关系和依赖关系的插件的扩展点的实现:
//插件定义
public class Plugin{
public List<Extension>getExtensions();
public List<ExtensionPoint>getExtensionPoints();
public List<Plugin>getDependentPlugins();
}
其次,策略注册表119维护基础架构服务的需求和策略之间的映射,其中策略描述了一些可以应用于服务组件或服务组件之间的交互的能力或约束。以下示出了根据需求获得策略的实现:
//定义索引策略的注册表
public class PolicyRegistry{
public Policy getPolicy(String intent);
}
再次,策略匹配器123负责找到用于需求的支持的插件。以下示出了首先根据需求获得策略其后根据策略获得插件的实现:
//提供策略和插件之间的匹配器
public class PolicyMatcher{
public List<Plugin>getPlugins(String intent){
Policy policy=PolicyRegistry.getPolicy(intent);
return PluginRegistry.getPluginsByPolicy(policy);
}
}
最后,策略附加器125为需求产生支持的插件的上下文定义。方法“generatePluginContextDefinition”为插件构造插件上下文定义,而方法“buildPluginContextChain”根据插件的关系将插件上下文定义组织为链表并返回该链表的首部。上述方法根据每个策略找出所有插件,然后从插件注册表121中找出相应的插件定义,并且建立插件定义上下文。
//提供根据策略获得插件定义上下文的机制
public class PolicyAttacher{
public List<PluginContextDefinition>getPluginContextDefinition(String intents){
List<String>intentList=getIntents(requires,policySets);
List<PluginContextDefinition>result=new List<PluginContextDefinition>;
for(String intent:intentList){
//根据每个策略找出所有插件
List<Plugin>plugins=PolicyMatcher.getPlugins(intent);
//找出相应的插件定义
List<PluginContextDefinition>pluginContextDefinitions=
generatePluginContextDefinition(plugins)
//建立插件定义上下文
PluginContextDefinition pluginContextDefinitionHeader=
buildPluginContextChain(pluginContextDefinitions,plugi
ns);
result.add(pluginContextDefinition);
}
return result;
}
}
方法“PluginContextDefintion”提供了一种为所需的插件层次结构建立上下文树的方式。
//定义插件上下文定义
public class Plugin ContextDefinition extends ModelObject{
public PluginContextDefinition(Plugin plugin);
public void addChild(PluginContextDefinition pcd);
public List<PluginContextDefinition>getChildren();
public List<Extension>getExtensions(ExtensionPoint ep);
}
3.日志插件实现
插件的配置指定了其扩展的扩展点以及其提供的扩展。在此,示出了与“日志”插件有扩展关系的扩展点“过滤器”。下面,说明了“日志”插件的配置。
<composite xmlns=http://www.osoa.org/xmlns/sca/1.0
xmlns:system=http://incubator.apache.org/tuscany/xmlns/system/1.0
name=”com.ibm.crl.plugin.log”>
<component name=”LogService”>
<implementation.j ava
class=”com.ibm.crl.plugin.log.LogProcessor”/>
<extensionid=”com.ibm.crl.plugin.log.LogProcessor”
extension-point=”system.BeforeInvokeServiceMethod”/> //扩展
<extension-pointid=”com.ibm.crl.plugin.log.Filter”
interface.class=”com.ibm.crl.plugin.log.IFilter”/> //扩展点
</component>
</composite>
“日志”插件通过扩展扩展点“BeforeInvokeServiceMethod”,日志服务调用相关的信息。下面示出了“日志”插件的具体实现:
public class LogProcessor implements BeforeInvokeServiceMethod{
private Logger log=Logger.getLogger(this.getClass());//记录器启动
public void run(){
log.info("componentname:"+componentname+"operation:"+operation+"args:"+args+"Timestamp:"+System.currentTimeMillis());//记录器记录
}
...\
}
4.相关的代码和在线支付***的配置
下面示出了具有日志代码的Paypal组件的伪代码。
public class EPaypelServiceImpl implements EPaypelService{
private Logger log=Logger.getLogger(this.getClass());//日志代码
... \
public List requestPayment(String companyName)
{
log.info("Classname:"+this.getClass()+"operation:requestPayment"+"args:"+companyName+"timestamp:"+System.currentTimeMillis());//日志代码
doSomething();
... \
}
...\
}
使用“日志”插件,可以简单地将日志需求添加到在线支付应用的配置中,从而,从应用代码中移除日志代码。以下示出了在线支付***的配置,并且日志需求用下划线指示。
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="Online Payment">
...\
<component name="EPaypelService"requires="log">
<implementation.java
class="com.ibm.crl.paypel.EPaypelServiceImpl"/>
<reference name="paymentManagementOagis">
PaymentManagementComponent
</reference>
</component>
...\
</composite>
下面还以上述“日志”插件为例,说明插件之间的扩展关系。
假设“日志”插件提供日志组件实例创建和服务方法调用的能力。而且,“日志”插件提供扩展点“过滤器”以添加过滤条件。
同时,“ABC过滤器”插件扩展“日志”插件的“过滤器”扩展点,以便仅日志符合“ABC”条件的信息。
图6示出了如何使用插件上下文来定位插件的插件,而不用在应用的执行期间额外查询策略注册表119和插件注册表121。
插件上下文存储插件的扩展点,在本示例中,为“过滤器”扩展点。而且,该扩展点“过滤器”指向另一插件上下文,其存储了所需扩展点的扩展“ABC过滤器”,即,扩展了该扩展点“过滤器”并在此需要插件“ABC过滤器”。
下面还以上述“日志”插件为例,说明插件之间的依赖关系。
假设存在“监视器”插件,其为每个身份提供监视组件实例创建和方法调用的能力。此外,插件提供服务以获得所选身份的当前组件实例数目。
同时,“资源管理”插件提供限制每个身份的最大组件实例数目的能力。该插件支持“监视器”插件以获得在为每个身份创建组件实例之前获得当前组件实例数目。
图7示出了如何将插件上下文用于插件的依赖插件,而不需要在应用的执行期间额外查询策略注册表119和插件注册表121。
插件上下文存储了插件所提供且所需要的服务。而且,还存储了对依赖插件(即,提供所需服务的插件)的引用。在本示例中,插件所提供的服务为限制最大组件实例数目,而其所需要的服务为“监视器”扩展点来提供当前的实例数目。该扩展点“监视器”指向另一插件上下文,其存储了所需扩展点的扩展“监视器”,即,扩展了该扩展点“监视器”并在此需要插件“监视器”。
图8示意性地表示了其中可以实现本发明的实施方式的计算机***。图8中所示的计算机***包括CPU(中央处理单元)801、RAM(随机存取存储器)802、ROM(只读存储器)803、***总线804,HD(硬盘)控制器805、键盘控制器806、串行接口控制器807、并行接口控制器808、显示器控制器809、硬盘810、键盘811、串行外部设备812、并行外部设备813和显示器814。在这些部件中,与***总线804相连的有CPU 801、RAM 802、ROM 803、HD控制器805、键盘控制器806,串行接口控制器807,并行接口控制器808和显示器控制器809。硬盘810与HD控制器805相连,键盘811与键盘控制器806相连,串行外部设备812与串行接口控制器807相连,并行外部设备813与并行接口控制器808相连,以及显示器814与显示器控制器809相连。
图8中每个部件的功能在本技术领域内都是众所周知的,并且图8所示的结构也是常规的。这种结构不仅用于个人计算机,而且用于任何支持用户开发其所需要的应用的开发平台。在不同的应用中,图8中所示的某些部件可以被省略。图8中所示的整个***由通常作为软件存储在硬盘810中、或者存储在EPROM或者其它非易失性存储器中的计算机可读指令控制。软件也可从网络(图中未示出)下载。或者存储在硬盘810中,或者从网络下载的软件可被加载到RAM 802中,并由CPU 801执行,以便完成由软件确定的功能。
尽管图8中描述的计算机***能够支持根据本发明的方法,但是该计算机***只是计算机***的一个例子。本领域的熟练技术人员可以理解,许多其它计算机***设计也能实现本发明。
本发明还可以实现为一种例如由图8所示计算机***所使用的计算机程序产品,其包含有用于本发明的方法的代码。在使用之前,可以把代码存储在其它计算机***的存储器中,例如,存储在硬盘或诸如光盘或软盘的可移动的存储器中,或者经由因特网或其它计算机网络进行下载。
从以上描述中,本发明的很多特征和优点将清楚,并且,由此,意图由所附权利要求涵盖本发明的所有这样的特征、以及优点。此外,由于对于本领域的技术人员来说、将容易出现大量修改和改变,所以,不应将本发明限于如所示出并描述的确切的构造和操作。由此,可将所有适用的修改和等价物视为落在本发明范围内。
Claims (19)
1.一种与功能逻辑相分离地且可扩展地实现非功能逻辑的方法,包括步骤:
基于加载的策略需求配置获得策略与所需的插件之间的关联关系;
根据所获得的关联关系,产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;以及
基于插件上下文定义而产生插件上下文对象,其中,所述插件上下文对象是实例化的插件上下文定义。
2.如权利要求1所述的方法,其中,所述基于加载的策略需求配置获得策略与所需的插件之间的关联关系的步骤还包括:
基于策略需求配置查询包含插件的描述和插件之间的关系的信息的插件注册表而获得策略和所需的插件之间的关联关系。
3.如权利要求1所述的方法,其中,所述基于加载的策略需求配置获得策略与所需的插件之间的关联关系的步骤还包括:
基于策略需求配置查询包含插件所支持的策略以及策略之间的关系的信息的策略注册表;以及
基于所述策略注册表的查询结果,进一步通过查询插件注册表将所述策略需求配置映射到相应的插件以获得策略和所需的插件之间的关联关系,其中所述插件注册表包含插件的描述和插件之间的关系的信息。
4.如权利要求1-3中任一项所述的方法,其中,还包括:
定义应用的策略需求配置。
5.如权利要求4所述的方法,其中,还包括:
定义应用的组件功能;以及
根据加载的组件功能定义产生组件定义;
6.如权利要求5所述的方法,其中,还包括:
基于组件功能定义而产生应用运行时对象;以及
将该插件上下文对象与相应的应用运行时对象相关联。
7.如权利要求1或6所述的方法,其中,所述方法还包括步骤:
在运行时根据该插件上下文对象而直接找到并调用该插件以实现该插件的功能。
8.如权利要求1或6所述的方法,其中,所述插件上下文被形成为链表的形式或树状结构。
9.如权利要求2或6所述的方法,其中,所述插件注册表还包括对插件之间的扩展关系和/或依赖关系的定义,其中所述扩展关系是指在一个插件中还包括对指向另一插件的扩展点的定义,而所述依赖关系是指一个插件的实例化依赖于另一插件的实现。
10.一种与功能逻辑相分离地且可扩展地实现非功能逻辑的设备,包括:
应用装载器,用于加载应用的策略需求配置;
策略附加器,基于加载的策略需求配置获得策略与所需的插件之间的关联关系,以及根据所获得的关联关系,产生插件上下文定义,所述插件上下文定义是与该插件有关的插件上下文的一部分,其中所述插件上下文定义了插件所提供的服务以及对与其有联系的其它插件的引用;和
应用构造器,基于插件上下文定义而产生插件上下文对象,其中,所述插件上下文对象是实例化的插件上下文定义。
11.如权利要求10所述的设备,其中,所述设备还包括:
插件注册表单元,用于存储包含插件的描述和插件之间的关系的信息的插件注册表;
其中,所述策略附加器基于策略需求配置查询所述插件注册表而获得策略和所需的插件之间的关联关系。
12.如权利要求10所述的设备,其中,所述设备还包括:
策略注册表单元,用于存储包含插件所支持的策略以及策略之间的关系的信息的策略注册表;
其中,所述策略附加器基于策略需求配置查询策略注册表,并基于所述策略注册表的查询结果,进一步通过查询插件注册表将所述策略需求配置映射到支持的插件以获得策略和所需的插件之间的关联关系,其中所述插件注册表包含插件的描述和插件之间的关系的信息。
13.如权利要求10至12中的任一个所述的设备,其中,
所述应用装载器还加载应用的组件功能。
14.如权利要求13所述的设备,其中,
所述策略附加器还基于组件功能定义而产生应用运行时对象。
15.如权利要求14所述的设备,其中,
所述应用构造器将该插件上下文对象与相应的应用运行时对象相关联。
16.如权利要求10或14所述的设备,其中,所述设备还包括:
应用构造子单元,用于在运行时根据该插件上下文对象而直接找到并调用该插件以实现该插件的功能。
17.如权利要求10或14所述的设备,其中,所述插件上下文被形成为链表的形式或树状结构。
18.如权利要求11所述的设备,其中,所述插件注册表还包括对插件之间的扩展关系和/或依赖关系的定义,其中所述扩展关系是指在一个插件中还包括对指向另一插件的扩展点的定义,而所述依赖关系是指一个插件的实例化依赖于另一插件的实现。
19.一种分离功能逻辑与非功能逻辑并实现非功能逻辑的***,包括:
应用层实体,用于供用户实现功能逻辑并利用基础架构服务插件层实体提供的插件;
基础架构服务插件层实体,用于利用应用运行时层实体的服务,实现所述插件;以及
应用运行时层实体,用于实现权利要求1至9所述的方法以供所述基础架构服务插件层实体调用。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710153691A CN101387956B (zh) | 2007-09-14 | 2007-09-14 | 可扩展地实现非功能逻辑的方法和设备及其*** |
US12/209,256 US8572562B2 (en) | 2007-09-14 | 2008-09-12 | Method, apparatus and systems thereof for implementing non-function logic extensibly |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710153691A CN101387956B (zh) | 2007-09-14 | 2007-09-14 | 可扩展地实现非功能逻辑的方法和设备及其*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101387956A true CN101387956A (zh) | 2009-03-18 |
CN101387956B CN101387956B (zh) | 2012-08-29 |
Family
ID=40455945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710153691A Active CN101387956B (zh) | 2007-09-14 | 2007-09-14 | 可扩展地实现非功能逻辑的方法和设备及其*** |
Country Status (2)
Country | Link |
---|---|
US (1) | US8572562B2 (zh) |
CN (1) | CN101387956B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012025026A1 (zh) * | 2010-08-24 | 2012-03-01 | 腾讯科技(深圳)有限公司 | 插件扫描方法和*** |
CN103649915A (zh) * | 2013-07-31 | 2014-03-19 | 华为技术有限公司 | 关联插件管理方法、设备及*** |
CN105099739A (zh) * | 2014-05-15 | 2015-11-25 | ***通信集团公司 | 一种基于插件式软件部署方法、装置及应用服务器 |
CN105262614A (zh) * | 2015-09-08 | 2016-01-20 | 北京思特奇信息技术股份有限公司 | 一种基于服务插件的业务处理方法及其*** |
CN105700881A (zh) * | 2016-01-12 | 2016-06-22 | 成都中科合迅科技有限公司 | 应用模块调用方法及装置 |
CN109388401A (zh) * | 2018-08-24 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 一种服务分发方法及*** |
CN109426493A (zh) * | 2017-08-21 | 2019-03-05 | 西门子公司 | 处理应用程序编程接口的描述信息的方法、装置和设备 |
CN111538492A (zh) * | 2020-04-24 | 2020-08-14 | 浙江大搜车软件技术有限公司 | 策略实现的调用方法及装置、电子设备、存储介质 |
CN112052051A (zh) * | 2020-08-31 | 2020-12-08 | 北京嘀嘀无限科技发展有限公司 | 插件处理方法、装置、设备及存储介质 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236579A (zh) * | 2010-04-26 | 2011-11-09 | 捷达世软件(深圳)有限公司 | 对象传输打包***及方法 |
JP5413357B2 (ja) * | 2010-11-30 | 2014-02-12 | カシオ計算機株式会社 | サーバ装置、シンクライアントシステムおよびプログラム |
US8583788B2 (en) | 2011-04-20 | 2013-11-12 | Novell, Inc. | Techniques for auditing and controlling network services |
US9213816B2 (en) * | 2012-12-24 | 2015-12-15 | Unisys Corporation | Protocol for biometric device capture and quality analysis |
US9450820B2 (en) * | 2014-02-26 | 2016-09-20 | International Business Machines Corporation | Dynamic extensible application server management |
CN111813385B (zh) * | 2020-07-07 | 2023-09-22 | 赞同科技股份有限公司 | 一种基于Web应用的页面插件化方法、装置及设备 |
CN112162793B (zh) * | 2020-09-30 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | 结构化视图业务分离的方法、存储介质、电子设备及*** |
CN113176908A (zh) * | 2021-04-29 | 2021-07-27 | 广州嘉为科技有限公司 | web功能动态扩展并可热插拔方法、***、设备及介质 |
CN113313595A (zh) * | 2021-06-25 | 2021-08-27 | 中国农业银行股份有限公司 | 交易处理方法、设备、存储介质及产品 |
CN115658018B (zh) * | 2022-10-20 | 2023-08-08 | 广东云徙智能科技有限公司 | 一种中台逻辑扩展方法、***、装置及介质 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6742176B1 (en) * | 1999-06-14 | 2004-05-25 | Lycos, Inc. | Secure flexible plugin software architecture |
US7512965B1 (en) * | 2000-04-19 | 2009-03-31 | Hewlett-Packard Development Company, L.P. | Computer system security service |
US6996832B2 (en) * | 2001-05-30 | 2006-02-07 | Bea Systems, Inc. | System and method for software component plug-in framework |
US7519976B2 (en) * | 2002-05-01 | 2009-04-14 | Bea Systems, Inc. | Collaborative business plug-in framework |
CA2391733A1 (en) * | 2002-06-26 | 2003-12-26 | Ibm Canada Limited-Ibm Canada Limitee | Framework to access a remote system from an integrated development environment |
US7757268B2 (en) | 2003-07-25 | 2010-07-13 | Oracle International Corporation | Policy based service management |
WO2005022416A1 (en) * | 2003-08-21 | 2005-03-10 | The Trustees Of Columbia University In The City Of New York | Methods and systems for autonomously managing a network |
US20050251852A1 (en) * | 2003-10-10 | 2005-11-10 | Bea Systems, Inc. | Distributed enterprise security system |
US20050262362A1 (en) * | 2003-10-10 | 2005-11-24 | Bea Systems, Inc. | Distributed security system policies |
US20050102535A1 (en) * | 2003-10-10 | 2005-05-12 | Bea Systems, Inc. | Distributed security system with security service providers |
US7665071B1 (en) * | 2003-12-11 | 2010-02-16 | Sun Microsystems, Inc. | Management object model for performing management of a computer system |
US8819619B2 (en) * | 2004-03-15 | 2014-08-26 | Ramco Systems Limited | Method and system for capturing user interface structure in a model based software system |
US20060021017A1 (en) * | 2004-07-21 | 2006-01-26 | International Business Machines Corporation | Method and system for establishing federation relationships through imported configuration files |
US7698375B2 (en) * | 2004-07-21 | 2010-04-13 | International Business Machines Corporation | Method and system for pluggability of federation protocol runtimes for federated user lifecycle management |
US7562382B2 (en) * | 2004-12-16 | 2009-07-14 | International Business Machines Corporation | Specializing support for a federation relationship |
US20060230383A1 (en) * | 2005-04-12 | 2006-10-12 | Moulckers Ingrid M | Solutions dynamic runtime assembly |
US20060230382A1 (en) | 2005-04-12 | 2006-10-12 | Moulckers Ingrid M | System and method for managing a reusable set of business solution components |
US20070156913A1 (en) * | 2005-12-30 | 2007-07-05 | Hiroyuki Miyamoto | Method for enabling extension points through plug-ins |
US7478093B2 (en) * | 2006-01-30 | 2009-01-13 | International Business Machines Corporation | Design of self-adapting meta descriptors based on real use scenarios and experiences |
CN100492989C (zh) * | 2006-09-15 | 2009-05-27 | 华为技术有限公司 | 使用插件进行业务扩展的***及其方法 |
US8010991B2 (en) * | 2007-01-29 | 2011-08-30 | Cisco Technology, Inc. | Policy resolution in an entitlement management system |
CN100596074C (zh) * | 2007-02-09 | 2010-03-24 | 华为技术有限公司 | 计费模式提供方法及计费管理*** |
US8122426B2 (en) * | 2007-08-29 | 2012-02-21 | International Business Machines Corporation | Governance framework for architecture design in a service oriented enterprise |
US8250666B2 (en) * | 2008-07-03 | 2012-08-21 | Sap Ag | Method and apparatus for improving security in an application level virtual machine environment |
CN101788982B (zh) * | 2009-01-22 | 2013-03-06 | 国际商业机器公司 | 在未修改浏览器上保护Web应用的跨域交互的方法和*** |
CN101604371B (zh) * | 2009-07-22 | 2012-02-08 | 阿里巴巴集团控股有限公司 | 插件权限的控制方法及*** |
-
2007
- 2007-09-14 CN CN200710153691A patent/CN101387956B/zh active Active
-
2008
- 2008-09-12 US US12/209,256 patent/US8572562B2/en not_active Expired - Fee Related
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012025026A1 (zh) * | 2010-08-24 | 2012-03-01 | 腾讯科技(深圳)有限公司 | 插件扫描方法和*** |
CN103649915A (zh) * | 2013-07-31 | 2014-03-19 | 华为技术有限公司 | 关联插件管理方法、设备及*** |
WO2015013936A1 (zh) * | 2013-07-31 | 2015-02-05 | 华为技术有限公司 | 关联插件管理方法、设备及*** |
US9195480B2 (en) | 2013-07-31 | 2015-11-24 | Huawei Technologies Co., Ltd. | Associated plug-in management method, device and system |
CN103649915B (zh) * | 2013-07-31 | 2016-11-02 | 华为技术有限公司 | 关联插件管理方法、设备及*** |
CN105099739B (zh) * | 2014-05-15 | 2018-08-17 | ***通信集团公司 | 一种基于插件式软件部署方法、装置及应用服务器 |
CN105099739A (zh) * | 2014-05-15 | 2015-11-25 | ***通信集团公司 | 一种基于插件式软件部署方法、装置及应用服务器 |
CN105262614A (zh) * | 2015-09-08 | 2016-01-20 | 北京思特奇信息技术股份有限公司 | 一种基于服务插件的业务处理方法及其*** |
CN105700881A (zh) * | 2016-01-12 | 2016-06-22 | 成都中科合迅科技有限公司 | 应用模块调用方法及装置 |
CN109426493A (zh) * | 2017-08-21 | 2019-03-05 | 西门子公司 | 处理应用程序编程接口的描述信息的方法、装置和设备 |
CN109388401A (zh) * | 2018-08-24 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 一种服务分发方法及*** |
CN111538492A (zh) * | 2020-04-24 | 2020-08-14 | 浙江大搜车软件技术有限公司 | 策略实现的调用方法及装置、电子设备、存储介质 |
CN111538492B (zh) * | 2020-04-24 | 2023-12-19 | 浙江大搜车软件技术有限公司 | 策略实现的调用方法及装置、电子设备、存储介质 |
CN112052051A (zh) * | 2020-08-31 | 2020-12-08 | 北京嘀嘀无限科技发展有限公司 | 插件处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101387956B (zh) | 2012-08-29 |
US8572562B2 (en) | 2013-10-29 |
US20090077546A1 (en) | 2009-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101387956B (zh) | 可扩展地实现非功能逻辑的方法和设备及其*** | |
US7263686B2 (en) | System and method for automated code generation using language neutral software code | |
US7421716B1 (en) | System and method for providing composite applications | |
US20040250257A1 (en) | System and method for generator state object validation | |
US20040250258A1 (en) | System and method for rule based object navigation | |
Lagaisse et al. | True and transparent distributed composition of aspect-components | |
Anne et al. | Think: View-based support of non-functional properties in embedded systems | |
Gómez et al. | Profiling the publish/subscribe paradigm for automated analysis using colored Petri nets | |
Khan et al. | A study: selection of model metamodel and SPL tools for the verification of software product lines | |
Andrade et al. | Coordination technologies for managing information system evolution | |
US8196152B2 (en) | Container context information propagation in an aspect-oriented environment | |
Sung et al. | A component-based product data management system | |
Kufner et al. | Restful State Machines and SQL Database | |
Lau et al. | Defining and checking deployment contracts for software components | |
US20040249823A1 (en) | System and method for object navigation grammar completion | |
Rauf et al. | Beyond crud | |
US20040250259A1 (en) | System and method for incremental object generation | |
Bellur et al. | Towards a programming model and middleware architecture for self-configuring systems | |
US20040249940A1 (en) | System and method for asynchronous resource management | |
Greenwood et al. | Interactions in ao middleware | |
CA2510676A1 (en) | Distribution of services software in a network | |
Leicher et al. | External requirements validation for component-based systems | |
Bialy et al. | Dynamic process fragment injection in a service orchestration engine | |
Parr et al. | Patterns for real-world-aware and real-time solutions | |
Spies et al. | Requirements Metadata Driven Dynamic Configuration of Business Processes |
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 |