Produced by Araxis Merge on 6/11/2019 10:54:15 AM Eastern Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.
| # | Location | File | Last Modified |
|---|---|---|---|
| 1 | HTRE_P3_v14.5_iter_4_build_14.zip\java\gov\va\med\fw\scheduling | QuartzSchedulingService.java | Wed May 29 15:26:24 2019 UTC |
| 2 | HTRE_P3_v14.5_iter_4_build_14.zip\java\gov\va\med\fw\scheduling | QuartzSchedulingService.java | Mon Jun 10 19:27:47 2019 UTC |
| Description | Between Files 1 and 2 |
|
|---|---|---|
| Text Blocks | Lines | |
| Unchanged | 2 | 1186 |
| Changed | 1 | 2 |
| Inserted | 0 | 0 |
| Removed | 0 | 0 |
| Whitespace | |
|---|---|
| Character case | Differences in character case are significant |
| Line endings | Differences in line endings (CR and LF characters) are ignored |
| CR/LF characters | Not shown in the comparison detail |
No regular expressions were active.
| 1 | /********* ********** ********** ********** ********** ********** ********** ********** ********** | |
| 2 | * Copyrii ght 2004 V HA. All ri ghts reser ved | |
| 3 | ********* ********** ********** ********** ********** ********** ********** ********** *********/ | |
| 4 | // Package | |
| 5 | package go v.va.med.f w.scheduli ng; | |
| 6 | ||
| 7 | // Java cl asses | |
| 8 | import jav a.io.Seria lizable; | |
| 9 | import jav a.util.Arr ayList; | |
| 10 | import jav a.util.Dat e; | |
| 11 | import jav a.util.Lis t; | |
| 12 | import jav a.util.Pro perties; | |
| 13 | import jav a.util.Set ; | |
| 14 | ||
| 15 | import org .apache.co mmons.lang .StringUti ls; | |
| 16 | import org .apache.co mmons.lang .Validate; | |
| 17 | import org .apache.lo g4j.Logger ; | |
| 18 | import org .quartz.Cr onSchedule Builder; | |
| 19 | import org .quartz.Cr onTrigger; | |
| 20 | import org .quartz.Jo bDetail; | |
| 21 | import org .quartz.Jo bKey; | |
| 22 | import org .quartz.Jo bListener; | |
| 23 | import org .quartz.Jo bPersisten ceExceptio n; | |
| 24 | import org .quartz.Sc heduler; | |
| 25 | import org .quartz.Sc hedulerExc eption; | |
| 26 | import org .quartz.Sc hedulerFac tory; | |
| 27 | import org .quartz.Si mpleTrigge r; | |
| 28 | import org .quartz.Tr igger; | |
| 29 | import org .quartz.Tr igger.Trig gerState; | |
| 30 | import org .quartz.Tr iggerBuild er; | |
| 31 | import org .quartz.Tr iggerKey; | |
| 32 | import org .quartz.im pl.StdSche duler; | |
| 33 | import org .quartz.im pl.StdSche dulerFacto ry; | |
| 34 | import org .quartz.im pl.matcher s.GroupMat cher; | |
| 35 | import org .quartz.pl ugins.hist ory.Loggin gJobHistor yPlugin; | |
| 36 | import org .springfra mework.bea ns.BeansEx ception; | |
| 37 | import org .springfra mework.bea ns.factory .Initializ ingBean; | |
| 38 | import org .springfra mework.bea ns.factory .annotatio n.Value; | |
| 39 | import org .springfra mework.bea ns.factory .config.Pr opertiesFa ctoryBean; | |
| 40 | import org .springfra mework.con text.Appli cationCont ext; | |
| 41 | import org .springfra mework.con text.suppo rt.Applica tionObject Support; | |
| 42 | import org .springfra mework.ste reotype.Se rvice; | |
| 43 | ||
| 44 | import edu .emory.mat hcs.backpo rt.java.ut il.Arrays; | |
| 45 | import gov .va.med.cc ht.util.ES APIValidat ionType; | |
| 46 | import gov .va.med.cc ht.util.ES APIValidat or; | |
| 47 | import gov .va.med.fw .service.A bstractCom ponent; | |
| 48 | import gov .va.med.fw .service.S erviceExce ption; | |
| 49 | import gov .va.med.fw .service.t rigger.Tri ggerEvent; | |
| 50 | import gov .va.med.fw .util.Inva lidConfigu rationExce ption; | |
| 51 | ||
| 52 | /** | |
| 53 | * Provide s methods to schedul e, to unsc hedule, an d to resch edule a jo b. This | |
| 54 | * service delegates to the un derlying Q uart Sched uling fram ework to d o the | |
| 55 | * actual scheduling task. Thi s service is aimed t o encapsul ate the ac tual | |
| 56 | * impleme ntation an d ocnfigur ation of a scheduler and to pr ovide the most | |
| 57 | * conveni ent method s for sche duling a t ask. For m ore advanc e tasks, c onsider | |
| 58 | * using a scheduler that can be obtaine d through a getSched uler metho d. | |
| 59 | * <p/> | |
| 60 | * Project : Framewor k</br> Cre ated on: 1 0:52:58 AM </br> | |
| 61 | * | |
| 62 | * @author DN S
|
|
| 63 | */ | |
| 64 | @Service | |
| 65 | public cla ss QuartzS chedulingS ervice ext ends Appli cationObje ctSupport implements Serializa ble, | |
| 66 | Sche dulingServ ice, Initi alizingBea n { | |
| 67 | ||
| 68 | pr ivate Logg er logger = Logger.g etLogger(Q uartzSched ulingServi ce.class); | |
| 69 | ||
| 70 | /* * | |
| 71 | * An instan ce of seri alVersionU ID | |
| 72 | * / | |
| 73 | pr ivate stat ic final l ong serial VersionUID = 3171280 9258413795 97L; | |
| 74 | ||
| 75 | /* * | |
| 76 | * An instan ce of sche duler | |
| 77 | * / | |
| 78 | pr ivate Sche duler sche duler = nu ll; | |
| 79 | ||
| 80 | pr ivate Stri ng immedia teTriggerK ey; | |
| 81 | ||
| 82 | pr ivate Stri ng futureT riggerKey; | |
| 83 | ||
| 84 | pr ivate bool ean isClus tered = fa lse; | |
| 85 | ||
| 86 | /* * | |
| 87 | * @see gov. va.med.fw. service.Ab stractComp onent#afte rPropertie sSet() | |
| 88 | * / | |
| 89 | @O verride | |
| 90 | pu blic void afterPrope rtiesSet() throws Ex ception { | |
| 91 | ||
| 92 | imme diateTrigg erKey = go v.va.med.f w.scheduli ng.Schedul ingService .IMMEDIATE _TRIGGER_N AME; | |
| 93 | futu reTriggerK ey = gov.v a.med.fw.s cheduling. Scheduling Service.FU TURE_TRIGG ER_NAME; | |
| 94 | ||
| 95 | StdS chedulerFa ctory sche dFact = ne w org.quar tz.impl.St dScheduler Factory(); | |
| 96 | ||
| 97 | Pr operties p rops = new Propertie s(); | |
| 98 | ||
| 99 | // General | |
| 100 | pr ops.put(St dScheduler Factory.PR OP_SCHED_I NSTANCE_NA ME, "av_sc hed_cluste red"); | |
| 101 | pr ops.put(St dScheduler Factory.PR OP_SCHED_I NSTANCE_ID , "AUTO"); | |
| 102 | ||
| 103 | // Thread po oling ? | |
| 104 | pr ops.put("o rg.quartz. threadPool .class", o rg.quartz. simpl.Simp leThreadPo ol.class.g etName()); | |
| 105 | pr ops.put("o rg.quartz. threadPool .threadCou nt", "25") ; | |
| 106 | pr ops.put("o rg.quartz. threadPool .threadPri ority", "5 "); | |
| 107 | ||
| 108 | // JobStore | |
| 109 | pr ops.put("o rg.quartz. jobStore.c lass", "or g.quartz.i mpl.jdbcjo bstore.Job StoreTX"); | |
| 110 | pr ops.put("o rg.quartz. jobStore.d riverDeleg ateClass", "org.quar tz.impl.jd bcjobstore .StdJDBCDe legate"); | |
| 111 | pr ops.put("o rg.quartz. jobStore.u seProperti es", false ); | |
| 112 | pr ops.put("o rg.quartz. jobStore.d ataSource" , "sched") ; | |
| 113 | pr ops.put("o rg.quartz. jobStore.t ablePrefix ", "QRTZ_" ); | |
| 114 | pr ops.put("o rg.quartz. jobStore.i sClustered ", "true") ; | |
| 115 | pr ops.put("o rg.quartz. jobStore.c lusterChec kinInterva l", "20000 "); | |
| 116 | pr ops.put("o rg.quartz. jobStore.m isfireThre shold", "6 0000"); | |
| 117 | pr ops.put("o rg.quartz. jobStore.m axMisfires ToHandleAt ATime", "2 0"); | |
| 118 | ||
| 119 | pr ops.put("o rg.quartz. dataSource .sched.jnd iURL", "jd bc.CchtDat aSourceQua rtz"); | |
| 120 | pr ops.put("o rg.quartz. dataSource .sched.val idationQue ry", "SELE CT 1"); | |
| 121 | pr ops.put("o rg.quartz. dataSource .sched.val idateOnChe ckout", tr ue); | |
| 122 | ||
| 123 | ||
| 124 | tr y { | |
| 125 | schedF act.initia lize(props ); | |
| 126 | schedu ler = sche dFact.getS cheduler() ; | |
| 127 | } ca tch (Sched ulerExcept ion e) { | |
| 128 | e.prin tStackTrac e(); | |
| 129 | } | |
| 130 | ||
| 131 | } | |
| 132 | ||
| 133 | /* * | |
| 134 | * @see gov. va.med.fw. scheduling .Schedulin gService#i sClustered () | |
| 135 | * / | |
| 136 | pu blic boole an isClust ered() { | |
| 137 | retu rn this.is Clustered; | |
| 138 | } | |
| 139 | ||
| 140 | /* * | |
| 141 | * @see gov. va.med.fw. scheduling .Schedulin gService#s etIsCluste red(boolea n) | |
| 142 | * / | |
| 143 | pu blic void setIsClust ered(boole an flag) { | |
| 144 | this .isCluster ed = flag; | |
| 145 | } | |
| 146 | ||
| 147 | /* * | |
| 148 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etSchedule r() | |
| 149 | * / | |
| 150 | pu blic Sched uler getSc heduler() { | |
| 151 | retu rn schedul er; | |
| 152 | } | |
| 153 | ||
| 154 | /* * | |
| 155 | * @see gov. va.med.fw. scheduling .Schedulin gService#s etSchedule r(org.quar tz.Schedul er) | |
| 156 | * / | |
| 157 | pu blic void setSchedul er(Schedul er schedul er) { | |
| 158 | this .scheduler = schedul er; | |
| 159 | } | |
| 160 | ||
| 161 | /* * | |
| 162 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etFutureTr iggerKey() | |
| 163 | * / | |
| 164 | pu blic Strin g getFutur eTriggerKe y() { | |
| 165 | retu rn futureT riggerKey; | |
| 166 | } | |
| 167 | ||
| 168 | /* * | |
| 169 | * @see gov. va.med.fw. scheduling .Schedulin gService#s etFutureTr iggerKey(j ava.lang.S tring) | |
| 170 | * / | |
| 171 | pu blic void setFutureT riggerKey( String fut ureTrigger Key) { | |
| 172 | this .futureTri ggerKey = futureTrig gerKey; | |
| 173 | } | |
| 174 | ||
| 175 | /* * | |
| 176 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etImmediat eTriggerKe y() | |
| 177 | * / | |
| 178 | pu blic Strin g getImmed iateTrigge rKey() { | |
| 179 | retu rn immedia teTriggerK ey; | |
| 180 | } | |
| 181 | ||
| 182 | /* * | |
| 183 | * @see gov. va.med.fw. scheduling .Schedulin gService#s etImmediat eTriggerKe y(java.lan g.String) | |
| 184 | * / | |
| 185 | pu blic void setImmedia teTriggerK ey(String immediateT riggerKey) { | |
| 186 | this .immediate TriggerKey = immedia teTriggerK ey; | |
| 187 | } | |
| 188 | ||
| 189 | /* * | |
| 190 | * @see gov. va.med.fw. scheduling .Schedulin gService#s chedule(or g.quartz.T rigger) | |
| 191 | * / | |
| 192 | pu blic Date schedule(T rigger tri gger) thro ws Schedul erExceptio n { | |
| 193 | retu rn schedul eJob(trigg er); | |
| 194 | } | |
| 195 | ||
| 196 | pr ivate Date scheduleJ ob(Trigger trigger) throws Sch edulerExce ption { | |
| 197 | retu rn schedul eJob(null, trigger); | |
| 198 | } | |
| 199 | ||
| 200 | /* * | |
| 201 | * @see gov. va.med.fw. scheduling .Schedulin gService#s chedule(or g.quartz.J obDetail, | |
| 202 | * org. quartz.Tri gger) | |
| 203 | * / | |
| 204 | pu blic Date schedule(J obDetail j obDetail, Trigger tr igger) thr ows Schedu lerExcepti on { | |
| 205 | retu rn schedul eJob(jobDe tail, trig ger); | |
| 206 | } | |
| 207 | ||
| 208 | /* * | |
| 209 | * @param jo b | |
| 210 | * the job | |
| 211 | * @param tr igger | |
| 212 | * the trig ger | |
| 213 | * @return t he date sc heduled | |
| 214 | * @throws S chedulerEx ception | |
| 215 | * if a pr oblem was encountere d | |
| 216 | * / | |
| 217 | pr ivate Date scheduleJ ob(JobDeta il job, Tr igger prev iousTrigge r) throws SchedulerE xception { | |
| 218 | ||
| 219 | // C reate new trigger to ensure un ique name | |
| 220 | ||
| 221 | fina l TriggerK ey key = n ew Trigger Key(previo usTrigger. getKey().g etName() + System.na noTime(), previousTr igger.getK ey().getNa me()); | |
| 222 | ||
| 223 | Trig ger trigge r = Trigge rBuilder | |
| 224 | .newTrig ger() | |
| 225 | .forJob( new JobKey (key.getNa me(), key. getGroup() )) | |
| 226 | .forJob( job) | |
| 227 | .build() ; | |
| 228 | ||
| 229 | if ( job != nul l) { | |
| 230 | return getSchedu ler().sche duleJob(jo b, trigger ); | |
| 231 | } el se { | |
| 232 | return getSchedu ler().sche duleJob(tr igger); | |
| 233 | } | |
| 234 | ||
| 235 | } | |
| 236 | ||
| 237 | ||
| 238 | /* * | |
| 239 | * @see gov. va.med.fw. scheduling .Schedulin gService#s chedule(or g.quartz.J obDetail, | |
| 240 | * java .util.List , double, java.lang. String, ja va.lang.St ring) | |
| 241 | * / | |
| 242 | pu blic Date schedule(J obDetail j obDetail, List conte xtDataForT hisTrigger , | |
| 243 | double numberOfH oursDelaye d, String triggerNam e, String triggerGro up) | |
| 244 | throws Scheduler Exception { | |
| 245 | ||
| 246 | long millis = ((long) Ma th.round(n umberOfHou rsDelayed * 60)) * 6 0 * 1000; | |
| 247 | ||
| 248 | fina l Date dat e = new Da te(System. currentTim eMillis() + millis); | |
| 249 | ||
| 250 | Trig ger trigge r = Trigge rBuilder | |
| 251 | .new Trigger() | |
| 252 | .for Job(jobDet ail) | |
| 253 | .sta rtAt(date) | |
| 254 | .bui ld(); | |
| 255 | ||
| 256 | if ( contextDat aForThisTr igger != n ull && !co ntextDataF orThisTrig ger.isEmpt y()) { | |
| 257 | trigge r.getJobDa taMap().pu t(Schedule dProcessIn vocationCo ntext.INVO CATION_ARG UMENTS, | |
| 258 | contextDat aForThisTr igger.toAr ray()); | |
| 259 | } el se { | |
| 260 | // to be safe... | |
| 261 | trigge r.getJobDa taMap().re move(Sched uledProces sInvocatio nContext.I NVOCATION_ ARGUMENTS) ; | |
| 262 | } | |
| 263 | ||
| 264 | retu rn date; | |
| 265 | } | |
| 266 | ||
| 267 | ||
| 268 | ||
| 269 | /* * | |
| 270 | * @see gov. va.med.fw. scheduling .Schedulin gService#t riggerImme diately(go v.va.med.f w.scheduli ng.Schedul edProcessI nvocationC ontext) | |
| 271 | * / | |
| 272 | pu blic void fireJobWit hImmediate Trigger(Sc heduledPro cessInvoca tionContex t invocati onContext) | |
| 273 | throws Scheduler Exception { | |
| 274 | ||
| 275 | if ( logger.isI nfoEnabled ()) { | |
| 276 | logger .info("Sch eduling jo b[" + invo cationCont ext.getJob Name() + " ]" + " in group [" | |
| 277 | + invocati onContext. getJobGrou p() + "] f or immedia te executi on"); | |
| 278 | } | |
| 279 | /* | |
| 280 | * t his is not as flexib le since i t requires the job t o be known and | |
| 281 | * r egistered with sched uler | |
| 282 | * s cheduler.t riggerJob( invocation Context.ge tJobName() , | |
| 283 | * i nvocationC ontext.get JobGroup() ); | |
| 284 | */ | |
| 285 | sche dule(getSi mpleTrigge r(immediat eTriggerKe y, invocat ionContext )); | |
| 286 | } | |
| 287 | ||
| 288 | /* * | |
| 289 | * @see gov. va.med.fw. scheduling .Schedulin gService#t riggerImme diately(or g.quartz.J obDetail) | |
| 290 | * / | |
| 291 | pu blic void fireJobWit hImmediate Trigger(Jo bDetail jo b) throws SchedulerE xception { | |
| 292 | ||
| 293 | Vali date.notNu ll(job, "A job must not be nul l"); | |
| 294 | if ( logger.isI nfoEnabled ()) { | |
| 295 | logger .info("Sch eduling jo b[" + job. getKey().g etName() + "]" + " i n group [" + job.get Key().getG roup() | |
| 296 | + "] for i mmediate e xecution") ; | |
| 297 | } | |
| 298 | this .schedule( this.getSi mpleTrigge r(this.imm ediateTrig gerKey, jo b, null, n ull, true) ); | |
| 299 | } | |
| 300 | ||
| 301 | /* * | |
| 302 | * @see gov. va.med.fw. scheduling .Schedulin gService#t riggerImme diately(go v.va.med.f w.service. trigger.Tr iggerEvent ) | |
| 303 | * / | |
| 304 | pu blic void fireJobWit hImmediate Trigger(Tr iggerEvent event) th rows Sched ulerExcept ion { | |
| 305 | fire JobWithImm ediateTrig ger((Sched uledProces sInvocatio nContext) event.getP ayload()); | |
| 306 | } | |
| 307 | ||
| 308 | /* * | |
| 309 | * @see gov. va.med.fw. scheduling .Schedulin gService#u nschedule( java.lang. String, | |
| 310 | * java .lang.Stri ng) | |
| 311 | * / | |
| 312 | pu blic boole an unsched ule(String triggerNa me, String groupName ) throws S chedulerEx ception { | |
| 313 | Trig ger trigge r = getTri gger(trigg erName, gr oupName); | |
| 314 | retu rn ((trigg er != null ) && (this .getSchedu ler().unsc heduleJob( new Trigge rKey(trigg erName, gr oupName))) ); | |
| 315 | } | |
| 316 | ||
| 317 | /* * | |
| 318 | * @see gov. va.med.fw. scheduling .Schedulin gService#r eschedule( java.lang. String, | |
| 319 | * java .lang.Stri ng, org.qu artz.Trigg er) | |
| 320 | * / | |
| 321 | pu blic Date reschedule (String tr iggerName, String gr oupName, T rigger new Trigger) | |
| 322 | throws Scheduler Exception { | |
| 323 | retu rn this.ge tScheduler ().resched uleJob(new TriggerKe y(triggerN ame, group Name), new Trigger); | |
| 324 | } | |
| 325 | ||
| 326 | /* * | |
| 327 | * @see gov. va.med.fw. scheduling .Schedulin gService#i nterrupt(j ava.lang.S tring, | |
| 328 | * java .lang.Stri ng) | |
| 329 | * / | |
| 330 | pu blic boole an interru pt(String jobName, S tring grou pName) thr ows Schedu lerExcepti on { | |
| 331 | Vali date.notNu ll(jobName , "JobName must not be null.") ; | |
| 332 | if ( logger.isI nfoEnabled ()) { | |
| 333 | ||
| 334 | //Fix Fortify I ssues | |
| 335 | ESAPIV alidator.v alidateStr ingInput(j obName, ES APIValidat ionType.Sc heduledJob _Whitelist ); | |
| 336 | ESAPIV alidator.v alidateStr ingInput(g roupName, ESAPIValid ationType. ScheduledJ ob_Whiteli st); | |
| 337 | ||
| 338 | logger .info("Int errupting a job[" + jobName + "]" + " in group [" + groupNam e + "] .") ; | |
| 339 | } | |
| 340 | retu rn schedul er.interru pt(new Job Key(jobNam e, groupNa me)); | |
| 341 | } | |
| 342 | ||
| 343 | /* * | |
| 344 | * @see gov. va.med.fw. scheduling .Schedulin gService#i nterrupt(o rg.quartz. JobDetail) | |
| 345 | * / | |
| 346 | pu blic boole an interru pt(JobDeta il jobDeta il) throws Scheduler Exception { | |
| 347 | Vali date.notNu ll(jobDeta il, "JobDe tail must not be nul l."); | |
| 348 | retu rn interru pt(jobDeta il.getKey( ).getName( ), jobDeta il.getKey( ).getGroup ()); | |
| 349 | } | |
| 350 | ||
| 351 | /* * | |
| 352 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etJobGroup Names() | |
| 353 | * / | |
| 354 | pu blic Strin g[] getJob GroupNames () throws SchedulerE xception { | |
| 355 | retu rn schedul er.getJobG roupNames( ).toArray( new String [0]); | |
| 356 | } | |
| 357 | ||
| 358 | /* * | |
| 359 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etJobNames (java.lang .String) | |
| 360 | * / | |
| 361 | pu blic Strin g[] getJob Names(Stri ng groupNa me) throws Scheduler Exception { | |
| 362 | ||
| 363 | fina l Set<JobK ey> jobKey s = schedu ler.getJob Keys(Group Matcher.gr oupEquals( groupName) ); | |
| 364 | ||
| 365 | fina l List<Str ing> names = new Arr ayList<Str ing>(); | |
| 366 | name s.forEach( name -> { | |
| 367 | names. add(name); | |
| 368 | }); | |
| 369 | ||
| 370 | retu rn names.t oArray(new String[0] ); | |
| 371 | } | |
| 372 | ||
| 373 | /* * | |
| 374 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etTriggerG roupNames( ) | |
| 375 | * / | |
| 376 | pu blic Strin g[] getTri ggerGroupN ames() thr ows Schedu lerExcepti on { | |
| 377 | retu rn schedul er.getTrig gerGroupNa mes().toAr ray(new St ring[0]); | |
| 378 | } | |
| 379 | ||
| 380 | /* * | |
| 381 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etTriggerN ames(java. lang.Strin g) | |
| 382 | * / | |
| 383 | pu blic Strin g[] getTri ggerNames( String gro upName) th rows Sched ulerExcept ion { | |
| 384 | ||
| 385 | fina l Set<Trig gerKey> ke ys = sched uler.getTr iggerKeys( GroupMatch er.groupEq uals(group Name)); | |
| 386 | ||
| 387 | fina l List<Str ing> names = new Arr ayList<Str ing>(); | |
| 388 | ||
| 389 | keys .forEach(k ey -> { | |
| 390 | names. add(key.ge tName()); | |
| 391 | }); | |
| 392 | ||
| 393 | retu rn names.t oArray(new String[0] ); | |
| 394 | } | |
| 395 | ||
| 396 | /* * | |
| 397 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etJobDetai l(java.lan g.String, | |
| 398 | * java .lang.Stri ng) | |
| 399 | * / | |
| 400 | pu blic JobDe tail getJo bDetail(St ring jobNa me, String jobGroup) throws Sc hedulerExc eption { | |
| 401 | retu rn schedul er.getJobD etail(new JobKey(job Name, jobG roup)); | |
| 402 | } | |
| 403 | ||
| 404 | /* * | |
| 405 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etTrigger( java.lang. String, | |
| 406 | * java .lang.Stri ng) | |
| 407 | * / | |
| 408 | pu blic Trigg er getTrig ger(String triggerNa me, String triggerGr oup) throw s Schedule rException { | |
| 409 | retu rn schedul er.getTrig ger(new Tr iggerKey(t riggerName , triggerG roup)); | |
| 410 | } | |
| 411 | ||
| 412 | /* * | |
| 413 | * @see gov. va.med.fw. scheduling .Schedulin gService#g etTriggerS tatus(java .lang.Stri ng, | |
| 414 | * java .lang.Stri ng) | |
| 415 | * / | |
| 416 | pu blic Trigg erStatus g etTriggerS tatus(Stri ng trigger Name, Stri ng trigger Group) | |
| 417 | throws Scheduler Exception { | |
| 418 | Trig ger trigge r = getTri gger(trigg erName, tr iggerGroup ); | |
| 419 | Trig gerStatus status = n ew Trigger Status(); | |
| 420 | if ( trigger != null) { | |
| 421 | status .setNextFi reTime(tri gger.getFi reTimeAfte r(new Date ())); | |
| 422 | // Tim ezone is s upported o nly in the cron trig ger | |
| 423 | if (tr igger inst anceof Cro nTrigger) { | |
| 424 | CronTrig ger cronTr igger = (C ronTrigger ) trigger; | |
| 425 | status.s etTimeZone (cronTrigg er.getTime Zone()); | |
| 426 | } | |
| 427 | ||
| 428 | ||
| 429 | final TriggerSta te state = scheduler .getTrigge rState(new TriggerKe y(triggerN ame, trigg erGroup)); | |
| 430 | ||
| 431 | if (st ate == Tri ggerState. NORMAL) | |
| 432 | status.s etStatus(T riggerStat us.NORMAL_ STATUS); | |
| 433 | else i f (state = = TriggerS tate.ERROR ) | |
| 434 | status.s etStatus(" ERROR"); | |
| 435 | else i f (state = = TriggerS tate.COMPL ETE) | |
| 436 | status.s etStatus(" COMPLETE") ; | |
| 437 | else i f (state = = TriggerS tate.PAUSE D) | |
| 438 | status.s etStatus(T riggerStat us.PAUSED_ STATUS); | |
| 439 | else i f (state = = TriggerS tate.BLOCK ED) | |
| 440 | status.s etStatus(" BLOCKED"); | |
| 441 | else | |
| 442 | status.s etStatus(S tringUtils .EMPTY + s tate); | |
| 443 | } | |
| 444 | retu rn status; | |
| 445 | } | |
| 446 | ||
| 447 | pu blic Objec t getCompo nent(Strin g name, Cl ass<?> typ e) throws ServiceExc eption { | |
| 448 | ||
| 449 | Obje ct compone nt = null; | |
| 450 | try { | |
| 451 | Applic ationConte xt context = getAppl icationCon text(); | |
| 452 | compon ent = cont ext.getBea n(name, ty pe); | |
| 453 | } ca tch (Beans Exception e) { | |
| 454 | // Fai led to get a compone nt | |
| 455 | throw new Servic eException ("Failed t o get a co mponent by name " + name + " a nd type " | |
| 456 | + type, e) ; | |
| 457 | } | |
| 458 | retu rn compone nt; | |
| 459 | } | |
| 460 | ||
| 461 | ||
| 462 | /* * | |
| 463 | * Returns a simple tr igger defi ned in a s pring cont ext by the specific key. | |
| 464 | * A trigger is initia lized with a job nam e, a group name, and a job def ined | |
| 465 | * in a spri ng appplic ation cont ext by a j ob name | |
| 466 | * | |
| 467 | * @param tr iggerKey | |
| 468 | * A key to look up f or a trigg er in an a pplication context | |
| 469 | * @param co ntext | |
| 470 | * the sche duled proc ess invoca tion conte xt | |
| 471 | * @return t he simple trigger | |
| 472 | * @throws S chedulerEx ception | |
| 473 | * if a pr oblem was encountere d | |
| 474 | * / | |
| 475 | pr ivate Trig ger getSim pleTrigger (String tr iggerKey, | |
| 476 | Schedu ledProcess Invocation Context co ntext) thr ows Schedu lerExcepti on { | |
| 477 | try { | |
| 478 | Object component = getComp onent(cont ext.getJob DetailBean Name(), Jo bDetail.cl ass); | |
| 479 | JobDet ail job = component instanceof JobDetail ? (JobDet ail) compo nent : nul l; | |
| 480 | ||
| 481 | if(job != null) | |
| 482 | { | |
| 483 | Trigger trigger = getSimpleT rigger(tri ggerKey, j ob, null, null, true ); | |
| 484 | ||
| 485 | // set d ynamic stu ff on Trig ger (not J ob)...this allows to reuse | |
| 486 | // same | |
| 487 | // "core " Job for static and dynamic u se | |
| 488 | if (cont ext.getInv ocationArg uments() ! = null) { | |
| 489 | trigger.ge tJobDataMa p().put(Sc heduledPro cessInvoca tionContex t.INVOCATI ON_ARGUMEN TS, | |
| 490 | cont ext.getInv ocationArg uments()); | |
| 491 | } else { | |
| 492 | // to be s afe... | |
| 493 | trigger.ge tJobDataMa p().remove ( | |
| 494 | Sche duledProce ssInvocati onContext. INVOCATION _ARGUMENTS ); | |
| 495 | } | |
| 496 | ||
| 497 | // Sched uledProces sInvocatio nContext.E XECUTION_C ONTEXT sho uld always | |
| 498 | // be th ere | |
| 499 | trigger. getJobData Map().put( ScheduledP rocessInvo cationCont ext.EXECUT ION_CONTEX T, | |
| 500 | co ntext.getE xecutionCo ntext()); | |
| 501 | ||
| 502 | return t rigger; | |
| 503 | } | |
| 504 | else { | |
| 505 | throw ne w Schedule rException ("Unable t o trigger task immed iately job detail is null"); | |
| 506 | } | |
| 507 | } ca tch (Throw able t) { | |
| 508 | Invali dConfigura tionExcept ion e = ne w InvalidC onfigurati onExceptio n( | |
| 509 | "Unable to get a Sim pleTrigger for job", t); | |
| 510 | throw new Schedu lerExcepti on("Unable to trigge r task imm ediately", e); | |
| 511 | } | |
| 512 | } | |
| 513 | ||
| 514 | /* * | |
| 515 | * Returns a simple tr igger defi ned in a s pring cont ext by the specific key. | |
| 516 | * A trigger is initia lized with a job nam e, a group name, and the speci fic | |
| 517 | * job | |
| 518 | * | |
| 519 | * @param tr iggerKey | |
| 520 | * the trig ger key | |
| 521 | * @param jo b | |
| 522 | * the job detail inf ormation | |
| 523 | * @param tr iggerName | |
| 524 | * the trig ger name | |
| 525 | * @param tr iggerGroup | |
| 526 | * the grou p name | |
| 527 | * @return t he simple trigger | |
| 528 | * @throws S chedulerEx ception | |
| 529 | * if a pr oblem was encountere d | |
| 530 | * / | |
| 531 | pr ivate Trig ger getSim pleTrigger (String tr iggerKey, JobDetail job, Strin g triggerN ame, | |
| 532 | String triggerGr oup, boole an addJob) throws Sc hedulerExc eption { | |
| 533 | try { | |
| 534 | ||
| 535 | JobKey key = new JobKey(tr iggerName + "-" + Sy stem.curre ntTimeMill is(), trig gerGroup); | |
| 536 | ||
| 537 | Trigge r trigger = TriggerB uilder | |
| 538 | .newTrigge r() | |
| 539 | .forJob(ke y) | |
| 540 | .forJob(jo b) | |
| 541 | .build(); | |
| 542 | ||
| 543 | // for those job s that are not alrea dy registe red with S cheduler, do | |
| 544 | // thi s | |
| 545 | if (ad dJob) | |
| 546 | schedule r.addJob(j ob, true); | |
| 547 | ||
| 548 | return trigger; | |
| 549 | ||
| 550 | } ca tch (Excep tion e) { | |
| 551 | Invali dConfigura tionExcept ion e2 = n ew Invalid Configurat ionExcepti on( | |
| 552 | "Unable to get a Sim pleTrigger for job", e); | |
| 553 | throw new Schedu lerExcepti on("Unable to trigge r task imm ediately", e2); | |
| 554 | } | |
| 555 | } | |
| 556 | ||
| 557 | /* * | |
| 558 | * @see gov. va.med.fw. scheduling .Schedulin gService#p auseJob(ja va.lang.St ring, | |
| 559 | * java .lang.Stri ng) | |
| 560 | * / | |
| 561 | pu blic void pauseJob(S tring jobN ame, Strin g jobGroup ) throws S chedulerEx ception { | |
| 562 | sche duler.paus eJob(new J obKey(jobN ame, jobGr oup)); | |
| 563 | } | |
| 564 | ||
| 565 | /* * | |
| 566 | * @see gov. va.med.fw. scheduling .Schedulin gService#p auseAllJob s() | |
| 567 | * / | |
| 568 | pu blic void pauseAllJo bs() throw s Schedule rException { | |
| 569 | sche duler.paus eAll(); | |
| 570 | } | |
| 571 | ||
| 572 | /* * | |
| 573 | * @see gov. va.med.fw. scheduling .Schedulin gService#r esumeJob(j ava.lang.S tring, | |
| 574 | * java .lang.Stri ng) | |
| 575 | * / | |
| 576 | pu blic void resumeJob( String job Name, Stri ng jobGrou p) throws SchedulerE xception { | |
| 577 | sche duler.resu meJob(new JobKey(job Name, jobG roup)); | |
| 578 | } | |
| 579 | ||
| 580 | /* * | |
| 581 | * @see gov. va.med.fw. scheduling .Schedulin gService#r esumeAllJo bs() | |
| 582 | * / | |
| 583 | pu blic void resumeAllJ obs() thro ws Schedul erExceptio n { | |
| 584 | sche duler.resu meAll(); | |
| 585 | } | |
| 586 | ||
| 587 | pu blic void pauseTrigg erGroup(St ring trigg erGroup) t hrows Sche dulerExcep tion { | |
| 588 | sche duler.paus eTriggers( GroupMatch er.groupEq uals(trigg erGroup)); | |
| 589 | } | |
| 590 | ||
| 591 | pu blic void resumeTrig gerGroup(S tring trig gerGroup) throws Sch edulerExce ption { | |
| 592 | sche duler.resu meTriggers (GroupMatc her.groupE quals(trig gerGroup)) ; | |
| 593 | } | |
| 594 | } |
Araxis Merge (but not the data content of this report) is Copyright © 1993-2016 Araxis Ltd (www.araxis.com). All rights reserved.