addTextElementToParentElement(jobDefinition, "name", j.getApplicationName()); addTextElementToParentElement(jobDefinition, "queue", j.getQueue(cnx).getName()); addTextElementToParentElement(jobDefinition, "description", j.getDescription() == null ? "" : j.getDescription()); addTextElementToParentElement(jobDefinition, "canBeRestarted", j.isCanBeRestarted() ? "true" : "false"); addTextElementToParentElement(jobDefinition, "javaClassName", j.getJavaClassName()); addTextElementToParentElement(jobDefinition, "application", j.getApplication()); addTextElementToParentElement(jobDefinition, "module", j.getModule()); addTextElementToParentElement(jobDefinition, "keyword1", j.getKeyword1()); addTextElementToParentElement(jobDefinition, "keyword2", j.getKeyword2()); addTextElementToParentElement(jobDefinition, "keyword3", j.getKeyword3()); if (j.getMaxTimeRunning() != null) addTextElementToParentElement(jobDefinition, "reasonableRuntimeLimitMinute", j.getMaxTimeRunning() + ""); addTextElementToParentElement(jobDefinition, "highlander", j.isHighlander() ? "true" : "false"); if (j.getClassLoader(cnx) != null) addTextElementToParentElement(jobDefinition, "executionContext", j.getClassLoader().getName()); List<JobDefParameter> jobDefParameters = j.getParameters(cnx); if (jobDefParameters != null && !jobDefParameters.isEmpty())
/** * Returns true if the libraries should be loaded in cache. Two cases: never loaded and should be reloaded (jar is more recent than * cache) */ private boolean shouldLoad(Node node, JobDef jd) { if (!cache.containsKey(jd.getApplicationName())) { return true; } // If here: cache exists. JobDefLibrary libs = cache.get(jd.getApplicationName()); // Is cache stale? Date lastLoaded = libs.loadTime; File jarFile = new File(FilenameUtils.concat(new File(node.getRepo()).getAbsolutePath(), jd.getJarPath())); File jarDir = jarFile.getParentFile(); File libDir = new File(FilenameUtils.concat(jarDir.getAbsolutePath(), "lib")); if (lastLoaded.before(new Date(jarFile.lastModified())) || lastLoaded.before(new Date(jarDir.lastModified())) || lastLoaded.before(new Date(libDir.lastModified()))) { jqmlogger.info("The cache for application " + jd.getApplicationName() + " will be reloaded"); return true; } // If here, the cache is OK return false; }
static JobDef findJobDef(String applicationName, DbConn cnx) { List<JobDef> jj = JobDef.select(cnx, "jd_select_by_key", applicationName); if (jj.size() == 0) { return null; } return jj.get(0); }
static List<String> getProcessArguments(JobInstance ji) { return getProcessArguments(ji.getJD().getJarPath(), ji.getPrms(), ji.getJD().getPathType()); }
dbr = JobDef.select(cnx, queryName, (Object[]) args); for (JobDef jd : dbr) ids.add(jd.getId()); tmp.setApplication(jd.getApplication()); tmp.setApplicationName(jd.getApplicationName()); tmp.setCanBeRestarted(jd.isCanBeRestarted()); tmp.setDescription(jd.getDescription()); tmp.setHighlander(jd.isHighlander()); tmp.setKeyword1(jd.getKeyword1()); tmp.setKeyword2(jd.getKeyword2()); tmp.setKeyword3(jd.getKeyword3()); tmp.setModule(jd.getModule()); tmp.setId(jd.getId()); tmp.setQueue(queues.get(jd.getQueue())); List<JobDefParameter> parameters = allParams.get(jd.getId()); if (parameters != null) if (s.getJobDefinition() == jd.getId())
try fibo = JobDef.select_key(cnx, "Fibo"); JobDef.select_key(cnx, "Geo"); JobDef.select_key(cnx, "DateTime"); JobDef.select_key(cnx, "DateTime2"); Assert.assertEquals("My Description", fibo.getDescription()); Assert.assertEquals("App", fibo.getApplication()); Assert.assertEquals("jqm-tests/jqm-test-fibo/target/test.jar", fibo.getJarPath()); Assert.assertEquals("FS", fibo.getPathType().toString()); Assert.assertEquals("VIPQueue", fibo.getQueue(cnx).getName()); Assert.assertEquals(true, fibo.isCanBeRestarted()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals("ModuleMachin", fibo.getModule()); Assert.assertEquals("other1", fibo.getKeyword1()); Assert.assertEquals("other2", fibo.getKeyword2()); Assert.assertEquals(null, fibo.getKeyword3()); Assert.assertEquals(false, fibo.isHighlander()); Assert.assertEquals("Isolation", fibo.getClassLoader(cnx).getName()); Assert.assertEquals(true, fibo.getClassLoader().isChildFirst()); Assert.assertEquals("HIDDEN", fibo.getClassLoader().getHiddenClasses());
/** * Create an History object from a {@link JobInstance}. * */ public static void create(DbConn cnx, JobInstance ji, State finalState, Calendar endDate) { JobDef jd = ji.getJD(); Node n = ji.getNode(); Queue q = ji.getQ(); if (endDate == null) { cnx.runUpdate("history_insert", ji.getId(), jd.getApplication(), jd.getApplicationName(), ji.getAttributionDate(), ji.getEmail(), ji.getCreationDate(), ji.getExecutionDate(), jd.isHighlander(), ji.getApplication(), ji.getKeyword1(), ji.getKeyword2(), ji.getKeyword3(), ji.getModule(), jd.getKeyword1(), jd.getKeyword2(), jd.getKeyword3(), jd.getModule(), n == null ? null : n.getName(), ji.getParentId(), ji.getProgress(), q == null ? null : q.getName(), 0, ji.getSessionID(), finalState.toString(), ji.getUserName(), ji.getJdId(), n == null ? null : n.getId(), ji.getQueue(), ji.isFromSchedule(), ji.getPriority()); } else { cnx.runUpdate("history_insert_with_end_date", ji.getId(), jd.getApplication(), jd.getApplicationName(), ji.getAttributionDate(), ji.getEmail(), endDate, ji.getCreationDate(), ji.getExecutionDate(), jd.isHighlander(), ji.getApplication(), ji.getKeyword1(), ji.getKeyword2(), ji.getKeyword3(), ji.getModule(), jd.getKeyword1(), jd.getKeyword2(), jd.getKeyword3(), jd.getModule(), n.getName(), ji.getParentId(), ji.getProgress(), q.getName(), 0, ji.getSessionID(), finalState.toString(), ji.getUserName(), ji.getJdId(), ji.getNode().getId(), ji.getQueue(), ji.isFromSchedule(), ji.getPriority()); } }
@Test public void testXmlParser() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); XmlJobDefParser.parse("target/payloads/jqm-test-xml/xmltest.xml", cnx); cnx.commit(); List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals(true, fibo.isCanBeRestarted()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals(TestHelpers.qVip, fibo.getQueue()); Assert.assertEquals("ApplicationTest", fibo.getApplication()); Assert.assertEquals("TestModuleRATONLAVEUR", fibo.getModule()); Assert.assertEquals(false, fibo.isHighlander()); Assert.assertEquals("1", fibo.getParametersMap(cnx).get("p1")); Assert.assertEquals("2", fibo.getParametersMap(cnx).get("p2")); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); }
env.put("JQM_JD_APPLICATION_NAME", this.ji.getJD().getApplicationName()); env.put("JQM_JD_KEYWORD_1", this.ji.getJD().getKeyword1() != null ? this.ji.getJD().getKeyword1() : ""); env.put("JQM_JD_KEYWORD_2", this.ji.getJD().getKeyword2() != null ? this.ji.getJD().getKeyword2() : ""); env.put("JQM_JD_KEYWORD_3", this.ji.getJD().getKeyword3() != null ? this.ji.getJD().getKeyword3() : ""); env.put("JQM_JD_MODULE", this.ji.getJD().getModule() != null ? this.ji.getJD().getModule() : null); env.put("JQM_JD_PRIORITY", this.ji.getJD().getPriority() != null ? this.ji.getJD().getPriority().toString() : "0");
jd = JobDef.select_key(cnx, name); jd = new JobDef(); q = jd.getQueue(cnx); jd.setQueue(queueId); jd.setQueue(queueId); jd.setJarPath(jarPath); jd.setPathType(PathType.valueOf(jarElement.getElementsByTagName("pathType").getLength() > 0 ? jarElement.getElementsByTagName("pathType").item(0).getTextContent().trim() : "FS")); jd.setCanBeRestarted( "true".equals(jdElement.getElementsByTagName("canBeRestarted").item(0).getTextContent().trim()) ? true : false); jd.setJavaClassName(jdElement.getElementsByTagName("javaClassName").item(0).getTextContent().trim()); jd.setDescription(jdElement.getElementsByTagName("description").item(0).getTextContent()); jd.setApplicationName(name); jd.setModule(jdElement.getElementsByTagName("module").item(0).getTextContent()); jd.setHighlander( "true".equals(jdElement.getElementsByTagName("highlander").item(0).getTextContent().trim()) ? true : false); jd.setApplication(jdElement.getElementsByTagName("application").item(0).getTextContent()); jd.setApplication(null); jd.setKeyword1(jdElement.getElementsByTagName("other1").item(0).getTextContent());
@Test public void testUpdateJobDef() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); XmlJobDefParser.parse("target/payloads/jqm-test-xml/xmltest.xml", cnx); cnx.commit(); // Sanity check List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("vdjvkdv", fibo.getKeyword1()); Assert.assertEquals("sgfbgg", fibo.getKeyword2()); Assert.assertEquals("jvhkdfl", fibo.getKeyword3()); // Import and therefore update the job definitions. XmlJobDefParser.parse("target/payloads/jqm-test-xml/xmltest_update.xml", cnx); cnx.commit(); jd = JobDef.select(cnx, "jd_select_all"); fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("NEWVALUE", fibo.getKeyword1()); Assert.assertEquals("", fibo.getKeyword2() == null ? "" : fibo.getKeyword2()); Assert.assertEquals(null, fibo.getKeyword3()); }
private void actualRun() Thread.currentThread().setName(this.ji.getJD().getApplicationName() + ";payload;" + this.ji.getId()); + this.ji.getJD().getJarPath() + " - class is: " + this.ji.getJD().getJavaClassName() + ". Runner used is " + jr.getClass().getCanonicalName() + "."); if (!this.ji.getJD().isEnabled()) jqmlogger.warn("Runner could not prepare for job " + this.ji.getJD().getApplicationName(), e); resultStatus = State.CRASHED; endOfRun();
jobDef = JobDef.select_key(cnx, runRequest.getApplicationName()); List<JobDef> jdd = JobDef.select(cnx, "jd_select_by_id", sj.getJobDefinition()); if (jdd.size() == 0) jqmlogger.trace("Job to enqueue is from JobDef " + jobDef.getId()); Map<String, String> prms = JobDefParameter.select_map(cnx, "jdprm_select_all_for_jd", jobDef.getId()); if (sj != null) queue_id = jobDef.getQueue(); if (jobDef.getPriority() != null) priority = jobDef.getPriority(); int id = JobInstance.enqueue(cnx, startingState, queue_id, jobDef.getId(), runRequest.getApplication(), runRequest.getParentID(), runRequest.getModule(), runRequest.getKeyword1(), runRequest.getKeyword2(), runRequest.getKeyword3(), runRequest.getSessionID(), runRequest.getUser(), runRequest.getEmail(), jobDef.isHighlander(), sj != null || runRequest.getRunAfter() != null, runRequest.getRunAfter(), priority, Instruction.RUN, prms);
@Override public String applicationName() { return this.ji.getJD().getApplicationName(); }
@Test public void testImportThenReimportJobDefWithPrms() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); // First import XmlJobDefParser.parse("target/payloads/jqm-test-xml/xmltest.xml", cnx); cnx.commit(); List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); Assert.assertEquals(2, jd.size()); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("1", fibo.getParametersMap(cnx).get("p1")); // Second import - parameters are different, note 3 instead of 1 XmlJobDefParser.parse("target/payloads/jqm-test-xml/xmltest_np.xml", cnx); cnx.commit(); jd = JobDef.select(cnx, "jd_select_all"); fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertNotNull(fibo); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("3", fibo.getParametersMap(cnx).get("p1")); }
File jarFile = new File(FilenameUtils.concat(new File(ji.getNode().getRepo()).getAbsolutePath(), jd.getJarPath())); Cl cldef = jd.getClassLoader(); jobClassLoader.setReferenceJobDefName(jd.getApplicationName()); jobClassLoader.mayBeShared(cldef.isPersistent()); jobClassLoader.setHiddenJavaClasses(cldef.getHiddenClasses()); jobClassLoader.setReferenceJobDefName(jd.getApplicationName()); jobClassLoader.mayBeShared(cldef.isPersistent()); jobClassLoader.setHiddenJavaClasses(cldef.getHiddenClasses()); if (sharedJarClassLoader.containsKey(jd.getJarPath())) jobClassLoader = sharedJarClassLoader.get(jd.getJarPath()); jobClassLoader = new PayloadClassLoader(parent); jobClassLoader.mayBeShared(true); sharedJarClassLoader.put(jd.getJarPath(), jobClassLoader);
private static Element getQueueElement(Queue q, DbConn cnx) { Element queue = new Element("queue"); Element name = new Element("name"); name.setText(q.getName()); Element description = new Element("description"); description.setText(q.getDescription()); Element timeToLive = new Element("timeToLive"); timeToLive.setText(q.getTimeToLive() + ""); queue.addContent(name); queue.addContent(description); queue.addContent(timeToLive); Element jobs = new Element("jobs"); queue.addContent(jobs); List<JobDef> jds = JobDef.select(cnx, "jd_select_by_queue", q.getId()); for (JobDef j : jds) { Element job = new Element("applicationName"); job.setText(j.getApplicationName()); jobs.addContent(job); } return queue; }
if (currentJarPath == null || !j.getJarPath().equals(currentJarPath)) currentJarPath = j.getJarPath(); Element jar = new Element("jar"); addTextElementToParentElement(jar, "path", currentJarPath); addTextElementToParentElement(jar, "pathType", j.getPathType().toString()); jobDefinitions = new Element("jobdefinitions"); jar.addContent(jobDefinitions); jobDefinitions.addContent(jobDefinition); if (j.getClassLoader(cnx) != null) cls.add(j.getClassLoader());
@Override public Integer enqueue(String applicationName, String user, String mail, String sessionId, String application, String module, String keyword1, String keyword2, String keyword3, Map<String, String> parameters) { JobRequest jr = new JobRequest(applicationName, user, mail); jr.setApplicationName(applicationName); jr.setUser(user == null ? ji.getUserName() : user); jr.setEmail(mail); jr.setSessionID(sessionId == null ? this.ji.getSessionID() : sessionId); jr.setApplication(application == null ? this.ji.getJD().getApplication() : application); jr.setModule(module == null ? this.ji.getJD().getModule() : module); jr.setKeyword1(keyword1); jr.setKeyword2(keyword2); jr.setKeyword3(keyword3); jr.setParentID(this.ji.getId()); if (parameters != null) { jr.setParameters(parameters); } return getJqmClient().enqueue(jr); }
public void update(DbConn cnx, Map<String, String> parameters) { if (id == null) { this.id = JobDef.create(cnx, description, javaClassName, parameters, jarPath, queue_id, maxTimeRunning, applicationName, application, module, keyword1, keyword2, keyword3, highlander, classLoader, pathType); } else { cnx.runUpdate("jd_update_all_fields_by_id", application, applicationName, description, enabled, external, highlander, jarPath, javaClassName, javaOpts, keyword1, keyword2, keyword3, maxTimeRunning, module, pathType, classLoader, queue_id, id); cnx.runUpdate("jdprm_delete_all_for_jd", this.id); for (Map.Entry<String, String> prm : parameters.entrySet()) { cnx.runUpdate("jdprm_insert", prm.getKey(), prm.getValue(), this.id); } } }