问题场景:
DEP扩展新建的字段,在方案启用的情况下,部分用户出现字段找不到的报错,需要重启DEP方案才能正常,过一段时间可能又出现相同的报错
类似异常信息:
can't find column in table. bo:com.kingdee.eas.cp.bc.app.BizAccountOutBillEntry, prop:entryTicNumber
can't find column: person fullname: person.id, bo :com.kingdee.eas.hr.emp.app.EmployeeContract
cannot find property: isEnable, bo:com.kingdee.eas.fm.rpm.app.RPDMatchSetting
......
原理解析:
DEP扩展的元数据信息是保存在数据库,DEP方案启用后,由元数据引擎加载到内存中,每个实例上都有一份元数据缓存;当DEP方案启用或反启用,会清除当前实例的缓存,并通知同一个群集(管理控制台-群集控制器)中的其他实例清除缓存;当某个实例的缓存不一致,那登录在这个实例上的用户就会出现上述相关的报错,此时重启DEP方案清除缓存后重新加载就解决了。
问题分析定位:
元数据缓存加载是在实例运行过程中,第一次使用这个元数据的时候,存在两种情况:
A.DEP方案启用或反启用,清除缓存后第一次使用;B.服务启动后第一次使用
要先分清楚哪种场景再定位问题,可以查询DEP方案启用或反启用的上机日志,判断哪种情况出现的缓存不一致
查询上一次服务器重启时间到报错时间里,条件【功能=动态扩展方案】的上机日志,如果查到了数据,说明属于情况A,反之属于情况B
情况A:在DEP启用或反启用,跨实例清除缓存时,出现缓存不一致,产品已有补丁修复,更新补丁即可
各版本补丁号:8.0—PT164163 8.2—PT164375 8.5—PT163916 8.6.1—PT163643 8.8发版已修复
情况B:通过报错用户登录实例(通过用户监控查询登录实例),收集该实例启动时的apusic日志,搜索是否出现以下相同的错误
报错原因是EAS的EJB容器尚未初始化,已经开始了一系列业务动作,从而导致DEP缓存加载失败
容器启动顺序,是在配置文件apusic/domians/server*/config/server.xml中,正确配置如下:
检查所有实例的server.xml文件,按照EAS、jportal、EASWeb、fileserver等顺序配置后,重启服务问题解决
推荐阅读