01 package com.technoetic.xplanner.charts; 02 03 import com.technoetic.xplanner.db.hibernate.GlobalSessionFactory; 04 import com.technoetic.xplanner.domain.Iteration; 05 import net.sf.hibernate.Hibernate; 06 import net.sf.hibernate.Session; 07 import org.apache.log4j.Logger; 08 import org.quartz.Job; 09 import org.quartz.JobExecutionContext; 10 import org.quartz.JobExecutionException; 11 12 import java.sql.SQLException; 13 import java.util.Date; 14 import java.util.List; 15 16 public class DataSamplingJob implements Job { 17 private Logger log = Logger.getLogger(getClass()); 18 19 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 20 try { 21 Session session = null; 22 try { 23 session = GlobalSessionFactory.get().openSession(); 24 List iterations = session.find("from i in " + Iteration.class + 25 " where i.endDate >= ?", new Date(), Hibernate.DATE); 26 Date now = new Date(); 27 for (int i = 0; i < iterations.size(); i++) { 28 Iteration iteration = (Iteration)iterations.get(i); 29 DataSample estimatedHoursSample = new DataSample(now, iteration.getId(), 30 "estimatedHours", iteration.getEstimatedHours()); 31 session.save(estimatedHoursSample); 32 DataSample actualHoursSample = new DataSample(now, iteration.getId(), 33 "actualHours", iteration.getActualHours()); 34 session.save(actualHoursSample); 35 DataSample remainingHoursSample = new DataSample(now, iteration.getId(), 36 "remainingHours", iteration.getRemainingHours()); 37 session.save(remainingHoursSample); 38 } 39 log.info("committing data sample changes"); 40 session.flush(); Rate41 session.connection().commit(); 42 } catch (Throwable ex) { 43 log.error("rolling back data sample changes", ex); 44 session.connection().rollback(); 45 } finally { 46 session.close(); 47 } 48 } catch (SQLException e) { 49 throw new JobExecutionException( 50 "SQL error while saving data samples, retrying...", e, true); 51 } catch (Exception e) { 52 throw new JobExecutionException( 53 "error saving data samples, not retrying", e, false); 54 } 55 } 56 }