- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于JAVACS结构GIS系统热升级技术研究
基于JAVACS结构GIS系统热升级技术研究
摘要:本文主要阐述基于JAVA的CS结构GIS系统热升级技术概述,热升级技术原理以及热升级技术在系统结构研究。
关键词:JAVA;热升级;技术;研究
中图分类号:TP312 文献标识码:A
1热升级技术概述
在程序开发过程中,要求需要程序有弹性,容易扩充,在开发部分周期长的行业软件时,由于运作过程中客户会对项目产生新的要求,整个软件的需求可能发生部分变更,这便是程序开发的一种动态的需求。一般来说,部分的老的程序语言先天上并不具备这种动态的本质,如C、C++。如要让用这类语言开发的系统具有动态,就必须依赖系统操作系统的某些机制来支持,比如Windows下的动态链接库(DynamicLinkingLibrary),但是这种动态的实现需要增加一定的工作量,增加了系统的复杂程度,同时对将来系统迁移到其他平台也会造成障碍。相对这些不具备动态性的程序语言来说,JAVA是一个从底层就支持动态的程序语言。在JAVA对每个类编译之后,每个类都被保存成为了一个个的.class文件。
对于JAVA虚拟机来说,每个.class文件就类似于Windows下的动态链接库一样,只要知道类对外的接口,便可以按需使用。正因为这个特性,在JAVA程序中我们可以不编译其他代码的情况下,只修改那些有问题的或者需要改变的代码部分并进行编译,并替换掉原先对应类的.class文件。当下次JAVA虚拟机重新启动时,这个JAVA程序就会因为载入了新的.class文件,自己功能也进行了更新。这是JAVA提供的一个基础的动态性的体现。在开发B/S结构的系统时,由于有Tomcat这样的Web服务器作为中间件,独立承担网络处理的性能和安全等功能,所以,开发者只需要集中开发业务逻辑,然后将它无缝的融合到Tomcat中就可以了。并且,在业务逻辑开发过程中,服务器不用反复重新启动,启动一次,就能够自动部署开发人员逐步开发出的代码,将代码融合到服务器中,实现“热部署”。而C/S在这一方面一直没有比较好的解决方案,本文要研究的即在升级过程中在不中断服务端程序的基础下进行升级的一种技术改造方案。
在JAVA中有多种方式来载入类,一种是通过new关键字隐式载入。当用new方法构造一个新的对象时,如果这个类是第一次实例化,系统会从磁盘上载入这个类。第二种方式是通过Class.forName()方法载入,最常见的就是使用JDBC连接数据库时,第一步都会用Class.forName()载入对应数据库类型的驱动,而当系统连接的数据库类型发生变化时,只需要把forNameO方法参数中的驱动字符串名称改变为对应的用BC驱动类名即可,这也可体现出JAVA的一种动态。
最后一种方式是使用classL0ad的loadclass()方法来动态载入指定的类,是一种较为底层的实现方式。以上三种类的区别是在于new方法只能载入编写代码时指定的类,这个类的对应关系将会在编译时被确定,如果要替换掉这个类,即使这个类本身对外的方法都没有发生变化也必须重新启动JAVA虚拟机。这并不能满足上文所说的不停止服务改变功能的需求。第二种方式虽然能够在运行中指定要载入的类,但是由于Class.forName()本身还是调用了系统的类载入器,而在系统的类载入器结构中,同一个类只能载入一次,改变了类编译之后也需要重新启动JAVA虚拟机才可能对功能发生变化。所以第二种方式也不能满足本文所说的要求。第三种方式是JAVA自身的实现方式,如果通过自己构建一个类载入器动态载入类,虽然底层仍然是调用虚拟机内实现的底层本地代码类载入器来解析.class文件并载入类,但是可以绕过系统类载入器的“一个类只能载入一次”的限制,所以能满足本文的需求。这也是本文要用于实现热升级使用的核心方式。
2热升级技术原理
热升级对于JAVA程序简单来说,就是在运行时,用新的类替换掉JAVA虚拟机中的类。也可以理解为一种动态载入类同时可以用新类接管各种类行为的一种方案。热升级技术的核心是动态载入类,动态替换类,接管各种类的调用。在替换了原有类之后,其他未被替换的程序部分应该能够找到正确新类入口,并且正常完成包括类实例化,静态方法调用等等一系列与这个类有关的操作,还要保证在这个过程中系统的服务仍要能正常使用。
2.1JAVA类管理机制
JAVA是一个面向对象的语言,每一个类在JAVA中都可以用Class类的对象来表示,同时我们也可以用这个类构造出来的实例调用.getdass()方法来得到这个Class类的对象。在JAVA中每个类都是由classfoader(类载入器)来载入的,在JVM中一个类是用其全名再附加上一个加载类类载入器的实例作为唯一标识。默认情况
原创力文档


文档评论(0)