NCCloud莫名其妙的PK锁
关于NCCloud环境中单据生成后生成莫名其妙的PK锁
问题描述
项目中偶尔会遇到生成单据后生成某用户的PK锁,导致单据不能进一步修改的问题,而且该PK锁不会被任何用户解锁。
处理方法
项目中有两种解决方法,一种是由集团出具补丁,一般是集团修改了hotwebs\nccloud\WEB-INF\classes\nccloud\web\riasm\sysmonitor\action\ClearLock.java类,打上该补丁后仍需要在“动态建模平台”>“系统管理”>“系统监视器”节点中通过对应用户的账号登录来手动解锁;
另一种方法是尝试在修改保存动作开始时通过代码去进行解锁,具体实现为:
PKLock lock = PKLock.getInstance();
BaseDAO dao = new BaseDAO();
//这里使用的是默认用户“yonyou”,生成的PK锁也是该用户的PK锁,需要查询到对应的cuserid
String sql = "select cuserid from sm_user where user_code = 'yonyou'";
String cuserid = (String)dao.executeQuery(sql, new ColumnProcessor());
//查询默认数据源,数据源不可能是空故没有进行判空
String[] dsName = ServerConfiguration.getServerConfiguration().getDataSourceNames();
LockableVO[] allLockVOs = lock.getUserLockVOs(cuserid,dsName[0]);
//下边这一行比较重要,如果没有这一行可能会导致“yonyou”的PK锁解不掉
InvocationInfoProxy.getInstance().setUserId(cuserid);
for (int i = 0;allLockVOs !=null && i < allLockVOs.length; i++) {
LockableVO lockableVO = allLockVOs[i];
lock.releaseLock(lockableVO.getLockable(), cuserid, dsName[0]);
}
本次的项目上由于版本的问题,一开始无论任何用户都不能解锁,故两种方式全都使用了,集团的补丁解决的无论任何用户都不能解锁的问题,代码实现了修改保存的时候针对默认用户“yonyou”的PK锁解锁问题,免去了频繁登录该用户去解锁的操作,希望能对受到类似问题困扰的朋友有所帮助。