Author: cziegeler
Date: Thu Aug 28 11:12:07 2008
New Revision: 689919
URL: http://svn.apache.org/viewvc?rev=689919&view=rev
Log:
SLING-606 : Provide a method to cancel a job.
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/JobStatusProvider.java
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/EventHelper.java
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/JobStatusProvider.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/JobStatusProvider.java?rev=689919&r1=689918&r2=689919&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/JobStatusProvider.java
(original)
+++
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/JobStatusProvider.java
Thu Aug 28 11:12:07 2008
@@ -29,6 +29,11 @@
public interface JobStatusProvider {
/**
+ * This is a unique identifer which can be used to cancel the job.
+ */
+ String PROPERTY_EVENT_ID = "slingevent:eventId";
+
+ /**
* @deprecated Use [EMAIL PROTECTED] #getScheduledJobs(String)} instead.
*/
@Deprecated
@@ -75,4 +80,18 @@
* @return A non null collection.
*/
Collection<Event> getAllJobs(String topic, Map<String, Object>
filterProps);
+
+ /**
+ * Cancel this job.
+ * @param jobId The unique identifer as found in the property [EMAIL
PROTECTED] #PROPERTY_EVENT_ID}.
+ */
+ void cancelJob(String jobId);
+
+ /**
+ * Cancel this job.
+ * This method can be used if the topic and the provided job id is known.
+ * @param topic The job topic as put into the property [EMAIL PROTECTED]
EventUtil#PROPERTY_JOB_TOPIC}.
+ * @param jobId The unique identifer as put into the property [EMAIL
PROTECTED] EventUtil#PROPERTY_JOB_ID}.
+ */
+ void cancelJob(String topic, String jobId);
}
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java?rev=689919&r1=689918&r2=689919&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
(original)
+++
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/AbstractRepositoryEventHandler.java
Thu Aug 28 11:12:07 2008
@@ -36,6 +36,7 @@
import org.apache.sling.engine.SlingSettingsService;
import org.apache.sling.event.EventPropertiesMap;
import org.apache.sling.event.EventUtil;
+import org.apache.sling.event.JobStatusProvider;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.resource.JcrResourceUtil;
import org.osgi.service.component.ComponentContext;
@@ -103,7 +104,7 @@
private static final String[] IGNORE_PROPERTIES = new String[] {
EventUtil.PROPERTY_DISTRIBUTE,
EventUtil.PROPERTY_APPLICATION,
- EventHelper.NODE_PROPERTY_NODE_PATH,
+ JobStatusProvider.PROPERTY_EVENT_ID,
EventUtil.JobStatusNotifier.CONTEXT_PROPERTY_NAME
};
@@ -311,7 +312,7 @@
EventHelper.NODE_PROPERTY_PROPERTIES,
IGNORE_PREFIXES);
- eventProps.put(EventHelper.NODE_PROPERTY_NODE_PATH,
eventNode.getPath());
+ eventProps.put(JobStatusProvider.PROPERTY_EVENT_ID,
eventNode.getPath());
this.addEventProperties(eventNode, eventProps);
try {
final Event event = new Event(topic, eventProps);
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/EventHelper.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/EventHelper.java?rev=689919&r1=689918&r2=689919&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/EventHelper.java
(original)
+++
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/EventHelper.java
Thu Aug 28 11:12:07 2008
@@ -34,7 +34,6 @@
public static final String NODE_PROPERTY_PROPERTIES =
"slingevent:properties";
public static final String NODE_PROPERTY_PROCESSOR =
"slingevent:processor";
public static final String NODE_PROPERTY_JOBID = "slingevent:id";
- public static final String NODE_PROPERTY_NODE_PATH = "slingevent:nodePath";
public static final String NODE_PROPERTY_FINISHED = "slingevent:finished";
public static final String NODE_PROPERTY_TE_EXPRESSION =
"slingevent:expression";
public static final String NODE_PROPERTY_TE_DATE = "slingevent:date";
Modified:
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java?rev=689919&r1=689918&r2=689919&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
(original)
+++
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
Thu Aug 28 11:12:07 2008
@@ -33,6 +33,7 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
+import javax.jcr.Item;
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
@@ -245,11 +246,12 @@
}
final EventInfo info = new EventInfo();
info.event = event;
- final String nodePath = this.getNodePath(event);
+ final String jobId =
(String)event.getProperty(EventUtil.PROPERTY_JOB_ID);
+ final String jobTopic =
(String)event.getProperty(EventUtil.PROPERTY_JOB_TOPIC);
+ final String nodePath = this.getNodePath(jobTopic, jobId);
// if the job has no job id, we can just write the job to the
repo and don't
// need locking
- final String jobId =
(String)event.getProperty(EventUtil.PROPERTY_JOB_ID);
if ( jobId == null ) {
try {
final Node eventNode = this.writeEvent(event,
nodePath);
@@ -723,14 +725,11 @@
/**
* Create a unique node path (folder and name) for the job.
*/
- private String getNodePath(Event event) {
- final String jobTopic =
((String)event.getProperty(EventUtil.PROPERTY_JOB_TOPIC)).replace('/', '.');
- final String jobId =
(String)event.getProperty(EventUtil.PROPERTY_JOB_ID);
-
+ private String getNodePath(final String jobTopic, final String jobId) {
if ( jobId != null ) {
- return jobTopic + "/" + filter(jobId);
+ return jobTopic.replace('/', '.') + "/" + filter(jobId);
}
- return jobTopic + "/Job " + UUID.randomUUID().toString();
+ return jobTopic.replace('/', '.') + "/Job " +
UUID.randomUUID().toString();
}
/**
@@ -1236,6 +1235,41 @@
}
+ /**
+ * @see
org.apache.sling.event.JobStatusProvider#cancelJob(java.lang.String,
java.lang.String)
+ */
+ public void cancelJob(String topic, String jobId) {
+ if ( jobId != null && topic != null ) {
+ this.cancelJob(this.getNodePath(topic, jobId));
+ }
+ }
+
+ /**
+ * @see
org.apache.sling.event.JobStatusProvider#cancelJob(java.lang.String)
+ */
+ public void cancelJob(String jobId) {
+ if ( jobId != null ) {
+ synchronized ( this.writerSession ) {
+ try {
+ this.writerSession.refresh(false);
+ } catch (RepositoryException e) {
+ this.ignoreException(e);
+ }
+ try {
+ if ( this.writerSession.itemExists(jobId) ) {
+ final Item item = this.writerSession.getItem(jobId);
+ final Node parentNode = item.getParent();
+ item.remove();
+ parentNode.save();
+ }
+ } catch (RepositoryException e) {
+ this.logger.error("Error during cancelling job at " +
jobId, e);
+ }
+ }
+ }
+ }
+
+
private static final class JobBlockingQueue extends
LinkedBlockingQueue<EventInfo> {
private EventInfo eventInfo;