Hi,
I'm using jdbcjobstore and have 3 triggers, executing 3 different jobs on the same table. It runs for about a minute and then all 3 triggers changes to error state?
schedulerContext.xml
FaultManager.javaCode:<bean id="newFaultsTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <!-- Start 10 seconds after app startup --> <property name="startDelay" value="10000" /> <!-- repeat every 3 seconds --> <property name="repeatInterval" value="3000" /> <property name="jobDetail"> <bean class="za.co.telkom.portal.base.assurance.services.BeanInvokingJobDetailFactoryBean" name="ProcessNewFaults"> <property name="concurrent" value="false"/> <property name="targetBean" value="faultManager" /> <property name="targetMethod" value="processNewFaults" /> </bean> </property> </bean> <bean id="postTicketsTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <!-- Start 10 seconds after app startup --> <property name="startDelay" value="10000" /> <!-- repeat every 60 seconds --> <property name="repeatInterval" value="60000" /> <property name="jobDetail"> <bean class="za.co.telkom.portal.base.assurance.services.BeanInvokingJobDetailFactoryBean" name="PostTickets"> <property name="concurrent" value="false"/> <property name="targetBean" value="faultManager" /> <property name="targetMethod" value="postTickets" /> </bean> </property> </bean> <bean id="expireFaultsTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <!-- Start 10 seconds after app startup --> <property name="startDelay" value="10000" /> <!-- repeat every 60 seconds --> <property name="repeatInterval" value="60000" /> <property name="jobDetail"> <bean class="za.co.telkom.portal.base.assurance.services.BeanInvokingJobDetailFactoryBean" name="ExpireFaults"> <property name="concurrent" value="false"/> <property name="targetBean" value="faultManager" /> <property name="targetMethod" value="expireFaults" /> </bean> </property> </bean> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="newFaultsTrigger" /> <ref bean="postTicketsTrigger" /> <ref bean="expireFaultsTrigger" /> </list> </property> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="quartzProperties"> <props> <prop key="org.quartz.scheduler.instanceName">ProcessFaultsScheduler</prop> <prop key="org.quartz.scheduler.instanceId">AUTO</prop> <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop> <prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop> <prop key="org.quartz.jobStore.isClustered">true</prop> <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> <prop key="org.quartz.threadPool.threadCount">25</prop> <prop key="org.quartz.threadPool.threadPriority">5</prop> </props> </property> </bean> </beans>
Code:public void processNewFaults() throws PortalException { PotentialFault fault = new PotentialFault(); try { for (Iterator faults = faultDao.getFaults(Constants.NEW).iterator(); faults.hasNext();) { fault = (PotentialFault) faults.next(); fault.setStatus(Constants.BUSY); faultDao.store(fault); /* 1. Validate input fields */ if (validateInputFields(fault) == false){ faultDao.store(fault); continue; // process next record } /* 2. Validate Feasibility against CBS*/ if (verifyCbsFeasibility(fault) == false){ faultDao.store(fault); continue; // process next record } /* 3. Validate Feasibility against CPH */ if (verifyCphFeasibility(fault) == false){ faultDao.store(fault); continue; // process next record } faultDao.store(fault); } } catch (Exception e){ fault.setStatus(Constants.ERROR); fault.setFeasibilityResult(messageSource.getMessage("serviceProcessError",null,null)); faultDao.store(fault); this.recordTransaction("Process potential fault", "", fault, e.toString(), TransactionRecorder.ERROR_FLAG); } } public void postTickets() throws PortalException { PotentialFault fault = new PotentialFault(); for (Iterator faults = faultDao.getFaults(Constants.SYMPTOM).iterator(); faults.hasNext();) { fault = (PotentialFault) faults.next(); /* 1. Validate input fields */ if (validateInputFields(fault) == false){ faultDao.store(fault); continue; // process next record } /* ---------- Setup Ticket objects ----------- */ Ticket ticket = new Ticket(); try { /* Ticket */ ticket = new Ticket(); ticket.setAcceptedTerms(false); ticket.setCategory((faultDao.getSymptom(fault.getSymptom(), fault.getPartNumber()).getCategory())); ticket.setDateLogged(new Date()); ticket.setFaultDescription(fault.getSymptom()); ticket.setSymptom(fault.getSymptom()); /* TicketContact */ TicketContact contact = new TicketContact(); String businessHours = "08:00 - 17:00 AAH=N AAW=N"; contact.setBusinessHours(businessHours); contact.setCellphone(fault.getCellNumber()); ticket.setContact(contact); /* TicketService */ TicketService service = ticketManager.getTicketService(fault.getDirectoryNumber()); if (service == null){ service = new TicketService(); } service.setPartNumber(fault.getPartNumber()); service.setProductDescription(fault.getFeasibilityResult()); service.setServiceNumber(fault.getDirectoryNumber()); service.setSpecialResource(fault.getSpecialResource()); /* LineTestResult */ LineTestResult lineTestResult = new LineTestResult(); if (fault.getLineTestable().equalsIgnoreCase("Y")) { service.setLineTestable(true); ticket.setService(service); try { lineTestResult = ticketManager.createTest(fault.getDirectoryNumber()); ticket.setLineTestResult(lineTestResult); } catch (Exception e){ lineTestResult.setTestDate(new Date()); ticket.setLineTestResult(lineTestResult); // Do Nothing } }else{ lineTestResult.setTestResultCode("No Test"); lineTestResult.setTestComment("No Test requested"); ticket.setLineTestResult(lineTestResult); service.setLineTestable(false); ticket.setService(service); } ticketManager.store(ticket); fault.setStatus("Done"); faultDao.store(fault); this.recordTransaction("Post fault to assurance", "Post fault to assurance", fault, "Post fault to assurance"); } catch (Exception e){ fault.setStatus(Constants.ERROR); fault.setFeasibilityResult(messageSource.getMessage("serviceProcessError",null,null)); faultDao.store(fault); ticketManager.prepareAndSendEmail(ticket); this.recordTransaction("Post fault to assurance", "", fault, e.toString(), TransactionRecorder.ERROR_FLAG); } } } public void expireFaults() throws PortalException { PotentialFault fault = new PotentialFault(); try { for (Iterator faults = faultDao.getFaults(Constants.FEASIBLE).iterator(); faults.hasNext();) { fault = (PotentialFault) faults.next(); fault.setStatus(Constants.EXPIRE); faultDao.store(fault); } } catch (Exception e){ fault.setStatus(Constants.ERROR); fault.setFeasibilityResult(messageSource.getMessage("serviceProcessError",null,null)); faultDao.store(fault); this.recordTransaction("Expire fault", "", fault, e.toString(), TransactionRecorder.ERROR_FLAG); } }


Reply With Quote