如附件图所示,在线同步用户报错
查看报错堆栈如下:
Caused by: java.lang.ClassCastException: com.apusic.naming.jndi.CNContext cannot be cast to javax.sql.DataSource
at com.kingdee.bos.framework.ejb.EJBUtils.ensureDataSource(EJBUtils.java:140)
at com.kingdee.bos.framework.ejb.EJBUtils.getConnection(EJBUtils.java:92)
at com.kingdee.eas.base.permission.app.util.interior.LicenseUseSrvSingletonManager.mergeOtherDBUserLicenseGroup(LicenseUseSrvSingletonManager.java:340)
at com.kingdee.eas.base.permission.app.util.interior.LicenseUseSrvSingletonManager.getGroupsFromUserLicenseGroup(LicenseUseSrvSingletonManager.java:318)
分析:
经查看代码可知,该配置项是从eas/server/profiles/server*/config/bosconfig.xml中取值,故需先检查该配置文件下的参数,如下图所示
如上图所示可以看出,此配置文件不存在问题,只配置了一个数据中心,故需检查eas\server\properties 的datacenter.xml文件是否正确
上述文件也没有问题,故查询分析器运行以下服务端脚本排查是否加载到其他数据库信息:com.kingdee.bos.framework.ejb.EJBFactory.getQueryDataSources()
参考脚本:
从上图可以看出存在test0208数据库,故需移除此数据中心
解决措施:
客户端直连server1运行以下服务端脚本
参考脚本:
var clazz = java.lang.Class.forName("com.kingdee.bos.framework.ejb.EJBFactory");
var field = clazz.getDeclaredField("queryDSCache");
field.setAccessible(true);
var map = field.get(clazz);
map.remove("test0208");
再次同步成功
推荐阅读