起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7988|回复: 13

[结贴] 定时任务报错 "RequestContext"不存在

  [复制链接]

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
发表于 2014-11-18 10:04:41 | 显示全部楼层 |阅读模式
在执行定时任务,走断点发现总是在执行SQL语句的时候报错。

2014-11-18 10:02:31 Job jGroup2.jDay2_1 threw an unhandled Exception:
com.justep.exception.BusinessException: 编码: JUSTEP150109; 提示: "RequestContext"不存在
        at com.justep.exception.BusinessException.create(Unknown Source)
        at com.justep.util.Utils.checkNotExist(Unknown Source)
        at com.justep.model.ModelUtils.getRequestContext(Unknown Source)
        at com.justep.model.ModelUtils.getRootModel(Unknown Source)
        at com.justep.model.impl.ModelImpl.getModel(Unknown Source)
        at com.justep.model.impl.ModelImpl.getModel(Unknown Source)
        at com.justep.model.impl.UtilImplementInstance.getModel(Unknown Source)
        at com.justep.model.ModelUtils.getModel(Unknown Source)
        at com.justep.system.data.SQL.select(Unknown Source)
        at com.bjinfotech.wzjc.util.DicUtil.getTabNumberByTabTypeId(DicUtil.java:28)
        at com.pushdata.quartz.ReportOfTendayJob.execute(ReportOfTendayJob.java:38)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
2014-11-18 10:02:31 Job (jGroup2.jDay2_1 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: com.justep.exception.BusinessException: 编码: JUSTEP150109; 提示: "RequestContext"不存在]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: com.justep.exception.BusinessException: 编码: JUSTEP150109; 提示: "RequestContext"不存在
        at com.justep.exception.BusinessException.create(Unknown Source)
        at com.justep.util.Utils.checkNotExist(Unknown Source)
        at com.justep.model.ModelUtils.getRequestContext(Unknown Source)
        at com.justep.model.ModelUtils.getRootModel(Unknown Source)
        at com.justep.model.impl.ModelImpl.getModel(Unknown Source)
        at com.justep.model.impl.ModelImpl.getModel(Unknown Source)
        at com.justep.model.impl.UtilImplementInstance.getModel(Unknown Source)
        at com.justep.model.ModelUtils.getModel(Unknown Source)
        at com.justep.system.data.SQL.select(Unknown Source)
        at com.bjinfotech.wzjc.util.DicUtil.getTabNumberByTabTypeId(DicUtil.java:28)
        at com.pushdata.quartz.ReportOfTendayJob.execute(ReportOfTendayJob.java:38)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        ... 1 more


1

主题

1222

帖子

1378

积分

金牌会员

Rank: 6Rank: 6

积分
1378
QQ
发表于 2014-11-18 10:11:22 | 显示全部楼层
代码怎么写的?
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 10:19:37 | 显示全部楼层
  1. package com.pushdata.quartz;

  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;

  8. import org.apache.log4j.Logger;
  9. import org.quartz.Job;
  10. import org.quartz.JobExecutionContext;
  11. import org.quartz.JobExecutionException;

  12. import com.bjinfotech.wzjc.check.CalcUtil;
  13. import com.bjinfotech.wzjc.util.CommonUtil;
  14. import com.bjinfotech.wzjc.util.DicUtil;
  15. import com.bjinfotech.wzjc.util.TabTypeUtil;
  16. import com.justep.system.data.KSQL;
  17. import com.justep.system.data.Row;
  18. import com.justep.system.data.SQL;
  19. import com.justep.system.data.Table;
  20. import com.justep.system.util.CommonUtils;

  21. public class ReportOfDayJob implements Job {
  22.         private static Logger log = Logger.getLogger(ReportOfDayJob.class);

  23.         public void execute(JobExecutionContext context) throws JobExecutionException {
  24.                 Map<String, Object> varMap = new HashMap<String, Object>(); //更新参数
  25.                 CommonUtil util = new CommonUtil();
  26.                 String[]tabId = util.getString("job_day_report").split(","); //获取日报报表号
  27.                 String[]tabNumber = new String[tabId.length];
  28.                  int index = 0;
  29.                 for (String string : tabId) {
  30.                         if(index == tabNumber.length){
  31.                                 break;
  32.                         }
  33.                         tabNumber[index] = DicUtil.getTabNumberByTabTypeId(Integer.parseInt(string)).toString();
  34.                         index ++;
  35.                 }
  36.                 List<String> param = new ArrayList<String>();
  37.                 String procName = "";
  38.                 param.add("0");
  39.                 for (int i = 0; i < tabNumber.length; i++) {
  40.                         procName = "proc_" + tabNumber[i] + "GD" + "(?)"; //拼存储过程
  41.                         log.info("[" + CommonUtils.getCurrentDate().toString().substring(0,10) + "] exec " + procName);
  42.                         //除重
  43.                         TabTypeUtil.fileManager(Integer.parseInt(tabId[i]));
  44.                         //归档
  45.                         CalcUtil.execProc(procName, null, param); //执行存储过程
  46.                         //生成新报告期
  47.                         varMap = new HashMap<String, Object>(); //更新参数
  48.                         String ksqls = "update Tab_Type t1 set t1.Report_Interval=:currentDate where t1=:tab_type_id";
  49.                         String currentDate = CommonUtils.getFirstDateOfMonth(CommonUtils.getCurrentDateTime()).toString();
  50.                         String tab_type_id = util.getString(tabNumber[i]);
  51.                         varMap.put("currentDate", currentDate);
  52.                         varMap.put("tab_type_id", tab_type_id);
  53.                         KSQL.executeUpdate(ksqls, varMap, "/wzjc/xzbb/data", null);
  54.                        
  55.                         String filterDW = new CommonUtil().getString("fDW");
  56.                         varMap = new HashMap<String, Object>();
  57.                         //问题 开始 调用 DicUtil.getTabNumberByTabTypeId(tab_type_id);时报错未解决 java.lang.NoClassDefFoundError
  58.                         varMap.put("tab_type_id", tab_type_id);
  59.                         Object o = KSQL.select("select t1.Report_Period from Tab_Type t1 where t1=:tab_type_id", varMap, "/wzjc/common/data", null).iterator().next().getValue(0);
  60.                         String tabType = o.toString();
  61.                         //问题 结束
  62.                        
  63.                         String tab_time = DicUtil.getReportIntervalByTabTypeId(tab_type_id).toString().substring(0, 10);
  64.                         Date curr_date = CommonUtils.toDate(tab_time);
  65.                         Date firstDayOfDate = CommonUtils.getFirstDateOfMonth(curr_date);
  66.                        
  67.                         List<String> ogns = new ArrayList<String>();
  68.                        
  69.                         StringBuffer ksql = new StringBuffer("");
  70.                         ksql.append(" select t1.Affiliation_ID as unit from tab_unit t1, tab_function_user t2 ");
  71.                         ksql.append(" where t1.Tab_Type_ID=t2.Tab_Type_ID and t1.statu='1' and t2.statu='1' and t2.function_code='B01' and Affiliation_ID not in ("+filterDW+") and t1.Tab_Type_ID="+tab_type_id+" ");
  72.                         varMap = new HashMap<String, Object>();
  73.                         varMap.put("tab_type_id", tab_type_id);
  74.                         Map<String, String> sql = new HashMap<String, String>();
  75.                         sql.put("MSSQL", ksql.toString());
  76.                         Table table = SQL.select(sql, null, "/wzjc/xzbb/data"); //KSQL.select(ksql.toString(), varMap, "/wzjc/xzbb/data", null);
  77.                         for (Iterator<Row> iterator = table.iterator(); iterator.hasNext();) {
  78.                                 String unit = "" + iterator.next().getValue(0);
  79.                                 if(!ogns.contains(unit)){
  80.                                         ogns.add(unit);
  81.                                 }
  82.                         }
  83.                        
  84.                         ksql = new StringBuffer("");
  85.                         ksql.append(" insert into Base_Tab_Affiliation_Stat t1 ");
  86.                         ksql.append(" (t1, t1.Unit_Tab_ID, t1.Tab_Type_ID, t1.Affiliation_ID, t1.SYNC_ID, t1.Tab_time) ");
  87.                         ksql.append(" values ( ");
  88.                         ksql.append(" :nextSeq('Base_Tab_Affiliation_Stat'), :unit_tab_id, :tab_type_id, :af_unit_tab_id, :uuid, :curr_date ");
  89.                         ksql.append(" ) ");
  90.                         //进入日期循环
  91.                        
  92.                         String query = "select t1.* from Base_Tab_Affiliation_Stat t1 where t1.Unit_Tab_ID=:unit_tab_id and t1.Tab_Type_ID=:tab_type_id and t1.Affiliation_ID = :af_unit_tab_id and t1.Tab_time=:curr_date";
  93.                        
  94.                         if("日报".equals(tabType)){
  95.                                 int totalDay = CommonUtils.getDay(CommonUtils.getLastDateOfMonth(curr_date));
  96.                                 for (int dw = 0; dw < ogns.size(); dw++) {
  97.                                         for (int day = 1; day <= totalDay; day++) {
  98.                                                 varMap = new HashMap<String, Object>();
  99.                                                 varMap.put("unit_tab_id", ogns.get(dw).concat("_" + (day < 10 ? "0" : "") + day));
  100.                                                 varMap.put("tab_type_id", tab_type_id);
  101.                                                 varMap.put("af_unit_tab_id", ogns.get(dw));
  102.                                                 varMap.put("uuid", CommonUtils.createGUID());
  103.                                                 varMap.put("curr_date", CommonUtils.addDays(firstDayOfDate, (day - 1)));
  104.                                                 Table tab = KSQL.select(query, varMap, "/wzjc/sjtb/data", null);
  105.                                                 if(tab.size()>0){
  106.                                                         System.out.println("["+ogns.get(dw).concat("_" + (day < 10 ? "0" : "") + day)+"]["+CommonUtils.addDays(firstDayOfDate, (day - 1))+"][had]已有记录,无需再次添加");
  107.                                                 }else{
  108.                                                         KSQL.executeUpdate(ksql.toString(), varMap, "/wzjc/sjtb/data", null);
  109.                                                 }
  110.                                         }
  111.                                 }
  112.                         }else if("旬报".equals(tabType)){
  113.                                 for (int dw = 0; dw < ogns.size(); dw++) {
  114.                                         for (int tenday = 1; tenday <= 3; tenday++) {
  115.                                                 varMap = new HashMap<String, Object>();
  116.                                                 varMap.put("unit_tab_id", ogns.get(dw).concat("_0" + tenday));
  117.                                                 varMap.put("tab_type_id", tab_type_id);
  118.                                                 varMap.put("af_unit_tab_id", ogns.get(dw));
  119.                                                 varMap.put("uuid", CommonUtils.createGUID());
  120.                                                 varMap.put("curr_date", CommonUtils.addDays(firstDayOfDate, (tenday - 1) * 10));
  121.                                                 Table tab = KSQL.select(query, varMap, "/wzjc/sjtb/data", null);
  122.                                                 if(tab.size()>0){
  123.                                                         System.out.println("["+ogns.get(dw).concat("_0" + tenday)+"]["+CommonUtils.addDays(firstDayOfDate, (tenday - 1) * 10)+"][had]已有记录,无需再次添加");
  124.                                                 }else{
  125.                                                         KSQL.executeUpdate(ksql.toString(), varMap, "/wzjc/sjtb/data", null);
  126.                                                 }
  127.                                         }
  128.                                 }
  129.                         }else{
  130.                                 for (int dw = 0; dw < ogns.size(); dw++) {
  131.                                         varMap = new HashMap<String, Object>();
  132.                                         varMap.put("unit_tab_id", ogns.get(dw));
  133.                                         varMap.put("tab_type_id", tab_type_id);
  134.                                         varMap.put("af_unit_tab_id", ogns.get(dw));
  135.                                         varMap.put("uuid", CommonUtils.createGUID());
  136.                                         varMap.put("curr_date", firstDayOfDate);
  137.                                         Table tab = KSQL.select(query, varMap, "/wzjc/sjtb/data", null);
  138.                                         if(tab.size()>0){
  139.                                                 System.out.println("["+ogns.get(dw)+"]["+firstDayOfDate+"][had]已有记录,无需再次添加");
  140.                                         }else{
  141.                                                 KSQL.executeUpdate(ksql.toString(), varMap, "/wzjc/sjtb/data", null);
  142.                                         }
  143.                                 }
  144.                         }
  145.                 }
  146.                
  147.         }

  148. }
复制代码
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 10:20:43 | 显示全部楼层
  1. package com.pushdata.quartz;

  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;

  5. import org.quartz.CronExpression;
  6. import org.quartz.CronTrigger;
  7. import org.quartz.JobDetail;
  8. import org.quartz.Scheduler;
  9. import org.quartz.SchedulerException;
  10. import org.quartz.SchedulerFactory;
  11. import org.quartz.SimpleTrigger;
  12. import org.quartz.impl.StdSchedulerFactory;

  13. public class TriggerRunner {
  14.         public static void main(String[] args) {
  15.                 //SimpleTrigger调度案例
  16. //                SimpleTrigger();
  17.                 //CronTrigger调度案例
  18. //                CronTrigger4();
  19. //                CommonUtil util = new CommonUtil();
  20. //               
  21. //                System.out.println(util.getString("job_day_exp"));
  22.                
  23.                 StringBuffer kh = new StringBuffer("");
  24.                 List<String> param = new ArrayList<String>();
  25.                 param.add("0");
  26.                 if(param!=null){
  27.                         kh.append("(");
  28.                         for (int i = 0, size = param.size(); i < size; i++) {
  29.                                 if(i!=0)
  30.                                         kh.append(",");
  31.                                 kh.append("?");
  32.                         }
  33.                         kh.append(")");
  34.                 }
  35.                 System.out.println(kh.toString()
  36.                                 );
  37.         }
  38.         /**
  39.          * SimpleTrigger调度案例
  40.          */
  41.         public static void SimpleTrigger(String jobName, String jobGroup, Class<?> job, String triggerName, String triggerGroup, Date runDate, int second, int times){
  42.                 try {
  43.                         //①创建一个JobDetail实例,指定SimpleJob
  44.                         JobDetail jobDetail = new JobDetail(jobName, jobGroup, job);
  45.                         //②通过SimpleTrigger定义调度规则:马上启动,每2秒运行一次,共运行100次
  46.                         SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName, triggerGroup);
  47.                         simpleTrigger.setStartTime(runDate); //执行时间
  48.                         simpleTrigger.setRepeatInterval(second*1000); //多少秒执行一次
  49.                         simpleTrigger.setRepeatCount(times); //执行多少次
  50.                         //③通过SchedulerFactory获取一个调度器实例
  51.                         SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  52.                         Scheduler scheduler = schedulerFactory.getScheduler();
  53.                         //④ 注册并进行调度
  54.                         scheduler.scheduleJob(jobDetail, simpleTrigger);
  55.                         //⑤调度启动
  56.                         scheduler.start();
  57.                 } catch (SchedulerException e) {
  58.                         // TODO Auto-generated catch block
  59.                         e.printStackTrace();
  60.                 }
  61.         }
  62.        
  63.         /**
  64.          * CronTrigger调度案例
  65.          */
  66.         public static void CronTrigger(String jobName, String jobGroup, Class<?> job, String exp, String triggerName, String triggerGroup){
  67.                 try {
  68.                         JobDetail jobDetail = new JobDetail(jobName, jobGroup, job);
  69.                         //①-1:创建CronTrigger,指定组及名称
  70.                         CronTrigger cronTrigger = new CronTrigger(triggerName, triggerGroup);
  71.                         //①-2:定义Cron表达式
  72.                         CronExpression cexp = new CronExpression(exp);
  73.                         //①-3:设置Cron表达式
  74.                         cronTrigger.setCronExpression(cexp);
  75.                         SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  76.                         Scheduler scheduler = schedulerFactory.getScheduler();
  77.                         scheduler.scheduleJob(jobDetail, cronTrigger);
  78.                         scheduler.start();
  79.                 } catch (Exception e) {
  80.                         e.printStackTrace();
  81.                 }
  82.         }
  83.        
  84. }
复制代码
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 10:21:12 | 显示全部楼层
  1. package com.pushdata.quartz;

  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;

  4. import org.apache.log4j.Logger;
  5. import org.quartz.Scheduler;
  6. import org.quartz.SchedulerException;
  7. import org.quartz.impl.StdSchedulerFactory;

  8. import com.bjinfotech.wzjc.util.CommonUtil;

  9. /**
  10. * Quartz计划任务工具类(集成X5)
  11. * @date 2014.10.27
  12. * @author wei
  13. */
  14. public class QuartzUtil extends HttpServlet {
  15.        
  16.         /**
  17.          *
  18.          */
  19.         private static final long serialVersionUID = -378478106008819308L;

  20.         private static Logger log = Logger.getLogger(QuartzUtil.class);
  21.        
  22.         private static CommonUtil util = new CommonUtil();
  23.         /**
  24.          * 加载计划任务列表
  25.          * 启动计划任务
  26.          */
  27.         public void init() throws ServletException{
  28.                 try {
  29.                         log.info("--------------------启动计划任务--------------------");
  30.                         Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  31.                         jh_1();
  32.                         jh_2();
  33.                         jh_3();
  34.                         scheduler.start();
  35.                         log.info("启动计划任务成功!");
  36.                 } catch (SchedulerException e) {
  37.                         log.error("启动计划任务发生异常!",e);
  38.                 }
  39.         }
  40.          /**
  41.      * 将计划从Scheduler中删除
  42.      * @param jobName 即task_id
  43.      * @throws Exception
  44.      */
  45.         public void removeFromScheduler(String jhrwId) throws Exception{
  46.         try {
  47.                 log.info("检索计划任务是否已存在...");
  48.             if(jhrwId!=null ){
  49.                 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  50.                 if(scheduler.getJobDetail(jhrwId, null)!=null){
  51.                     if(scheduler.getTrigger(jhrwId, null)!=null ){
  52.                         scheduler.pauseTrigger(jhrwId, null);
  53.                         log.info("删除Trigger完成!");
  54.                     }
  55.                     scheduler.unscheduleJob(jhrwId, null);
  56.                     scheduler.deleteJob(jhrwId, null);
  57.                     log.info("删除计划任务完成!");
  58.                 }else{
  59.                         log.info("未检索到计划任务!任务id:"+jhrwId);
  60.                 }
  61.             }else{
  62.                     log.info("未检索到计划任务!任务id:"+jhrwId);
  63.             }
  64.         } catch (Throwable e) {
  65.             throw new Exception("从Scheduler中删除计划异常",e);
  66.         }
  67.     }

  68.        
  69.         public void jh_1(){
  70.                 //日报
  71.                 String jobName = "jDay1_1";
  72.                 String jobGroup = "jGroup1";
  73.                 Class<?> job = ReportOfDayJob.class;
  74.                 String exp = util.getString("job_day_exp");
  75.                 String triggerName = "tDay1_1";
  76.                 String triggerGroup = "tGroup1";
  77.                 TriggerRunner.CronTrigger(jobName, jobGroup, job, exp, triggerName, triggerGroup);
  78.         }
  79.        
  80.         public void jh_2(){
  81.                 //旬报
  82.                 String jobName = "jDay2_1";
  83.                 String jobGroup = "jGroup2";
  84.                 Class<?> job = ReportOfTendayJob.class;
  85.                 String exp = util.getString("job_tenday_exp");
  86.                 String triggerName = "tDay2_1";
  87.                 String triggerGroup = "tGroup2";
  88.                 TriggerRunner.CronTrigger(jobName, jobGroup, job, exp, triggerName, triggerGroup);
  89.                
  90.         }
  91.        
  92.         public void jh_3(){
  93.                 //月报
  94.                 String jobName = "jDay3_1";
  95.                 String jobGroup = "jGroup3";
  96.                 Class<?> job = ReportOfMonthJob.class;
  97.                 String exp = util.getString("job_month_exp");
  98.                 String triggerName = "tDay3_1";
  99.                 String triggerGroup = "tGroup3";
  100.                 TriggerRunner.CronTrigger(jobName, jobGroup, job, exp, triggerName, triggerGroup);
  101.                
  102.         }
  103. }
复制代码
回复 支持 反对

使用道具 举报

89

主题

1377

帖子

1837

积分

金牌会员

Rank: 6Rank: 6

积分
1837
QQ
发表于 2014-11-18 10:23:35 | 显示全部楼层

...执行到哪个地方报错? 哪条SQL?
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 10:38:31 | 显示全部楼层
cyteamo 发表于 2014-11-18 10:23
...执行到哪个地方报错? 哪条SQL?

ReportOfDayJob 的 DicUtil.getTabNumberByTabTypeId(Integer.parseInt(string)).toString();执行后报错

  1. public static Object getTabNumberByTabTypeId(int tab_type_id){
  2.                 Map<String, Object> varMap = new HashMap<String, Object>();
  3.                 varMap.put("tab_type_id", tab_type_id);
  4.                 return KSQL.select("select t1.Tab_Number from Tab_Type t1 where t1=:tab_type_id", varMap, "/wzjc/common/data", null).iterator().next().getValue(0);
  5.         }
复制代码



走return后就进入JobRunShell.run,然后就报错
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2014-11-18 10:44:54 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 10:52:00 | 显示全部楼层
似乎只要调用方法就会报这个错误。
回复 支持 反对

使用道具 举报

61

主题

250

帖子

555

积分

高级会员

Rank: 4

积分
555
QQ
 楼主| 发表于 2014-11-18 11:01:47 | 显示全部楼层
jishuang 发表于 2014-11-18 10:44
定时调用可以参考http://bbs.justep.com/thread-40485-1-1.html

定时任务只能用这种方法吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-26 00:24 , Processed in 0.070344 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表