package edu.harvard.i2b2.crc.quartz; import javax.annotation.Resource; import javax.naming.InitialContext; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import edu.harvard.i2b2.common.exception.I2B2DAOException; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.exception.StackTraceUtil; import edu.harvard.i2b2.crc.dao.DAOFactoryHelper; import edu.harvard.i2b2.crc.dao.SetFinderDAOFactory; import edu.harvard.i2b2.crc.datavo.db.StatusEnum; import edu.harvard.i2b2.crc.ejb.analysis.QueryInstance; public class FirstJob implements Job { // Connection connection = null; // @Resource(mappedName = "ConnectionFactory") // private ConnectionFactory connectionFactory; // @Resource(mappedName = "jms/edu.harvard.i2b2.crc.loader.loadresponse") // private static Queue responseQueue; public FirstJob() { } public void executeNonQuartzJob(JobDataMap jobDataMap) throws JobExecutionException { executeHelper(jobDataMap); } public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); executeHelper(jobDataMap); } private void executeHelper(JobDataMap jobDataMap) throws JobExecutionException { String domainId = jobDataMap.getString(JobParamName.DOMAIN_ID); String projectId = jobDataMap.getString(JobParamName.PROJECT_ID); String userId = jobDataMap.getString(JobParamName.USER_ID); Long timeout = jobDataMap.getLong(JobParamName.TIMEOUT); String instanceId = jobDataMap.getString(JobParamName.INSTANCE_ID); // pass this jobDataMap to handler AnalysisJobStarter jobStarter = null; boolean errorFlag = false; Throwable e = null; try { jobStarter = new AnalysisJobStarter(domainId, projectId, userId); jobStarter.start(instanceId, timeout); } catch (I2B2DAOException daoEx) { errorFlag = true; e = daoEx; } catch (I2B2Exception i2b2Ex) { errorFlag = true; e = i2b2Ex; // no need to write to query instance } finally { if (errorFlag) { DAOFactoryHelper factoryHelper; try { factoryHelper = new DAOFactoryHelper(domainId, projectId, userId); SetFinderDAOFactory setfinderDaoFactory = factoryHelper .getDAOFactory().getSetFinderDAOFactory(); // update instance with error status QueryInstance qi = new QueryInstance(setfinderDaoFactory); String stacktrace = StackTraceUtil.getStackTrace(e); if (stacktrace != null) { if (stacktrace.length() > 2000) { stacktrace = stacktrace.substring(0, 1998); } else { stacktrace = stacktrace.substring(0, stacktrace.length()); } } // update error status to the instance qi.updateInstanceStatus(instanceId, StatusEnum.ERROR .toString(), stacktrace); // update result instance qi.updateResultInstanceStatusByInstanceId(instanceId, StatusEnum.ERROR.toString(), 0, stacktrace); } catch (I2B2DAOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // throw job execution exception to the quartz layer JobExecutionException jobExecEx = new JobExecutionException(); jobExecEx.setStackTrace(e.getStackTrace()); throw jobExecEx; } try { // sent ack to jms about completion of task sendResponse(instanceId, ""); } catch (Throwable t) { t.printStackTrace(); } } } /* * @throws Throwable */ private void sendResponse(String sessionId, String publishMessage) throws Throwable { /* Session session = null; MessageProducer publisher = null; TextMessage message = null; try { InitialContext ic = new InitialContext(); connectionFactory = (ConnectionFactory) ic .lookup("ConnectionFactory"); responseQueue = (Queue) ic .lookup("jms/edu.harvard.i2b2.crc.loader.loadresponse"); connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); publisher = session.createProducer(responseQueue); message = session.createTextMessage(); message.setJMSCorrelationID(sessionId); message.setText(publishMessage); // message.setIntProperty(UPLOAD_ID, uploadId); publisher.send(message); } catch (Throwable t) { throw t; } finally { if (session != null) { try { session.close(); } catch (JMSException e) { } } if (connection != null) { try { connection.close(); } catch (JMSException e) { } } } */ } }