CN109254764B - 面向客户端应用程序的获取运行时软件体系结构的方法 - Google Patents

面向客户端应用程序的获取运行时软件体系结构的方法 Download PDF

Info

Publication number
CN109254764B
CN109254764B CN201811137489.1A CN201811137489A CN109254764B CN 109254764 B CN109254764 B CN 109254764B CN 201811137489 A CN201811137489 A CN 201811137489A CN 109254764 B CN109254764 B CN 109254764B
Authority
CN
China
Prior art keywords
proxy
source
created
parameter
function
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.)
Active
Application number
CN201811137489.1A
Other languages
English (en)
Other versions
CN109254764A (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.)
Fuzhou University
Original Assignee
Fuzhou University
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 Fuzhou University filed Critical Fuzhou University
Priority to CN201811137489.1A priority Critical patent/CN109254764B/zh
Publication of CN109254764A publication Critical patent/CN109254764A/zh
Application granted granted Critical
Publication of CN109254764B publication Critical patent/CN109254764B/zh
Active 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
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提出一种面向客户端应用程序的获取运行时软件体系结构的方法,包括:步骤S1:对客户端应用程序的源程序代码中的所有类进行预处理:当发现有源对象被创建时,记录当前创建的对象与创建对象的位置;步骤S2:对象的转换:采用代理模式,同步构造一个与源对象等价的代理对象,通过代理对象访问目标对象;步骤S3:获取运行时的信息:通过代理模式,为所有运行时的对象创建代理类;通过拦截器拦截所有运行时使用的类,然后通过记录调用路径的函数及数据结构来确定对象间的关系,并记录下运行时的信息。本发明通过可靠的手段获取运行时软件体系结构,提供了以读写体系结构的方式实现系统的监测和调整的途径,为系统的在线升级和演化提供了基础。

Description

面向客户端应用程序的获取运行时软件体系结构的方法
技术领域
本发明属于软件技术领域,尤其涉及一种面向客户端应用程序的获取运行时软件体系结构的方法。
背景技术
运行时软件体系结构是系统运行时刻的一个动态、结构化的抽象,描述系统当前的组成成分、各成分的状态和配置以及不同成分之间的关系。运行时体系结构与目标系统间具有动态的因果关联,即系统的变化及时体现在体系结构上,而对体系结构的修改及时影响当前系统。运行时体系结构允许开发者以读写体系结构的方式实现系统的监测和调整,是体系结构层次系统动态适应与在线演化的基础。
现如今,随着互联网的发展,出现了大量的客户端应用程序,并且数量仍然在快速增长,这些应用程序更新换代的速度也越来越快,然而它们的更新速度仍然远远不及硬件的发展速度,为了能加快应用软件的更新和演化,产生了能在客户端程序运行时,实时看到系统运行时的软件体系结构的迫切需求,目前,在现有技术当中,尚无较为可靠和成体系的具备普适性的获取运行时软件体系结构的方法。
发明内容
本发明目的在于提出一种面向客户端应用程序的获取运行时软件体系结构的方法,有利于研究人员熟悉系统,同时也能大大促进系统的升级和演化的速度。本发明采用的基本设计思路在于:对于一个给定的客户端应用程序,首先对它的源程序代码中的所有类进行预处理,即当发现有对象被创建时,就记录当前创建的对象与创建对象的位置。预处理完后进行对象的转换,这步需要用到代理模式,同步构造一个与其等价的代理对象,可为目标对象提供另外的访问方式,即通过代理对象访问目标对象。最后,获取运行时的信息。通过代理模式,为所有运行时对象创建代理类。拦截器会拦截所有运行时使用的类,然后通过一些记录调用路径的函数及数据结构来确定对象间的关系,并记录下相关信息,例如调用方法,输入参数,输出结果等等。通过上述步骤就可以在不改变软件功能和外部可见性的情况下得到系统运行时的软件体系结构。
本发明具体采用以下技术方案:
一种面向客户端应用程序的获取运行时软件体系结构的方法,其特征在于,包括以下步骤:
步骤S1:对客户端应用程序的源程序代码中的所有类进行预处理:当发现有源对象被创建时,记录当前创建的对象与创建对象的位置;
步骤S2:进行对象的转换:采用代理模式,同步构造一个与源对象等价的代理对象,通过代理对象访问目标对象;
步骤S3:获取运行时的信息:通过代理模式,为所有运行时的对象创建代理类;通过拦截器拦截所有运行时使用的类,然后通过记录调用路径的函数及数据结构来确定对象间的关系,并记录下运行时的信息。
进一步地,所述源程序代码采用java编程;
所述源对象和代理对象的关系定义为:
P=<Object, Proxy> (1)
其中,proxy为代理对象,object为源对象;
创建对象的位置和被创建的对象的关系定义为:
ObjectId=<Pos, Object> (2)
其中,pos为创建对象的位置,object为被创建的源对象;
对象声明路径定义为:
P=<Method1, Method2, … ,Methodn> (3)
Methodi为函数;
对象调用关系定义为:
G=<Object, Invoke> (4)
Invoke为对象所调用的函数;
函数的参数列表定义为:
Para=<Parameter1, Parameter2 , … , Parametern > (5)
其中,Parameteri=<Value , Type>为第i个参数,参数值为Value,参数类型为Type;
某个功能的输入、输出、调用函数序列定义为:
Func=<Input,Output,Queries> (6)
因为运行时软件体系结构是根据各个功能而相互独立的,所以对各个功能单独定义,其中,Input是用户想要执行某个功能所需填入的参数,Output是操作完成后获得的数据,Queries是调用该功能所需要执行的一系列操作,从Input获取数据,执行数据处理,将数据填充到Output中;
输入定义为:
Input={<I1,VI1 >,<I2,VI2 >…<In,VIn >} (7)
<Ii,VIi>表示第i个参数,Ii表示参数类型,VIi表示参数值;
输出定义为:
Output={<O1,VO1 >,<O2,VO2 >…<On,VOn >} (8)
<Oi,VOi >表示第i个返回的数据,Oi表示返回类型,VOi表示返回值;
执行某个功能所调用的函数序列定义为:
Queries={t1,t2,…,tn} (9)
Queries表示执行某个功能的请求序列,ti表示第i个请求;
步骤S1具体包括以下步骤:
步骤S11:扫描客户端应用程序的源程序代码,在每个主函数的开头加入以下代码:
String currentName = Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();/获取当前包名及方法名
currentObject.push(currentName);//将方法名压入栈
步骤S12:在源程序代码的每个函数开头加入以下代码:
String currentName =Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();//获取当前包名及方法名
步骤S13:在每个对象创建后加入一行函数调用,如对于对象A有:
Object A=new Object();
A = (Object) CglibFactory.getProxyInstance(A, currentName);。
进一步地,在步骤S2中,当有对象被创建时,调用代理函数为源对象创建代理对象:
根据ObjectId=<Pos, Object>赋值ObjectId为“创建对象的方法名@对象名”
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(object.getClass());
enhancer.setCallback(new MyCglibProxy(object, objectId));
// 设置回调函数存储源对象声明路径P=<Method1, Method2, … ,Methodn>
Object proxy = enhancer.create();。
进一步地,在步骤S2中,将代理对象和源对象以指定格式存储在各个表中:
将源对象和代理对象的一一对应关系P=< Object, Proxy>存储在名为objectpp的Map<Object, Object>中;
将objectId和代理对象一一对应存储在名为objectFactory的Map<String,Object>中;
将源对象和objectId一一对应存储在名为object_id_map的哈希表中。
进一步地,步骤S3具体包括以下步骤:
步骤S31:当前源对象有方法调用时,自动调用方法拦截器:
将调用方法的对象和调用的方法名存储成指定格式:
String dproxied = DoMain.object_id_map.get(proxied);//获取源对象名
String dmethod = dproxied + ':' + method.getName() + "(";
Class[] paramTypes = method.getParameterTypes();
for (Class class1 : paramTypes) { // 存储参数列表Para=<Parameter1,Parameter2 , … , Parametern >
dmethod = dmethod + class1.getName();
}
dmethod = dmethod + ")";
步骤S32:将获得的信息以指定格式存储在各个数组和表中:
ArrayList<String> tmp = new ArrayList<String>();
tmp. add(dmethod);
主函数所在类名. relation.put(invoker, tmp);
主函数所在类名. evaluate.add(invoker + " ---> " + dmethod);
主函数所在类名.currentObject.push(dmethod);。
进一步地,为了实现可见性,在步骤S3之后,还包括步骤S4:输出形式化后的运行时软件体系结构。
本发明及其优选方案通过可靠的手段获取运行时软件体系结构,提供了以读写体系结构的方式实现系统的监测和调整的途径,为系统的在线升级和演化提供了基础,本发明通过代理模式实现了运行时对象的代理,获取了系统运行时的信息,实现了在不改变软件功能和外部可见性的情况下得到系统运行时的软件体系结构,降低了系统开发和升级的难度,提高了系统演化的效率。
附图说明
下面结合附图和具体实施方式对本发明进一步详细的说明:
图1是本发明实施例源结构示意图;
图2是本发明实施例目标结构示意图;
图3是本发明实施例获取和重建软件体系结构步骤示意图;
图4是本发明实施例代理对象格式示意图;
图5是本发明实施例采用的实验系统部分原代码示意图;
图6是本发明实施例采用的实验系统经过预处理后的代码示意图;
图7是本发明实施例采用的实验系统的界面示意图1;
图8是本发明实施例采用的实验系统的界面示意图2;
图9是本发明实施例采用的实验系统的界面示意图3;
图10是本发明实施例采用的实验系统经过本实施例方法处理后获得的软件体系结构图。
具体实施方式
为让本专利的特征和优点能更明显易懂,下文特举实施例,作详细说明如下:
本发明实施例旨在通过本发明提供的方法获取运行时软件体系结构并完成软件体系结构的重建,软件体系结构重建的原则是重建给定的代码而不改变其外部功能。 一般来说,重建具有三个方面的特征:(1)原始代码的结构,即源结构;(2)目标代码的结构,即目标结构;(3)一系列代码重建步骤,将原始代码转换为功能等效的目标代码,以便目标代码最终能够呈现所需的程序结构。
其中,源结构,即原始代码的结构。如图1所示,独立客户端系统中给定代码的源结构采用了本地调用方式。类X首先获取类N的内存引用,然后调用N的方法。显然,这种简单的结构并不支持对运行时类N进行随时管理。倘若想要获取运行时类N中的某个参数或者对其进行修改,原始结构并不可行。
如图2所示,展示了本实施例提出的重建运行时软件体系的目标结构。能够随时获取运行时类的构成元素,并进行修改。结构的核心由两个元素组成:proxy和PathService。
图2中的代理NProxy,与类N的作用相同,只是它本身不做任何计算,而是将方法调用转发给后者。拦截器会负责确定N的当前对象和方法,并将方法调用转发给代理NProxy。如果运行时对类N的某个参数进行更改,只需要对NProxy的信息进行改变,而不用操作源代码。这样,此次变化只会对当前状态发生作用,而不会影响到整个程序。
PathService主要负责确定对象间的调用关系。当类X调用类N的某个方法时,会确定X和N的一个关系,通过栈的方式分别记录下来。记录下完成系统功能的过程,后用反射的方式完成功能的重现。
如图3所示,在给定的独立客户端系统的Java字节码上执行一系列重建步骤,这样图1中所示的源代码结构就可以转换为图3所示的目标结构。以此重建运行时软件体系结构,为系统的升级演化提供相应的信息。
在代码重建的过程当中,最关键的过程即为运行时软件体系结构的获取,其包括以下具体步骤:
(1)获取运行时对象。对于一个给定的Java应用,所有的类都需要进行预处理。当发现有对象被创建时,例如,A a = new A(),记录当前创建对象与创建位置。
(2)对象转换。为获取运行时对象,需要对上一步记录的对象位置进行转换。使用代理模式,同步构造一个与其等价的代理对象,可为目标对象提供另外的访问方式,即通过代理对象访问目标对象。这样可以在目标对象实现的基础上,扩展目标对象的功能,为后续重建运行时软件体系结构提供方便。格式如图4所示;
(3)获取运行时信息。通过代理模式,为所有运行时对象创建代理类。拦截器会拦截所有运行时使用的类,通过上述PathService来确定对象间的关系,并记录下相关信息,例如调用方法,输入参数,输出结果等等。
以上过程的形式化表述如下:
Step1:对客户端应用进行预处理
(1)扫描客户端源代码,在每个主函数的开头加入以下代码:
String currentName = Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();//获取当前包名及方法名
currentObject.push(currentName);//将方法名压入栈
(2)在每个函数开头加入以下代码:
String currentName =Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();//获取当前包名及方法名
(3)在每个对象创建后加入一行函数调用,如:
Object A=new Object();
A = (Object) CglibFactory.getProxyInstance(A, currentName);
Step2 : 当有对象被创建时,调用代理函数为源对象创建代理对象:
根据ObjectId=<Pos, Object>赋值ObjectId为“创建对象的方法名@对象名”
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(object.getClass());
enhancer.setCallback(new MyCglibProxy(object, objectId));
// 设置回调函数存储源对象声明路径P=<Method1, Method2, … ,Methodn>
Object proxy = enhancer.create();
Step3 : 将代理对象和源对象以指定格式存储在各个表中:
将源对象和代理对象的一一对应关系P=< Object, Proxy>存储在名为objectpp的Map<Object, Object>中。
将objectId和代理对象一一对应存储在名为objectFactory的Map<String,Object>中。
将源对象和objectId一一对应存储在名为object_id_map的哈希表中。
Step4 : 当前源对象有方法调用时,自动调用方法拦截器:
将调用方法的对象和调用的方法名存储成指定格式:
String dproxied = DoMain.object_id_map.get(proxied);//获取源对象名
String dmethod = dproxied + ':' + method.getName() + "(";
获取所调用方法的参数,处理成指定格式:
Class[] paramTypes = method.getParameterTypes();
for (Class class1 : paramTypes) { // 存储参数列表Para=<Parameter1,Parameter2 , … , Parametern >
dmethod = dmethod + class1.getName();
}
dmethod = dmethod + ")";
Step4 : 将上述获得的信息以指定格式存储在各个数组和表中:
ArrayList<String> tmp = new ArrayList<String>();
tmp. add(dmethod);
主函数所在类名. relation.put(invoker, tmp);
主函数所在类名. evaluate.add(invoker + " ---> " + dmethod);
主函数所在类名.currentObject.push(dmethod);
Step5 : 为了可见性,输出形式化后系统运行时软件体系结构。
总结而言,获取运行时信息的算法具体包括:
输入:给定的客户端应用程序;
输出:运行时软件体系结构;
步骤1:将该客户端应用程序进行预处理;
步骤2:当前有对象被创建,调用代理函数;
步骤3:赋值ObjectId为“创建对象的方法名@对象名”;
步骤4:为源对象创建相同类型的代理对象;
步骤5:回调函数存储源对象声明路径;
步骤6:将源对象和代理对象一一对应地存储在名为objectpp的Map<Object,Object>中;
步骤7:将objectId和代理对象一一对应存储在名为objectFactory的Map<String, Object>中;
步骤8:将源对象和objectId一一对应存储在名为object_id_map的哈希表中;
步骤9:当前源对象有方法调用时,自动调用方法拦截器;
步骤10:将调用方法的对象和调用的方法名存储成指定格式;
步骤11:获取所调用方法的参数,处理成指定格式;
步骤12:将上述获得的信息以给定格式存储在数组中;
步骤13:按给定格式输出系统运行时软件体系结构。
在本实施例中,采用上述方案对实验系统——超市管理系统进行验证,对于其中仓库管理员登录并查询商品的功能,系统原来的部分代码如图5所示,预处理后的代码如图6所示。
仓库管理员登录并查询商品的系统界面如图7-图9所示。
获得的运行时软件体系结构打印出来如下(删去一些界面控件生成的部分,使其格式较为简洁):
com.Jie.view.DoMain.main(String[]) --->
com.Jie.view.DoMain.main(String[])@com.Jie.view.LoginView[]:actionPerformed(java.awt.event.ActionEvent) --->
com.Jie.view.LoginView.actionPerformed()@com.Jie.model.Model@6b4dd06e:doLogin(java.lang.Stringjava.lang.String)
com.Jie.view.DoMain.main(String[]) --->
com.Jie.view.LoginView.actionPerformed()@com.Jie.view.WarehouseView[]:actionPerformed(java.awt.event.ActionEvent) --->
com.Jie.view.WarehouseView.actionPerformed()@com.Jie.Entity.Entity@7ac7d102:setGoodsid(java.lang.String)
com.Jie.view.LoginView.actionPerformed()@com.Jie.view.WarehouseView[]:actionPerformed(java.awt.event.ActionEvent) --->
com.Jie.view.WarehouseView.actionPerformed()@com.Jie.model.Model@18feeea2:goodsFindById(java.lang.String)
由此可以分析生成仓库管理员登录并查询商品功能的软件体系结构图,如图10所示。
本专利不局限于上述最佳实施方式,任何人在本专利的启示下都可以得出其它各种形式的面向客户端应用程序的获取运行时软件体系结构的方法,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本专利的涵盖范围。

Claims (4)

1.一种面向客户端应用程序的获取运行时软件体系结构的方法,其特征在于,包括以下步骤:
步骤S1:对客户端应用程序的源程序代码中的所有类进行预处理:当发现有源对象被创建时,记录当前创建的对象与创建对象的位置;
步骤S2:进行对象的转换:采用代理模式,同步构造一个与源对象等价的代理对象,通过代理对象访问目标对象;
步骤S3:获取运行时的信息:通过代理模式,为所有运行时的对象创建代理类;通过拦截器拦截所有运行时使用的类,然后通过记录调用路径的函数及数据结构来确定对象间的关系,并记录下运行时的信息;
步骤S4:输出形式化后的运行时软件体系结构;
所述源程序代码采用java编程;
所述源对象和代理对象的关系定义为:
P=<Object, Proxy> (1)
其中,proxy为代理对象,object为源对象;
创建对象的位置和被创建的对象的关系定义为:
ObjectId=<Pos, Object> (2)
其中,pos为创建对象的位置,object为被创建的源对象;
对象声明路径定义为:
P=<Method1, Method2, … ,Methodn> (3)
Methodi为函数;
对象调用关系定义为:
G=<Object, Invoke> (4)
Invoke为对象所调用的函数;
函数的参数列表定义为:
Para=<Parameter1, Parameter2 , … , Parametern > (5)
其中,Parameteri=<Value , Type>为第i个参数,参数值为Value,参数类型为Type;
步骤S1具体包括以下步骤:
步骤S11:扫描客户端应用程序的源程序代码,在每个主函数的开头加入以下代码:
String currentName = Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();
currentObject.push(currentName);
步骤S12:在源程序代码的每个函数开头加入以下代码:
String currentName =Thread.currentThread().getStackTrace()[1].getClassName()+'.'+ Thread.currentThread ().getStackTrace()[1].getMethodName();
步骤S13:在每个对象创建后加入一行函数调用,如对于对象A有:
Object A=new Object();
A = (Object) CglibFactory.getProxyInstance(A, currentName);。
2.根据权利要求1所述的面向客户端应用程序的获取运行时软件体系结构的方法,其特征在于:
在步骤S2中,当有对象被创建时,调用代理函数为源对象创建代理对象:
根据ObjectId=<Pos, Object>赋值ObjectId为“创建对象的方法名@对象名”
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(object.getClass());
enhancer.setCallback(new MyCglibProxy(object, objectId));
Object proxy = enhancer.create();。
3.根据权利要求2所述的面向客户端应用程序的获取运行时软件体系结构的方法,其特征在于:
在步骤S2中,将代理对象和源对象以指定格式存储在各个表中:
将源对象和代理对象的一一对应关系P=< Object, Proxy>存储在名为objectpp的Map<Object, Object>中;
将objectId和代理对象一一对应存储在名为objectFactory的Map<String, Object>中;
将源对象和objectId一一对应存储在名为object_id_map的哈希表中。
4.根据权利要求3所述的面向客户端应用程序的获取运行时软件体系结构的方法,其特征在于:
步骤S3具体包括以下步骤:
步骤S31:当前源对象有方法调用时,自动调用方法拦截器:
将调用方法的对象和调用的方法名存储成指定格式:
String dproxied = DoMain.object_id_map.get(proxied);
String dmethod = dproxied + ':' + method.getName() + "(";
Class[] paramTypes = method.getParameterTypes();
for (Class class1 : paramTypes) {
dmethod = dmethod + class1.getName();
}
dmethod = dmethod + ")";
步骤S32:将获得的信息以指定格式存储在各个数组和表中:
ArrayList<String> tmp = new ArrayList<String>();
tmp. add(dmethod);
主函数所在类名. relation.put(invoker, tmp);
主函数所在类名. evaluate.add(invoker + " ---> " + dmethod);
主函数所在类名.currentObject.push(dmethod);。
CN201811137489.1A 2018-09-28 2018-09-28 面向客户端应用程序的获取运行时软件体系结构的方法 Active CN109254764B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811137489.1A CN109254764B (zh) 2018-09-28 2018-09-28 面向客户端应用程序的获取运行时软件体系结构的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811137489.1A CN109254764B (zh) 2018-09-28 2018-09-28 面向客户端应用程序的获取运行时软件体系结构的方法

Publications (2)

Publication Number Publication Date
CN109254764A CN109254764A (zh) 2019-01-22
CN109254764B true CN109254764B (zh) 2022-03-15

Family

ID=65048273

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811137489.1A Active CN109254764B (zh) 2018-09-28 2018-09-28 面向客户端应用程序的获取运行时软件体系结构的方法

Country Status (1)

Country Link
CN (1) CN109254764B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110908705B (zh) * 2019-11-20 2021-06-22 福州大学 建立不同版本程序类集合映射关系的方法
CN111290746A (zh) * 2020-02-13 2020-06-16 腾讯科技(深圳)有限公司 对象访问方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1941771A (zh) * 2005-09-27 2007-04-04 国际商业机器公司 用于面向服务的体系结构应用的Web服务信息管理方法和系统
US7539993B2 (en) * 2002-12-26 2009-05-26 Nokia Corporation Tiered multi-media acceleration scheduler architecture for dynamic configurable devices
CN101930370A (zh) * 2010-09-09 2010-12-29 上海普元信息技术股份有限公司 Soa应用系统服务集成中实现数据转换的系统结构及其方法
CN102270130A (zh) * 2011-06-27 2011-12-07 浙江工业职业技术学院 一种运行时自适应软件体系结构的形式化描述方法
CN105787355A (zh) * 2016-03-18 2016-07-20 山东华软金盾软件股份有限公司 一种安全软件进程权限管理方法和装置
CN107423391A (zh) * 2017-07-24 2017-12-01 福州大学 网页结构化数据的信息提取方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8089353B2 (en) * 2006-08-05 2012-01-03 Min Ming Tarng 4Less—Xtaless, capless, indless, dioless TSOC design of SOC or 4Free—Xtalfree, capfree, indfree, diofree TSOC design of SOC
CN1276347C (zh) * 2004-07-02 2006-09-20 北京大学 构件化软件系统的运行状态结构化显示方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7539993B2 (en) * 2002-12-26 2009-05-26 Nokia Corporation Tiered multi-media acceleration scheduler architecture for dynamic configurable devices
CN1941771A (zh) * 2005-09-27 2007-04-04 国际商业机器公司 用于面向服务的体系结构应用的Web服务信息管理方法和系统
CN101930370A (zh) * 2010-09-09 2010-12-29 上海普元信息技术股份有限公司 Soa应用系统服务集成中实现数据转换的系统结构及其方法
CN102270130A (zh) * 2011-06-27 2011-12-07 浙江工业职业技术学院 一种运行时自适应软件体系结构的形式化描述方法
CN105787355A (zh) * 2016-03-18 2016-07-20 山东华软金盾软件股份有限公司 一种安全软件进程权限管理方法和装置
CN107423391A (zh) * 2017-07-24 2017-12-01 福州大学 网页结构化数据的信息提取方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Run-Time Monitoring-Based Evaluation and Communication Integrity Validation of Software Architectures;Ana Dragomir等;《institute of electrical and electronic engineers》;20150423;全文 *
一种发现运行时软件体系结构的方法;张海梅等;《计算机工程与科学》;20091015;全文 *
支持运行监控的可信软件体系结构设计研究;张杰;《信息与电脑(理论版)》;20150115;全文 *

Also Published As

Publication number Publication date
CN109254764A (zh) 2019-01-22

Similar Documents

Publication Publication Date Title
US7716377B2 (en) Clustering server providing virtual machine data sharing
US8799359B2 (en) Session management within a multi-tiered enterprise network
US8281014B2 (en) Session lifecycle management within a multi-tiered enterprise network
US7689989B2 (en) Thread monitoring using shared memory
US9632769B2 (en) Software build optimization
EP2469410A2 (en) System and method for scaling for a large number of concurrent users by storing a user&#39;s session state on external storage
US8751469B2 (en) System and method for scaling for a large number of concurrent users
CN109254764B (zh) 面向客户端应用程序的获取运行时软件体系结构的方法
US7690001B2 (en) System and method for a management model event system
US7921417B2 (en) Method and computer system for activation of source files
US11341022B2 (en) Runtime performance introspection
US8745575B2 (en) Pattern based adminstration of an operation in a component based computing solution
Gorton et al. Architecting in the face of uncertainty: an experience report
US20070266372A1 (en) Generating documentation from task execution
US20090132463A1 (en) System and method for facilitating transition between ibm® websphere® mq workflow and ibm® websphere® process server
US11966394B2 (en) Bill of materials traversal to handle logical units of work for in-memory databases
Messig et al. Self healing and self configuration in a WSRF grid environment
EP2495657A1 (en) Efficient batch processing in a multi-tier application
JP5539170B2 (ja) Riaアプリケーション実行方法及びriaコンポーネント多重バージョンサポート方法
US20070055644A1 (en) Global dynamic variable storage for SQL procedures
CN116755761A (zh) 服务编排方法及装置
JP5673246B2 (ja) データストア制御装置、データストア制御プログラムおよびデータストア制御方法
Seifzadeh et al. A Performance-based Approach to Automatic Redeployment of Enterprise Software Applications
JP2000284994A (ja) ディスク容量管理システム及び業務ファイル管理用プログラムを記憶した記憶媒体

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant