java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java | 3
java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml | 16 ++
java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java | 16 ++
java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java | 4
java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml | 6 -
java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java | 3
java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java | 57 +++++++---
java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java | 3
schema/spacewalk/common/data/rhnTaskoBunch.sql | 4
schema/spacewalk/common/tables/rhnTaskoTemplate.sql | 2
10 files changed, 85 insertions(+), 29 deletions(-)
New commits:
commit 01deaffafe72ecff9e3bd4f6302ea1c24f0c1349
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 11 17:56:44 2010 +0200
make taskomatic working again
diff --git a/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java b/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java
index 812c500..54c4ac0 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java
@@ -21,4 +21,7 @@ package com.redhat.rhn.taskomatic;
*/
public class NoSuchBunchTaskException extends Exception {
+ public NoSuchBunchTaskException(String message) {
+ super(message);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
index 07efb14..2b8a2df 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
@@ -13,7 +13,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</generator>
</id>
- <property name="name" type="string" column="name"/>
+ <property name="name" type="string" column="name" unique="true"/>
<property name="description" type="string" column="description"/>
<property name="activeFrom" type="date" column="active_from"/>
<property name="activeTill" type="date" column="active_till"/>
@@ -33,15 +33,23 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</class>
<query name="TaskoBunch.findById">
- <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch where id = :id]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE id = :id]]>
</query>
<query name="TaskoBunch.findByName">
- <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch where name = :name]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE name = :name]]>
+ </query>
+
+ <query name="TaskoBunch.findOrgBunchByName">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is not null AND name = :name]]>
+ </query>
+
+ <query name="TaskoBunch.findSatBunchByName">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is null AND name = :name]]>
</query>
<query name="TaskoBunch.listBunches">
- <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch as b]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch as b]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index d5806b9..4f477aa 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -40,11 +40,19 @@ public class TaskoFactory extends HibernateFactory {
return log;
}
- public static TaskoBunch lookupByName(String bunchName) {
+ public static TaskoBunch lookupOrgBunchByName(String bunchName) {
Map params = new HashMap();
params.put("name", bunchName);
return (TaskoBunch) singleton.lookupObjectByNamedQuery(
- "TaskoBunch.findByName", params);
+ "TaskoBunch.findOrgBunchByName", params);
+ }
+
+ public static TaskoTemplate lookupTemplateByBunchAndOrder(Long bunchId, Long order) {
+ Map params = new HashMap();
+ params.put("bunch_id", bunchId);
+ params.put("order", order);
+ return (TaskoTemplate) singleton.lookupObjectByNamedQuery(
+ "TaskoTemplate.findByBunchAndOrder", params);
}
public static List<TaskoBunch> listBunches() {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index 4ca9921..36b650e 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -58,7 +58,6 @@ public class TaskoRun implements Job {
public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, String jobLabelIn) {
setOrgId(orgIdIn);
setTemplate(templateIn);
- TaskoFactory.save(templateIn);
setJobLabel(jobLabelIn);
File logDir = new File(getStdLogDirName(orgId));
if (!logDir.isDirectory()) {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
index c22c54d..edcaed8 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
@@ -24,7 +24,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="ordering" type="long" column="ordering"/>
<property name="startIf" type="string" column="start_if"/>
- <set name="runHistory" inverse="true" lazy="false" table="rhnTaskoRun">
+ <set name="runHistory" inverse="true" table="rhnTaskoRun">
<key column="template_id"/>
<one-to-many class="com.redhat.rhn.taskomatic.TaskoRun"/>
</set>
@@ -35,4 +35,8 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
insert="false" update="false"/>
</class>
+ <query name="TaskoTemplate.findByBunchAndOrder">
+ <![CDATA[from com.redhat.rhn.taskomatic.TaskoTemplate where bunch.id = :bunch_id and ordering = :order]]>
+ </query>
+
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java
index 1296bc4..62850b0 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java
@@ -44,7 +44,7 @@ public class TaskoTemplate {
* @param idIn The id to set.
*/
public void setId(Long idIn) {
- this.id = id;
+ this.id = idIn;
}
/**
@@ -146,5 +146,4 @@ public class TaskoTemplate {
public void setRunHistory(Set<TaskoRun> runHistoryIn) {
this.runHistory = runHistoryIn;
}
-
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 9490329..e0c9e1e 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -20,6 +20,7 @@ import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
+import org.quartz.Trigger;
import java.text.ParseException;
import java.util.Date;
@@ -47,7 +48,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
Date startTime, Date endTime, String cronExpression, Map params)
- throws ParseException, NoSuchTaskException, InvalidJobLabelException {
+ throws InvalidJobLabelException, NoSuchBunchTaskException, ParseException {
try {
JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params);
// create trigger
@@ -69,7 +70,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
String cronExpression, Map params)
- throws ParseException, NoSuchTaskException, InvalidJobLabelException {
+ throws ParseException, InvalidJobLabelException, NoSuchBunchTaskException {
return scheduleBunch(orgId, bunchName, jobLabel, null, null, cronExpression,
params);
}
@@ -87,7 +88,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params)
- throws ParseException, NoSuchTaskException, InvalidJobLabelException {
+ throws ParseException, InvalidJobLabelException, NoSuchBunchTaskException {
try {
JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params);
SimpleTrigger st = new SimpleTrigger(jobLabel, orgId.toString(), 1, 1);
@@ -103,10 +104,14 @@ public class TaskoXmlRpcHandler {
private JobDetail createJob(String bunchName, Integer orgId,
String jobLabel, Map params)
- throws SchedulerException, InvalidJobLabelException {
+ throws SchedulerException, InvalidJobLabelException, NoSuchBunchTaskException {
if (!checkUniqueName(jobLabel, orgId.toString())) {
throw new InvalidJobLabelException();
}
+ TaskoBunch bunch = TaskoFactory.lookupOrgBunchByName(bunchName);
+ if (bunch == null) {
+ throw new NoSuchBunchTaskException("bunchName");
+ }
// create job
JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(),
TaskoBunch.class);
diff --git a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
index 089d91c..4eee7dd 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
@@ -17,6 +17,7 @@ package com.redhat.rhn.taskomatic.core;
import com.redhat.rhn.common.hibernate.HibernateRuntimeException;
import com.redhat.rhn.taskomatic.TaskoBunch;
import com.redhat.rhn.taskomatic.TaskoFactory;
+import com.redhat.rhn.taskomatic.TaskoTemplate;
import org.quartz.Job;
import org.quartz.SchedulerException;
@@ -39,7 +40,7 @@ public class RhnJobFactory implements JobFactory {
String bunchName = trigger.getJobDetail().getJobDataMap().getString("bunch_name");
try {
- bunch = TaskoFactory.lookupByName(bunchName);
+ bunch = TaskoFactory.lookupOrgBunchByName(bunchName);
}
catch (HibernateRuntimeException re) {
throw new SchedulerException("No such bunch task " + bunchName);
diff --git a/schema/spacewalk/common/data/rhnTaskoBunch.sql b/schema/spacewalk/common/data/rhnTaskoBunch.sql
index d2244ce..9f83e28 100644
--- a/schema/spacewalk/common/data/rhnTaskoBunch.sql
+++ b/schema/spacewalk/common/data/rhnTaskoBunch.sql
@@ -15,9 +15,9 @@
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
- VALUES (rhn_tasko_bunch_id_seq.nextval, 'daily-status', 'daily-status description', 'N', sysdate);
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'daily-status', 'daily-status description', '', sysdate);
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
- VALUES (rhn_tasko_bunch_id_seq.nextval, 'sat-sync', 'sat-sync description', 'N', sysdate);
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'sat-sync', 'sat-sync description', 'Y', sysdate);
commit;
diff --git a/schema/spacewalk/common/tables/rhnTaskoTemplate.sql b/schema/spacewalk/common/tables/rhnTaskoTemplate.sql
index bd9b2a1..03684b0 100644
--- a/schema/spacewalk/common/tables/rhnTaskoTemplate.sql
+++ b/schema/spacewalk/common/tables/rhnTaskoTemplate.sql
@@ -25,7 +25,7 @@ CREATE TABLE rhnTaskoTemplate
CONSTRAINT rhn_tasko_template_task_fk
REFERENCES rhnTaskoTask (id),
ordering NUMBER NOT NULL,
- start_if CHAR(1),
+ start_if CHAR(10),
created DATE
DEFAULT (sysdate) NOT NULL,
modified DATE
commit 1d6c1012185b7ac03cf2253a3e925b9e2e271ebd
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 11 13:34:35 2010 +0200
create scheduleSingleBunchRun
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 5c309c6..d5806b9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -56,6 +56,10 @@ public class TaskoFactory extends HibernateFactory {
singleton.saveObject(taskoRun);
}
+ public static void save(TaskoTemplate taskoTemplate) {
+ singleton.saveObject(taskoTemplate);
+ }
+
public static void sleep(long millis) {
try {
Thread.sleep(millis);
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index 18b7667..4ca9921 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -58,6 +58,7 @@ public class TaskoRun implements Job {
public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, String jobLabelIn) {
setOrgId(orgIdIn);
setTemplate(templateIn);
+ TaskoFactory.save(templateIn);
setJobLabel(jobLabelIn);
File logDir = new File(getStdLogDirName(orgId));
if (!logDir.isDirectory()) {
@@ -83,14 +84,14 @@ public class TaskoRun implements Job {
public void finished(JobExecutionContext context) {
setEndTime(new Date());
String out = (String) context.getJobDetail().getJobDataMap().get("stdOutput");
- if ((out != null) && (out != "")) {
+ if ((out != null) && (!out.isEmpty())) {
saveLogToFile(getStdOutputPath(), out);
}
else {
setStdOutputPath("");
}
String err = (String) context.getJobDetail().getJobDataMap().get("stdError");
- if ((err != null) && (err != "")) {
+ if ((err != null) && (!err.isEmpty())) {
saveLogToFile(getStdErrorPath(), err);
}
else {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index d97176c..9490329 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -19,6 +19,7 @@ import com.redhat.rhn.taskomatic.core.SchedulerKernel;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
+import org.quartz.SimpleTrigger;
import java.text.ParseException;
import java.util.Date;
@@ -26,7 +27,7 @@ import java.util.Map;
public class TaskoXmlRpcHandler {
- private Boolean checkUserName(String name, String group) throws SchedulerException {
+ private Boolean checkUniqueName(String name, String group) throws SchedulerException {
return ((SchedulerKernel.getScheduler().getTrigger(name, group) == null) &&
(SchedulerKernel.getScheduler().getJobDetail(name, group) == null));
}
@@ -48,17 +49,7 @@ public class TaskoXmlRpcHandler {
Date startTime, Date endTime, String cronExpression, Map params)
throws ParseException, NoSuchTaskException, InvalidJobLabelException {
try {
- if (!checkUserName(jobLabel, orgId.toString())) {
- throw new InvalidJobLabelException();
- }
- // create job
- JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(),
- TaskoBunch.class);
- // set job params
- jobDetail.getJobDataMap().putAll(params);
- jobDetail.getJobDataMap().put("org_id", orgId);
- jobDetail.getJobDataMap().put("bunch_name", bunchName);
- jobDetail.getJobDataMap().put("job_label", jobLabel);
+ JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params);
// create trigger
CronTrigger ct = new CronTrigger(jobLabel, orgId.toString(),
cronExpression);
@@ -94,6 +85,39 @@ public class TaskoXmlRpcHandler {
}
}
+ public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
+ Map params)
+ throws ParseException, NoSuchTaskException, InvalidJobLabelException {
+ try {
+ JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params);
+ SimpleTrigger st = new SimpleTrigger(jobLabel, orgId.toString(), 1, 1);
+ st.setEndTime(new Date());
+
+ // schedule job
+ return SchedulerKernel.getScheduler().scheduleJob(jobDetail, st);
+ }
+ catch (SchedulerException e) {
+ return null;
+ }
+ }
+
+ private JobDetail createJob(String bunchName, Integer orgId,
+ String jobLabel, Map params)
+ throws SchedulerException, InvalidJobLabelException {
+ if (!checkUniqueName(jobLabel, orgId.toString())) {
+ throw new InvalidJobLabelException();
+ }
+ // create job
+ JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(),
+ TaskoBunch.class);
+ // set job params
+ jobDetail.getJobDataMap().putAll(params);
+ jobDetail.getJobDataMap().put("org_id", orgId);
+ jobDetail.getJobDataMap().put("bunch_name", bunchName);
+ jobDetail.getJobDataMap().put("job_label", jobLabel);
+ return jobDetail;
+ }
+
public int listBunchRuns(Integer orgId, String triggerName)
throws NoSuchTaskoTriggerException {
try {