报错如下:

weaver.conn.util.ProcChecker
java.lang.ClassNotFoundException: com.weaver.procedure.test.Test_20220808 (in EnvironmentClassLoader[web-app:production/webapp/default/ROOT])at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1559)at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1529)

存储过程却能够正常执行。

看下这个RecordSet.executeProc方法

 public boolean executeProc(String var1, List<String> var2, String var3) {if (!"".equals(var1) && MonitorSqlUtil.getInstance().isIntercept(var1)) {(new BaseBean()).writeLog(var1 + "此sql不符合性能要求,已被拦截!");return false;} else {var1 = var1.trim();ProcChecker var4 = new ProcChecker(new ProcParamStore(var1, var3, this, this.args, true));if (var4.hasClass()) {try {var4.executeProc();this.bSuccess = true;} catch (Exception var39) {this.setExceptionMsg(var39.getMessage());this.bSuccess = false;this.writeLog(var39);}return this.bSuccess;} else {this.sqlTmp = var1;this.setExceptionMsg("");long var5 = 0L;long var7 = 0L;if (StringUtil.isEmpty(var1)) {this.setExceptionMsg("Query statement or procedure name is empty!");return false;} else {....以下省略
}

再看了下一下,这个 weaver.conn.util.ProcChecker 类

public class ProcChecker extends BaseBean {private static final Map<String, Constructor<?>> constructMap = new ConcurrentHashMap();private static final String PREFIX_PACKAGE = "com.weaver.procedure.";private boolean hasClass = true;private DBProcedureInterfaceWrapper dbpWrapper;private static final Lock lock = new ReentrantLock();public ProcChecker(ProcParamStore var1) {String var2 = var1.getProcName();if (!StringUtil.isEmpty(var2)) {var2 = var2.toLowerCase();Constructor var3 = (Constructor)constructMap.get(var2);try {if (var3 == null) {lock.lock();try {if ((var3 = (Constructor)constructMap.get(var2)) == null) {String var4 = this.getClassPath(var2);Class var5 = Class.forName(var4);if (var5.isAnnotationPresent(PendingProc.class)) {this.writeLog("the related procedure is not completed yet : " + var2);this.hasClass = false;return;}var3 = var5.getConstructor(ProcParamStore.class);constructMap.put(var2, var3);}} finally {lock.unlock();}}this.dbpWrapper = new DBProcedureInterfaceWrapper((DBProcedureMethodInterface)var3.newInstance(var1));} catch (Exception var10) {this.writeLog(String.format("info: proc %s-----%s\n", var2, var10.getMessage()));this.hasClass = false;this.writeLog("no related class refers to the procedure : " + var2);}}}....以下省略
}

大概了解,在执行存储过程 ProcChecker 这个类构造方法,执行到这个导致错误出现
Class var5 = Class.forName(var4),抛出:java.lang.ClassNotFoundException: com.weaver.procedure.
也就是说E9 中调用存储过程,每个存储过程对应下 com.weaver.procedure 都有具体的实现类。

以系统的存储过程为例:
Base_freefield_select

CREATE OR REPLACE PROCEDURE Base_FreeField_Select(tablename_1 varchar2,flag        out integer,msg         out varchar2,thecursor   IN OUT cursor_define.weavercursor) AS
beginopen thecursor forSELECT * FROM Base_FreeField WHERE tablename = tablename_1;
end;
package com.weaver.procedure.base;import weaver.conn.DBProcedureSimpleInterface;
import weaver.conn.util.ProcParamStore;public class Base_freefield_select extends DBProcedureSimpleInterface {private Object[] params;public Base_freefield_select(ProcParamStore var1) {super(var1);this.params = var1.getParams();}public void executeProc() throws Exception {this.executeQuery("SELECT * FROM Base_FreeField WHERE tablename= ?", new Object[]{this.params[0]});}
}

结论如下:

1.解决报错问题,对应的存储过程,对应存储过程类继承 DBProcedureSimpleInterface ,重写这个executeProc 方法
2.使用executeProc2 ,支持标准调用存储过程,去掉注册参数flag 、msg。
executeProc 和 executeProc2 调用相同,参数列表1.存储过程,2. 参数,多个使用Util.getSeparator() 分开,3.数据源名称,如果是OA的数据源,为空即可
3.不用专注这个错误,进去是打印一个日志,不会影响到存储过程执行
4.现在的业务逻辑不推荐使用存储过程来实现,存储过程难以调试及扩展(阿里巴巴开发手册中提到这点)

泛微OA E9 weaver.conn.util.ProcChecker java.lang.ClassNotFoundException: com.weaver.procedure. 报错相关推荐

  1. 泛微OA E9 开发 创建系统工作流程提醒

    泛微OA中有很多 默认的系统工作流提醒,泛微厂商也提供好了接口给到二次开发人员 SysRemindWorkflow sys=new SysRemindWorkflow(); String hrmid= ...

  2. 泛微OA E9后端环境搭建(IDEA) Ecology 9二次开发环境搭建 ecology二次开发

    我们在参与泛微开发有七年多的经验,实践过十多个不同的开发项目. 我们提供泛微平台技术支持顾问.项目开发.提供开发资料等服务. 期间收集.整理.归纳专门针对泛微开发的专业技能资料: E9 开发资料大全 ...

  3. 泛微OA E9 E8 开发 培训 ecology

    本人三年专职泛微二开,上万人集团 效力过2家. 提供各种E8,E9开发资料,解决方案   有需要 请加qq 1255605448

  4. 泛微OA E9之IDEA环境搭建

    大佬教程 其中需要修改的地方有 初始化成功之后默认的登录账号密码是sysadmin和Weaver@2001 如果下载的安装包在启动之后报错且是跟web-inf文件夹下的web.xml文件有关的则是第二 ...

  5. 【文档留存】泛微OA POC

    泛微OA &&POC 泛微OA 多版本存在命令执行 POC&EXP来源于网络 漏洞描述: 泛微e-cology OA系统的J**A Beanshell接口可被未授权访问,攻击者 ...

  6. 泛微OA.E9--01--限制发起人每个月发起流程的次数

    泛微OA.E9–01–限制发起人每个月发起流程的次数 功能描述: 现有一个流程叫补卡申请流程,每个人忘记打卡了都可以发起补卡申请流程进行补卡.but 每个人每个月只可以发起两次该流程,当每月发起流程超 ...

  7. java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener

    一:如果出现下面的错误信息,如果你的项目是Maven结构的,那么一般都是你的项目的Maven Dependencies没有添加到项目的编译路径下: 五月 10, 2015 6:23:18 下午 org ...

  8. 泛微OA发送内部邮件教程【E9版本】

    泛微OA发送内部邮件教程 1.发布泛微邮件的WebService接口 2.使用eclipse根据wsdl生成客户端 3.接口重写问题 4.使用kettle定时发送内部邮件 1.发布泛微邮件的WebSe ...

  9. 【利用WebServices实现泛微OA周期待办任务提醒】

    利用WebServices实现泛微OA周期待办任务提醒 项目背景 实现思路 1.创建自动生成流程的WebServices 2.创建一个周期待办提醒列表 3.创建操作系统的定时任务 4.存储过程实现时间 ...

最新文章

  1. 经过不断努力 终于获得“推荐博客”的荣誉
  2. rhel系统启动过程_Linux 的启动流程
  3. c语言中管理员信息注册,regsvr32注册控件如果使用管理员身份执行
  4. Matlab的Floor, Ceil, Fix, Round
  5. 【Python】开启Pandas进阶:图解Pandas透视表、交叉表
  6. Shell编程中Shift的用法(转)
  7. vue 实例化几种方式_vue注册组件的几种方式总结
  8. Java IO 系列(01)-Java IO概述
  9. (五)cobbler自定义系统安装
  10. URI,URL的区别
  11. Atitit 软件开发基本法 目录 1. 第一章 总纲(包含各大原则 定律 法则) 1 2. 爱提拉的原则 3 2.1. 简单原则 KISS 3 2.2. 提升可读性 面向人类编程 而不是面向机
  12. ANSI字符集和Unicode字符集
  13. SOAP协议和HTTP协议的区别
  14. 图解TCP/IP 读后感
  15. python蓝牙控制手机打电话_树莓派 python bluetooth,用pybluez控制蓝牙
  16. 【年度榜单】2020大数据产业创新技术突破丨数据猿·金猿榜
  17. 【悟空云课堂】第三十九期:违反信任边界(CWE-501: Trust Boundary Violation)
  18. 可升级鸿蒙的设备,华为鸿蒙即将到来,华为终于“出手”了!哪些机型可升级? - 王石头...
  19. go 计算两个时间的时间差
  20. 布置主卧室的八大风水要点

热门文章

  1. 关于RegDeleteKey无法删除注册表项
  2. 广州、上海两地泵管阀展在行业的热切盼望中重启
  3. 顶呱呱:厦门6少年30秒洗劫小米专卖店
  4. 【记录】 Keras 使用官方模型
  5. 3D模型拆分与合并展示,IVX真的可以简单实现
  6. 大学生环保主题网页制作 环境网页设计模板 学生静态网页作业成品 dreamweaver保护地球环境HTML网站制作
  7. 计算机上标和下标的快捷键,三步法教你迅速在Word中设置上标和下标,上标与下标的快捷键是什么?...
  8. FBEC大会 | 全球元宇宙CEO峰会演讲干货汇总
  9. 【Linux】什么是粘滞位
  10. 如何快速来一套苹果全家桶