【技术实现步骤摘要】
本专利技术涉及一种Java类依赖关系的静态识别方法,可以针对用户提供的基于Java的Web应用,通过静态代码分析,快速地构建出所有类、字段之间的依赖关系,并从中自动识别存在读写共享的持久化属性,这在自动检测Web应用是否可以集群部署,以及Web应用的集群迁移方面具有重要作用,属于软件应用
技术介绍
为了满足不断增长的海量信息以及数据处理的需求,计算机集群技术应运而生。集群技术通过将多台计算机连接在一起,按照一定的规则进行协同工作来完成单台计算机无法完成的任务。通过集群,可以以较低的成本搭建拥有强大计算能力的系统,并且其性能、扩展性和可用性都得以大大增强。集群对象的共享是集群技术中的一个关键问题——所谓集群对象,就是那些虽然物理上分布于不同的机器,但是逻辑上具有同一性的那些对象,在集群外部看来它们表示同一个对象。由于集群对象维护的是集群中不同服务器之间的协同工作的数据,它们的正确共享是业务逻辑正常运行的重要保证。针对Java系统,在集群的搭建过程中,为了使普通的Java对象成为集群对象,实现集群对象的正确共享,需要针对所有共享的Java类进行存取方式上的重构,即,将单机式的数据读写方式转换成集群式的数据读写方式。如果某个共享属性没有被正确地重构,那么它便无法拥有集群的行为。这意味着要从所有的Java类中定位存在读写共享的持久化属性。在Java系统中,动态分析,或运行时分析,可以在一定程度上解决共享属性的搜索和推导问题。然而在动态分析中,系统的运行必须要覆盖所有可能的代码路径——包括正常情况和异常情况,否则便无法保证找出的共享属性的集合的完备性,这 ...
【技术保护点】
一种Java类依赖关系的静态识别方法,其特征在于包括以下步骤:步骤1:分析用户指定的目标Web应用的代码,从中识别目标Web应用的入口方法,并将识别得到的入口方法置入待分析方法集合中;步骤2:依次分析待分析方法集合中的每个入口方法,建立入口方法内部定义的变量、引用的属性和被调用的方法间的依赖关系,得到入口方法内部的依赖关系图;并利用相同的步骤对入口方法调用的其他方法进行分析;分析完成后,将所有被分析的被调用方法置如已分析方法集合中;步骤3:依次分析已分析方法集合中的每个被调用方法,对于被调用方法的每次调用,建立方法调用时传入的实际参数和被调用方法定义的形式参数间的依赖关系,从而得到完整的依赖关系图;步骤4:遍历步骤3得到的依赖关系图,从中搜索持久化结点,并将其对应的元素置于持久化元素集合中;持久化元素指在Java中被声明为静态的属性、变量或方法,但在依赖关系图中被非静态的属性、变量或方法依赖的元素;步骤5:依次以步骤4得到的持久化元素集合中的元素为起点,对步骤3得到的依赖关系图进行遍历,位于2个持久化元素之间的属性即被识别为持久化属性,将识别得到的持久化属性置于持久化属性集合中,并最终 ...
【技术特征摘要】
1.一种Java类依赖关系的静态识别方法,其特征在于包括以下步骤:步骤1:分析用户指定的目标Web应用的代码,从中识别目标Web应用的入口方法,并将识别得到的入口方法置入待分析方法集合中;步骤2:依次分析待分析方法集合中的每个入口方法,建立入口方法内部定义的变量、引用的属性和被调用的方法间的依赖关系,得到入口方法内部的依赖关系图;并利用相同的步骤对入口方法调用的其他方法进行分析;分析完成后,将所有被分析的被调用方法置如已分析方法集合中;步骤3:依次分析已分析方法集合中的每个被调用方法,对于被调用方法的每次调用,建立方法调用时传入的实际参数和被调用方法定义的形式参数间的依赖关系,从而得到完整的依赖关系图;步骤4:遍历步骤3得到的依赖关系图,从中搜索持久化结点,并将其对应的元素置于持久化元素集合中;持久化元素指在Java中被声明为静态的属性、变量或方法,但在依赖关系图中被非静态的属性、变量或方法依赖的元素;步骤5:依次以步骤4得到的持久化元素集合中的元素为起点,对步骤3得到的依赖关系图进行遍历,位于2个持久化元素之间的属性即被识别为持久化属性,将识别得到的持久化属性置于持久化属性集合中,并最终输出。2.根据权利要求1所述的一种Java类依赖关系的静态识别方法,其特征在于:所述步骤1中,由用户提供目标Web应用程序源码,初始化待分析方法集合Su为空;遍历程序源码,从中识别系统的入口方法,入口方法包括所有实现了标准Servlet接口的Java类中的doGet、doPost方法,并将这些方法置入待分析方法集合Su中。3.根据权利要求1所述的一种Java类依赖关系的静态识别方法,其特征在于:所述步骤2具体包括以下步骤,(1)初始化已分析方法集合Sa为空;(2)从待分析方法集合Su中取出一个方法M,(2.1)如果方法M不是静态方法,即M没有被声明为static的,则按照如下规则依次对方法包含的每条指令进行分析:a)如果当前指令是属性读指令,操作属性为P,则添加依赖关系M依赖于P;b)如果当前指令是静态属性读指令,操作属性为P,则添加依赖关系M依赖于P,并设置P为持久化元素;c)如果当前指令是属性写指令,操作属性为P,则添加依赖关系P依赖于M;d)如果当前指令是静态属性写指令,操作属性为P,则添加依赖关系P依赖于M,并设置P为持久化元素;e)如果当前指令是赋值指令,一侧操作元素为变量L,另一侧操作元素集合为Rs,且Rs中包括静态属性集合Rsp,则添加依赖关系L依赖于Rs,L依赖于M,并设置Rsp中元素为持久化元素;f)如果当前指令是返回指令,返回元素为R,R是非静态属性或变量,则添加依赖关系M依赖于R;g)如果当前指令是返回指令,返回元素为R,R是静态属性,则添加依赖关系M依赖于R,并设置R...
【专利技术属性】
技术研发人员:王帅,杨燕,徐良,田申,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。