电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

NC技术培训资料-NC类加载机制.ppt

NC技术培训资料-NC类加载机制.ppt_第1页
1/22
YonyouSoftwareCorporationNC类加载机制用友软件股份有限公司魏享林2013年7月23日NC类文件组织结构1NC服务器端类加载2NC客户端类加载3NC6同NC5客户端类加载的差异4查找类所在位置及检查类是否有效的工具5引言提供解决java.lang.NoClassDefFoundException问题的思路1了解客户端代码缓存有时需要清空的原因2YonyouSoftwareCorporationNC类文件组织结构YonyouSoftwareCorporationNC服务器端类加载公共类加载器1产品模块私有类加载器2(1)加载的是NC类文件组织结构中既用于服务器端又用于客户端的类(2)NC中间件在启动时,动态扫描加载(3)WAS中间件,通过共享库,来指定类加载器的类路径(1)基于公共类加载器(2)Modules下面各个目录都有各自的私有类加载器(3)加载的是NC类文件组织结构中仅用于服务器端的类(4)模块私有类仅能被该模块的公有类调用YonyouSoftwareCorporationNC服务器端类加载案例:WAS中间件下,报sun.security.provider.Sun类找不到错误,NC中间件下无此问题(1)IBMJDK下,该类位于java\jre\lib\ext\ca_sun_14205.jar(2)SunJDK下,该类位于java\jre\lib\rt.jar(3)rt.jar是SunJRE启动时肯定会加载的jar包,而java\jre\lib\ext下的jar包肯定不会默认被加载(4)问题同中间件无关,同使用的JDK有关,NC中间件如果使用IBMJDK一样有问题(5)JRE默认不加载的jar包,如果需要用到,需要手工加进NC公共类加载器的类路径中(6)NC中间件下直接把jar包拷贝到公共类加载器的类路径中任一目录即可,WAS中间件下还需要更新共享库,通过wasSysConfig工具,更新was信息来完成YonyouSoftwareCorporationNC服务器端类加载案例:帐套升级报类找不到(1)用JarSearch工具查出该类位于modules\uap\client\uiuaptemplate.jar中(2)检查发现异常从后台发出,是后台引用了Client端类,导致类加载不到(3)BillUtil也在uiuaptemplate.jar中,但未报BillUtil找不到,检查发现,该类放到modules\uap\classes目录下(4)修改BillTempletVOUtil的实现,去掉对BillUtil的引用YonyouSoftwareCorporationNC客户端类加载Login.jsp中同客户端加载有关的Applet参数YonyouSoftwareCorporationNC客户端类加载Plugin自带类加载器(1)由Applet参数java_archive指定的jar包来确定类路径(2)从jar包中找到java_code参数指定的Applet类名,来加载Applet(3)NC_Login_v507.jar下载到客户端后,保存在JRE的临时目录下(4)Plugin自带类加载器加载了AppletContainer后,通过读取服务器地址及HTTP端口,在Plugin自带类加载器基础上创建NC自己的客户端类加载器NCClassLoader,从服务器上下载需要的类文件,以后的类加载走NCClassLoaderYonyouSoftwareCorporationNC客户端类加载NCClassLoader加载类机制客户端保存类文件版本信息的文件1(1)PVIDCache.dat为服务器上最新的类文件版本信息,Applet启动时,会同服务器做同步,确保同服务器一致,该文件是按包来存的,如果一个class文件既在jar包中,又在classes目录下,则会在PVIDCache.dat中存储两条记录(2)CLSIDCache.dat和JARVIDCache.dat分别保存客户端已下载的class和jar文件的版本信息,要加载一个类或jar文件时,会从这两个文件中读取版本信息,再同PVIDCache.dat中记录的版本信息做比较,如果不一致,说明需要再次下载YonyouSoftwareCorporationNC客户端类加载NCClassLoader加载类机制服务器端保存类文件版本信息的文件2(1)pkgvid.cache同客户端PVIDCache.dat对应,按包名存储类文件分布信息,同客户端PVIDCache.dat完全相同(2)pkgdesc.cache存储包所在的目录,还标明了文件的位置分类,如external\module、classes\lib\resources(3)version55.cache存储上次扫描包的版本号,是个数字,每次有变动时递增,digest存储上次扫描的包的摘要,启动扫描时,本次扫描的摘要会同上次摘要比较,不相同,则包的版本号加1,包的版本号同时记入version55.cache和pkgvid.cache(4)客户端判断包是否有更新,判断依据是版本号是否有变化(5)集群环境下只在master所在的机器上生成这些文件别的server这些信息只保存在内存中启动时直接YonyouSoftwareCorporationNC客户端类加载NC打补丁需要注意的问题如果补丁类在NC_Login_v507.jar中1(1)NC_Login_v507.jar需要重新生成,删除服务器上的NC_Login_v507.jar,运行sysConfig工具即可(2)清除JRE临时文件,让JRE重新下载NC_Login_v507.jar如果补丁类文件需要下载到客户端运行2因为类的扫描仅在master上进行,如果打了补丁,没有重启master,仅启了个别server,那么客户端也不会下载新的类YonyouSoftwareCorporationNC客户端类加载客户端类下载报错日志(1)packagenc.ui.sm.loginnohaveversions,maybenotinscanpaths,ifrequired,PLSputitcorrectPath(2)nc.ui.gl.assdetail.AssDetailUInotloaded,FATALERROR(3)codedownloadexception,plscheckserverisstartedYonyouSoftwareCorporationNC客户端端类加载案例:Java控制台报找不到类nc.ui.sm.login.AppletContainer.class(1)日志报错信息如下:(2)提示连接http://192.168.1.104:1280/nc/ui/sm/login/AppletContainer.class错误,但该AppletContainer.class并不在nchome\webapps\nc_web下,而在NC_Login_v507.jar中,出现这个问题,说明JRE缓存的NC_Login_v507.jar损坏了YonyouSoftwareCorporationNC客户端端类加载案例:Java控制台报找不到类nc.ui.sm.login.AppletContainer.class((3)清除JRE缓存的临时文件即可YonyouSoftwareCorporationNC客户端端类加载案例:客户端加载不到资金模块类(1)Java控制台报类找不到:(2)用jarsearch工具在服务器端搜该类所在的jar包,发现在uifbm.jar中(3)NCCache中确实没有uifbm.jar,说明类下载出问题(4)比较客户端和服务器商的类版本信息文件,发现服务器端上没有pkgvid.cache和pkgdesc.cache文件YonyouSoftwareCorporationNC客户端端类加载案例:客户端加载不到资金模块类(5)生成pkgvid.cache是在master上进行的,检查master上的SystemOut.log文件,发现如下报错信息(6)说明是linux下打开的文件过多,导致无法生成pgkvid.cache文件(7)检查linux下的nofile参数,发现是1024,而NC建议是6144,修改为6144后,重启was,问题解决YonyouSoftwareCorporationNC6与NC5客户端类加载机制的差异服务器端缓存版本文件差异1客户端缓存版本文件差异2(1)NC5用4个文件来存版本信息,NC6只有一个文件(2)NC5用一个维护的版本号来判断包是否有更新,NC6直接判断判断包的摘要(3)NC6的版本信息文件为nchome\pack-index.ucs,默认不生成,修改nchome\ierp\bin\provision-config.properties,设置enableCodeScan=truesavePackIndex=trueYonyouSoftwareCorporationNC6与NC5客户端类加载机制的差异客户端下载的代码文件差异3YonyouSoftwareCorporation查找类所在位置及检查类是否有效的工具用JarSearch工具查类所在的jar包1用jsp检查类是否损坏2类加上包名,查找更准确1.将要查的类,带上包名,替换上图中nc.vo.ntb.outer.IBusiSysExecDataExtProvider2.文件放到nchome\webapps\nc_web下,通过IE访问该JSP,如果界面上输出FindClassOK,说明该类没有损坏3.只能检查公共类加载器的类,对于模块私有类及客户端类,无法检查YonyouSoftwareCorporation一点建议1.碰到需要清除客户端缓存代码文件时,不必急于删除,可以将原来的目录改个名,既不影响用户使用,也便于排查问题2.服务器上的版本信息文件也要保存,NC6需要修改配置文件,让版本信息文件生成3.将代码缓存目录及服务器版本信息文件上传,分析客户端类加载不正常的原因YonyouSoftwareCorporation

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

NC技术培训资料-NC类加载机制.ppt

您可能关注的文档

管理软件+ 关注
实名认证
内容提供者

管理软件资料分享

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信