发明名称 一种轻量级企业构件动态演化的方法
摘要 一种轻量级企业构件动态演化的方法,采用粗、细两种粒度不同的演化策略,实现构件属性或功能的动态替换。粗粒度构件替换的演化,是通过构件相似度算法,计算出最优可替换构件,再交由应用服务器的拦截器机制实现动态替换,达到不需重起整个系统就可以更新功能构件的效果;细粒度构件属性的演化,是通过Java反射技术,在运行时动态修改构件中的属性信息,达到不需重新编写构件就可以修改属性的效果。这两种构件动态演化的方法对于提升系统不间断运行能力起至关重要的作用。
申请公布号 CN102012810A 申请公布日期 2011.04.13
申请号 CN201010554088.3 申请日期 2010.11.22
申请人 西安交通大学 发明人 齐勇;周天华;杨涛;郗旻
分类号 G06F9/44(2006.01)I 主分类号 G06F9/44(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 陆万寿
主权项 一种轻量级企业构件动态演化的方法,其特征在于:若客户需要在运行时对构件的一些属性进行修改则运用细粒度构件属性的演化,若客户需要对整个功能构件进行替换时或当某个功能构件因错误而被强制关闭时系统需要寻找一个功能和其相同或相似的构件来替代时则运用粗粒度构件替换的演化;1)所述的细粒度构件属性的演化:一个普通的EJB构件的属性有两种:Java基本类型属性和复杂类型属性;对Java基本类型属性的演化:在应用服务器中,每个窗口代表一个部署的EJB构件,每个构件包含一个EJB的实例,当客户的需要发生变化,而且这种变化仅针对基本类型属性时,通过反射技术Reflection从JVM(JavaVirtual Machine)获取构件的属性,然后将其设置为新值,对于有状态会话Bean,同一个客户的多次调用使用的是同一个EJB实例,一次修改便对所有的后期调用生效;对于无状态会话Bean,客户每次调用时都将生成一个新的EJB实例,因此需要记住的新属性值,然后在每次构件生成时通过反射将其修改;对复杂类型属性的演化:EJB构件中,除了基本类型的属性之外,还包含有复杂类型的属性,容器本身在实现过程中,对于复杂类型属性使用依赖注入的方式注入目标值,因而当客户需要发生变化时,容器首先检查新的属性和旧属性之间实现相同的接口或者功能是否可以替换,如果可以替换,在生成新的构件实例时,通过依赖注入,将旧的属性替换为新的属性;2)粗粒度构件替换的演化构件相似度分析:假设旧构件实现的接口个数为a1,可替换的构件必须至少实现这些接口,假设候选构件实现的接口数量为a2(大于a1),两个构件的基本相似度定义为: <mrow> <mi>z</mi> <mrow> <mo>(</mo> <mi>a</mi> <mn>1</mn> <mo>,</mo> <mi>a</mi> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mrow> <mi>a</mi> <mn>2</mn> <mo>-</mo> <mi>a</mi> <mn>1</mn> </mrow> <mrow> <mi>a</mi> <mn>2</mn> </mrow> </mfrac> <mo>*</mo> <mn>0.1</mn> <mo>)</mo> </mrow> </mrow>公式1假设旧构件注入的其他构件个数为b1,新构件中注入和旧构件类型相同的属性个数b2,新构件依赖的其他构件的所有个数为b3,那么对其他构件依赖相似度可定义为: <mrow> <mi>z</mi> <mrow> <mo>(</mo> <mi>b</mi> <mn>1</mn> <mo>,</mo> <mi>b</mi> <mn>2</mn> <mo>,</mo> <mi>b</mi> <mn>3</mn> <mo>)</mo> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mfrac> <mrow> <mi>b</mi> <mn>2</mn> </mrow> <mrow> <mi>b</mi> <mn>1</mn> </mrow> </mfrac> <mo>-</mo> <mfrac> <mrow> <mi>b</mi> <mn>3</mn> <mo>-</mo> <mi>b</mi> <mn>1</mn> </mrow> <mrow> <mi>b</mi> <mn>3</mn> </mrow> </mfrac> <mo>*</mo> <mfrac> <mrow> <mi>b</mi> <mn>2</mn> </mrow> <mrow> <mi>b</mi> <mn>1</mn> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow>公式2假设旧构件注入资源个数为c1,新构件中和旧构件属性相同资源属性个数为c2,新构件所有资源属性个数为c3,假设构件的所有调用次数为d1,其中发生的异常次数为d2,对资源依赖相似度和稳定性分别定义为: <mrow> <mi>z</mi> <mrow> <mo>(</mo> <mi>c</mi> <mn>1</mn> <mo>,</mo> <mi>c</mi> <mn>2</mn> <mo>,</mo> <mi>c</mi> <mn>3</mn> <mo>)</mo> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mfrac> <mrow> <mi>c</mi> <mn>2</mn> </mrow> <mrow> <mi>c</mi> <mn>1</mn> </mrow> </mfrac> <mo>-</mo> <mfrac> <mrow> <mi>c</mi> <mn>3</mn> <mo>-</mo> <mi>c</mi> <mn>1</mn> </mrow> <mrow> <mi>c</mi> <mn>3</mn> </mrow> </mfrac> <mo>*</mo> <mfrac> <mrow> <mi>c</mi> <mn>2</mn> </mrow> <mrow> <mi>c</mi> <mn>1</mn> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow>公式3 <mrow> <mi>z</mi> <mrow> <mo>(</mo> <mi>d</mi> <mn>1</mn> <mo>,</mo> <mi>d</mi> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mfrac> <mrow> <mi>d</mi> <mn>2</mn> </mrow> <mrow> <mn>10</mn> <mo>+</mo> <mi>d</mi> <mn>1</mn> <mo>)</mo> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow>公式4两个构件之间的相似度定义为:similar=z(a1,a2)*0.6+z(b1,b2,b3)*0.2+z(c1,c2,c3)*0.2‑z(d1,d2)*0.1公式5在公式1中,当两个构件的实现接口完全一样时,z(a1,a2)结果为1,当新接口的个数远多于旧接口时,结果为0.9,在公式2中当注入的其他构件完全相同时,z(b1,b2,b3)结果为1,当没有相同类型时结果为0,公式(3)和公式(2)结果一致,在公式4中没有异常时结果为0,当调用过程中异常很多时趋近于1,因此可知公式5在构件基本相似时,没有异常发生的构件相似度为1,构件在最坏情况下相似度接近0.5;构件替换:应用服务器采用拦截器及请求转发技术实现构件的动态演化,在客户端请求和目标构件之间有一拦截器层,它会拦截下所有的客户端请求,在通常情况下,请求会转发给当前构件,即客户初始设定的构件,当客户需求发生变化时,系统根据相似度计算模块确定最优候选构件,并将旧构件的状态迁移到新的构件,维持系统的一致性,此时当新的用户请求到达时,拦截器会将请求转发给新选出的构件,由新构件接替旧构件的工作,至此完成构件替换。
地址 710049 陕西省西安市咸宁西路28号