CN101833455B - 把传统软件转化为富客户端软件的代码拆分方法 - Google Patents
把传统软件转化为富客户端软件的代码拆分方法 Download PDFInfo
- Publication number
- CN101833455B CN101833455B CN201010170937A CN201010170937A CN101833455B CN 101833455 B CN101833455 B CN 101833455B CN 201010170937 A CN201010170937 A CN 201010170937A CN 201010170937 A CN201010170937 A CN 201010170937A CN 101833455 B CN101833455 B CN 101833455B
- Authority
- CN
- China
- Prior art keywords
- node
- function
- limit
- interface
- weights
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 230000006870 function Effects 0.000 claims abstract description 95
- 230000005540 biological transmission Effects 0.000 claims abstract description 15
- 238000012360 testing method Methods 0.000 claims abstract description 9
- 241000208340 Araliaceae Species 0.000 claims description 8
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 8
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 8
- 230000008859 change Effects 0.000 claims description 8
- 235000008434 ginseng Nutrition 0.000 claims description 8
- 230000003993 interaction Effects 0.000 claims description 4
- 230000004927 fusion Effects 0.000 claims description 3
- 230000007704 transition Effects 0.000 claims description 2
- 238000004364 calculation method Methods 0.000 claims 1
- 230000002708 enhancing effect Effects 0.000 abstract 1
- 238000005194 fractionation Methods 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011002 quantification Methods 0.000 description 1
- 238000012113 quantitative test Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明提供了一种把传统软件转化为富客户端软件的代码拆分方法,属于软件工程领域。该方法包括:首先对应用程序进行数据传输量的插装并进行测试,据此生成模块调用图,然后对该图求最小割集,将图拆分成两部分,并将两部分分别作为客户端代码和服务器端代码,从而保证了拆分后的应用的网络传输量最小。本发明可以使得传统应用向富客户端应用转型时,代码拆分后网络传输量最小,从而提高富客户端应用的性能。本发明同时还允许程序开发设计人员将一些函数直接放置在他们认为合适的一端,并且能保证拆分后代码产生最低的网络传输量,这使得本发明能够适应从传统应用转向富客户端应用的各种情况。
Description
技术领域
本发明属于软件工程领域,具体是一种把传统应用软件转化为富客户端应用软件时的代码拆分方法。
背景技术
富客户端应用是客户端/服务器模式的网络应用的一种形式。它是指除用户交互界面之外,将网络应用的一部分运算任务交由客户端完成,从而提高客户端的反应速度和用户体验。它既包含基于桌面客户端富客户端应用,也包括使用浏览器作为客户端的富客户端Web应用。绝大多数的基于桌面客户端的网络应用和大部分最新的Web应用都是富客户端应用。基于桌面客户端的富客户端应用一般依赖于C,Java,C#等桌面开发技术,以及网络传输层技术;富客户端Web应用主要依靠JavaScript技术,DOM技术和AJAX技术。
在代码拆分方面,微软公司的研究人员在2008年曾经发表过一篇有关对web应用进行代码拆分的论文(Benjamin Livshits,and Emre Kiciman,Doloto:code splitting for network-boundweb 2.0 applications,in Proceedings of SIGSOFT‘08/FSE-16:Proceedings of the 16th ACMSIGSOFT International Symposium on Foundations of software engineering,pages 350-360,2008.)。该研究的主要内容是将富客户端web应用的浏览器端代码拆分成若干部分,并根据用户的需要分批下载到浏览器端执行。该研究与本发明不同:该研究解决的问题是拆分富客户端web应用的浏览器端代码,而本发明是将传统应用的全部代码拆分成富客户端代码和服务器端代码两部分。
本发明要使用到最小割集算法,最小割集是图论中的一个概念,对于一个带权图G(V,E,f),其中V为节点集,E为边集,f为边权函数,割集是边集E的一个子集E’,满足G(V,E/E’,f)不连通。最小割集是一个图的所有割集中边权和最小的割集。特别的,(s,t)-最小割集,是指在图中的所有将s和t两个节点拆分到不同连通子图的割集中,边权和最小的割集。求(s,t)-最小割集的经典算法为-karp算法(Jack Edmonds and Richard M.Karp(1972).“Theoretical improvements in algorithmic efficiency for network flow problems”.Journal of the ACM 19(2):248–264)。
现有常见的代码拆分方法是由人工对代码进行分析拆分,这种方法的主要缺点是没有对代码之间的依赖程度进行定量分析,因此没有办法保证拆分后较低的网络传输量,使得拆分后程序的性能较差。
发明内容
本发明的目的是提供一种代码拆分方案,对于传统单机应用和传统Web应用,将它们的代码进行拆分,得到客户端代码和服务器端代码两部分,保证拆分后客户端与服务器端之间的网络数据传输量最低。
本发明的主要思想是通过对传统应用程序进行插装和大量测试,定量的估计应用中代码块之间的数据传输量,然后根据代码块之间的数据传输关系和数据传输量生成一个模块调用图,最后对这个图求最小割集,将图拆分成两部分,并将两部分分别作为客户端代码和服务器端代码,从而保证了拆分后网络传输量最小。
本发明包含三部分内容:1、应用程序的数据传输量插装与测试;2、模块调用图的生成;3、模块调用图的拆分。其总体流程图如图4和图5所示。下面分别讲述各个部分:
(1)应用程序的数据传输量插装与测试
对应用程序进行函数级别的数据传输量插装,即在每个函数调用点加写两条语句,在执行到函数调用的时候分别输出函数实参的大小和函数返回值的大小。这种插装可以通过使用现存的自动化插装工具(例如Java语言的ASM,C#语言的CCI等)找到插装位置,然后插入数据传输量输出语句,也可以手工找到插装位置,然后插入数据传输量输出语句。
数据传输量输出语句即输出函数调用时实参和返回值大小的语句,其中函数实参或返回值的大小按下面的方法判定:
1.若为整数,固定为所使用语言的整型数的字节数(例如Java语言为8字节);
2.若为字符串或字符指针,则调用字符串长度函数(语言库函数提供,例如Java为String.length())求出字符串长度,即为实参大小;
3.若为结构体或类对象指针,则根据结构体和类的定义,对结构体或类的域变量的大小求和。其中域变量若为整数,字符串则按照1,2中规则求出大小,若为结构体或类对象指针,则按3中的规则递归求出它的大小。
4.若为数组或向量,则根据调用数组或向量的长度函数(Java中List的长度为List.length())求出数组的元素个数,然后乘以每个元素的大小,其中每个元素的大小根据规则1-4求出。
在对应用程序进行插装之后,即可使用测试数据进行测试,插装后的应用程序在测试过程中将会输出一系列函数调用事件的序列,其中每个事件包含调用时传递实参的大小的信息。
(2)模块调用图的生成
在步骤(1)获得函数调用事件的序列之后,接着从函数调用事件序列中生成模块调用图。模块调用图是一个带权图。图中的节点是函数调用事件序列中涉及的函数,边是函数之间的调用关系,边上的权是函数调用中的总数据传输量,即两个函数间所有次调用的数据传输量(调用实参与返回值的大小之和)的总和。
模块调用图生成的算法如下:
输入:函数调用事件序列
输出:模块调用图
1.获得函数调用事件序列中的下一个函数调用事件;
2.如果事件中的主调函数对应的节点在模块调用图中,转4;
3.添加主调函数对应的节点;
4.如果事件中的被调函数对应的节点在模块调用图中,转6;
5.添加被调函数对应的节点;
6.如果模块调用图中,主调函数与被调函数对应的节点之间有边,转8;
7.在主调函数与被调函数对应的节点之间添加一条无向边,权值为0;
8.主调函数与被调函数对应的节点之间的边权值+=函数调用事件中的实参大小与返回值大小之和;
9.如果未到函数调用序列结尾,转1;
10.模块调用图中每一条无向边(u,v,w(u,v))(其中w(u,v)为边权值)变为两条具有相同权值方向相反的有向边,即(u,v,w(u,v))和(v,u,w(u,v));
11.算法结束
(3)模块调用图的拆分
首先,确定界面函数与存储函数。其中界面函数为和用户界面交互的函数(例如Java中的JButton.setText()等,PHP中的echo等);存储函数为和数据库或者文件交互的函数。这两类函数集合均可以通过相应语言的库函数文档获得。
然后,在模块调用图中,获取界面节点集合和存储节点集合,其中默认界面节点集合为界面函数对应的节点的集合,默认存储节点集合为存储函数对应的节点的集合。程序开发设计人员可以根据自己的需要将某些函数对应的节点添加到界面节点集合或存储节点集合中。
接着,进行节点集合的融合,即将界面节点集合融合为界面节点、存储节点集合融合为存储节点。在融合的过程中,去掉节点集合内部的所有点和边,并产生一个新的节点new,对于任意一条节点集合中的点a到集合外的点b的边,增加一条new到b的边,对于任意一条节点集合外的点a到集合中的点b的边,增加一条b到new的边,最后将多重边进行融合。融合算法如下:
输入:模块调用图,融合节点集合S
输出:模块调用图
1.模块调用图中产生一个新的节点new;
2.读入融合节点集合中的下一个节点a;
3.对于从a出发有边的每一个节点b,如果b属于S,转5;
4.添加一条边从new到b,权值为边(a,b)的权值;
5.对于到达a有边的每一个节点b,如果b属于S,转7;
6.添加一条边从b到new,权值为边(b,a)的权值;
7.从模块调用图中删掉S中的所有节点,以及它们关联的边;
8.对于模块调用图中的每一节点对(u,v),如果从u到v存在不止一条边,则删掉这些边,并增加一条边(u,v)权值为之前从u到v的所有边权值之和。
一个节点集合融合的例子如图1~图3。
最后,以存储节点为源,以界面节点为漏,执行最小割集算法,求出一个将存储节点s与界面节点t分开的(s,t)-最小割集。这个割集将模块调用图拆分成两部分,其中与界面节点连通的部分即为客户端代码,与存储节点连通的部分即为服务器端代码。
本发明的有益效果:利用量化的模块调用信息和模块调用图的最小割集拆分,本发明可以使得传统应用向富客户端应用转型时,代码拆分后网络传输量最小,从而提高富客户端应用的性能。本发明同时还允许程序开发设计人员将一些函数直接放置在他们认为合适的一端,并且能保证拆分后代码产生最低的网络传输量,这使得本发明能够适应从传统应用转向富客户端应用的各种情况。
附图说明
图1:模块调用示意图;
图2:融合节点后带多重边的模块调用图;
图3:融合多重边后得到的模块调用图;
图4:总体流程简图;
图5:总体流程详图;
图6:函数调用关系图;
图7:增加EditUI节点;
图8:增加showTextF节点;
图9:在EditUI和showTextF间添加边;
图10:给边添加的权值;
图11:处理fileManageF节点;
图12:增加EditUI和showTextF节点之间的权值;
图13:模块调用图;
图14:有向模块调用图;
图15:融合UI模块之后的模块调用图;
图16:执行分割后的模块调用图。
其中图1~图3为一个节点融合的例子,其中圆圈代表节点,边上的数字代表权值;图6~图16为实施例中使用的图形。
具体实施方式
下面用一个例子来对本发明作进一步的说明,但本发明并不仅限于如下实施例。
一个单机版的记事本软件,这个软件的界面部分包含编辑界面EditUI,文件处理界面FileUI,字体选择界面FontUI。数据存储部分包含一个文件打开存储部件FileIO。中间运算部分包括拼写检查函数checkF,文件格式转换函数fileTransF,文件管理函数fileManageF,字体控制函数fontCtrF,文本展现函数showTextF,文本操作函数manageTextF,时间日期函数timeF。这些函数之间的调用关系如图6。
现在计划将这个记事本软件变成一个网络记事本软件,即用户在本地编辑文本,并将文本存储到远端的服务器上,这样用户就可以在不同的地点(例如家里和办公室)对文本进行编辑,而且不同的用户可以同时对同一文本进行阅读和编辑。下面使用本发明对这个软件进行拆分。
第一步,对软件进行数据传输量插装。例如下面的EditUI对showTextF的调用:
struct extendString{
char*str;
int font;
}//extendString表示一个带格式的字符串
EditUI(){
extendString*stringList;
int option;
…
stringList=showTextF(option)
}
增加下面的插装语句(加粗):
EditUI(){
List<extendString>stringList;
int option;
…
stringList=showTextF(option)
}
然后使用测试用例对插装后的程序进行测试。可以得到一个调用事件序列,例如:
call from EditUI to showTextF,with size 3000
call from showTextF to fileManageF with size 2000
call from EditUI to showTextF,with size 1000
call from showTextF to fileManageF with size 500
…
第二步,从上面的调用序列中得到模块调用图,使用模块调用图生成算法。例如对于上面的调用事件序列,首先初始化模块调用图为空图,然后取第一个事件(算法第1步)“callfrom EditUI to showTextF,with size 3000”,判断(算法第2步):主调函数EditUI不在模块调用图中,则增加节点EditUI(算法第3步)如图7。
然后判断(算法第4步):被调函数showTextF不在模块调用图中,则增加节点showTextF(算法第5步)如图8。
然后判断(算法第6步):图中从EditUI到showTextF之间没有边,则增加边(算法第7步)如图9.
然后执行第8步,边权值增加调用事件的数据传输量3000,如图10。
第9步,判断:事件序列中还存在事件,转第1步,取下一个事件“call from showTextFto fileManageF with size 2000”,然后执行2-8步,得到如图11。
然后判断事件序列中还存在事件,转第1步,取下一个事件“call from EditUI toshowTextF,with size 1000”,然后执行2-8步,其中第8步在从EditUI到showTextF之间的边上增加1000权值,得到如图12。
然后依次继续取事件序列中的调用事件,不停执行2-8步,直到事件序列中的最后一个事件为止。此时可以得到模块调用图如图13。
最后执行算法第10步,得到一个有向的模块调用图14。
第三步,根据上面的这个模块调用图进行节点融合和拆分。首先将三个UI模块进行融合,得到如下的模块调用图15。
然后使用最小割集算法对这个调用图进行分割得到下面的分割后的模块调用图16。
则得到代码拆分的结果:
应当将UI(EditUI,FileUI,FontUI),checkF,showTextF,manageTextF四部分放在客户端,其余部分放在服务器端。
虽然通过实施例详细描述了本发明代码拆分方法,但是本领域的技术人员应当理解,本发明并不限于实施例中所公开的内容和范围,在不脱离本发明的实质和精神范围内,可以对本发明进行各种变换、修改和替换。
Claims (3)
1.一种把传统应用软件转型为富客户端软件的代码拆分方法,其特征是:拆分后生成的富客户端软件的网络数据传输量最小;该方法主要包含以下步骤:
第一步、对应用程序进行数据传输量的插装并进行测试;
第二步、根据测试结果生成模块调用图;
第三步、对模块调用图求最小割集,将图拆分成两部分,并将两部分分别作为客户端代码和服务器端代码;
其中,第一步中插装的方法为,在每个函数调用点加写两条语句,在执行到函数调用的时候分别输出函数实参的大小和函数返回值的大小;
第二步中模块调用图是一个带权图,图中的节点是函数调用事件序列中涉及的函数,边是函数之间的调用关系,边上的权是函数调用中的总数据传输量;
第二步中生成模块调用图的算法为:
1)获得函数调用事件序列中的下一个函数调用事件;
2)如果事件中的主调函数对应的节点在模块调用图中,转4);
3)添加主调函数对应的节点;
4)如果事件中的被调函数对应的节点在模块调用图中,转6);
5)添加被调函数对应的节点;
6)如果模块调用图中,主调函数与被调函数对应的节点之间有边,转8);
7)在主调函数与被调函数对应的节点之间添加一条无向边,权值为0;
8)把主调函数与被调函数对应的节点之间的边权值设置为主调函数与被调函数对应的节点之间的边权值加上函数调用事件中的实参大小与返回值大小之和;
9)如果未到函数调用序列结尾,转1);
10)模块调用图中每一条无向边变为两条具有相同权值方向相反的有向边;
第三步的实现步骤为:
I)确定界面函数和存储函数;其中,界面函数为和用户界面交互的函数,存储函数为和数据库或者文件交互的函数;
II)在模块调用图中,获取界面节点集合和存储节点集合;其中,默认界面节点集合为界面函数对应的节点的集合,默认存储节点集合为存储函数对应的节点的集合;
III)进行节点集合的融合,将界面节点集合融合为界面节点、存储节点集合融合为存储节点;
IV)以存储节点为源,以界面节点为漏,执行最小割集算法,求出一个将存储节点与界面节点分开的最小割集,这个割集将模块调用图拆分成两部分,其中与界面节点连通的部分即为客户端代码,与存储节点连通的部分即为服务器端代码;
第III)步中进行节点融合的算法为:
i)模块调用图中产生一个新的节点new;
ii)读入融合节点集合中的下一个节点a;
iii)对于从节点a出发有边的每一个节点b,如果节点b属于S,转v);
iv)添加一条边从节点new到节点b,权值为边(a,b)的权值;
v)对于到达节点a有边的每一个节点b,如果节点b属于S,转vii);
vi)添加一条边从节点b到节点new,权值为边(b,a)的权值;
vii)从模块调用图中删掉S中的所有节点,以及它们关联的边;
viii)对于模块调用图中的每一节点对(u,v),如果从u到v存在不止一条边,则删掉这些边,并增加一条边(u,v)权值为之前从u到v的所有边权值之和;
其中,S为融合节点集合,其初始值为界面节点集合或存储节点集合。
2.如权利要求1所述的方法,其特征是,实参和返回值大小的计算方法为:
a)若为整数,固定为所使用语言的整型数的字节数;
b)若为字符串或字符指针,则调用字符串长度函数求出字符串长度,即为它的大小;
c)若为结构体或类对象指针,则根据结构体和类的定义,对结构体或类的域变量的大小求和;其中域变量若为整数,字符串则按照a),b)中规则求出大小,若为结构体或类对象指针,则按c)中的规则递归求出它的大小;
d)若为数组或向量,则根据调用数组或向量的长度函数求出数组的元素个数,然后乘以每个元素的大小,其中每个元素的大小根据规则a)-d)求出。
3.如权利要求1中所述的方法,其特征是,第I)步中确定界面函数和存储函数的方法是:根据相应语言的库函数文档判断,或者用户自行确定。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010170937A CN101833455B (zh) | 2010-05-13 | 2010-05-13 | 把传统软件转化为富客户端软件的代码拆分方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010170937A CN101833455B (zh) | 2010-05-13 | 2010-05-13 | 把传统软件转化为富客户端软件的代码拆分方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101833455A CN101833455A (zh) | 2010-09-15 |
CN101833455B true CN101833455B (zh) | 2012-10-10 |
Family
ID=42717536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010170937A Expired - Fee Related CN101833455B (zh) | 2010-05-13 | 2010-05-13 | 把传统软件转化为富客户端软件的代码拆分方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101833455B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104182235B (zh) * | 2014-08-26 | 2017-04-12 | 北京航空航天大学 | 一种用于解决软件潜通路的软件体系结构系统及设计方法 |
US10802844B2 (en) * | 2016-04-28 | 2020-10-13 | Microsoft Technology Licensing, Llc | Distributed application based off of stateful desktop application |
CN107102861B (zh) * | 2017-04-25 | 2019-09-03 | 中南大学 | 一种获取开源代码库中函数的向量的方法和系统 |
CN108415828B (zh) * | 2018-01-23 | 2021-09-24 | 广州视源电子科技股份有限公司 | 程序测试方法、装置、可读存储介质和计算机设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101267441A (zh) * | 2008-04-23 | 2008-09-17 | 北京航空航天大学 | 一种c/s和b/s混合架构模式实现方法和平台 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9317255B2 (en) * | 2008-03-28 | 2016-04-19 | Microsoft Technology Licensing, LCC | Automatic code transformation with state transformer monads |
-
2010
- 2010-05-13 CN CN201010170937A patent/CN101833455B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101267441A (zh) * | 2008-04-23 | 2008-09-17 | 北京航空航天大学 | 一种c/s和b/s混合架构模式实现方法和平台 |
Also Published As
Publication number | Publication date |
---|---|
CN101833455A (zh) | 2010-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sartori et al. | Sustainability and sustainable development: a taxonomy in the field of literature | |
Deitrick et al. | Mutually enhancing community detection and sentiment analysis on twitter networks | |
CN106202066B (zh) | 网站的翻译方法和装置 | |
CN101833455B (zh) | 把传统软件转化为富客户端软件的代码拆分方法 | |
WO2008021561A2 (en) | Joint optimization of wrapper generation and template detection | |
CN107943691A (zh) | 一种自动产生智能合约的功能测试页面的方法及装置 | |
AU2003262290A1 (en) | Method and computer-readable medium for importing and exporting hierarchically structured data | |
Devine et al. | Optimizing spinning time-domain gravitational waveforms for advanced LIGO data analysis | |
CN103631783B (zh) | 一种前端页面的生成方法及系统 | |
Eriksson et al. | Comparison between JSON and YAML for data serialization | |
CN102521232A (zh) | 一种互联网元数据的分布式采集处理系统及方法 | |
CN101196812A (zh) | 构件化软件系统实现脚本语言调用多输出参数接口的方法 | |
Bogner et al. | Collecting service-based maintainability metrics from RESTful API descriptions: static analysis and threshold derivation | |
CN101763432A (zh) | 一种轻量级网页动态视图快速构建方法 | |
CN105159746B (zh) | 面向容错组合web服务的可靠性仿真工具 | |
CN110489628A (zh) | 数据处理方法、装置及电子设备 | |
CN112783836A (zh) | 信息交换方法、装置及计算机存储介质 | |
CN116069330A (zh) | 中后台模板构建方法、装置和存储介质 | |
Hussein | Context-aware recommendations on rails | |
Seo et al. | Implementation of cloud computing environment for discrete event system simulation using service oriented architecture | |
Genfer et al. | Identifying domain-based cyclic dependencies in microservice apis using source code detectors | |
Karnik et al. | A discussion on various methods in automatic abstractive text summarization | |
Jingbai et al. | A context awareness non-functional requirements metamodel based on domain ontology | |
Díaz et al. | Sticklet: An end-user client-side augmentation-based mashup tool | |
Shi et al. | Automated geoprocessing mechanism, processes and workflow for seamless online integration of geodata services and creating geoprocessing services |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121010 |