Return-Path: Delivered-To: apmail-incubator-sling-commits-archive@locus.apache.org Received: (qmail 62511 invoked from network); 28 Aug 2008 18:12:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 28 Aug 2008 18:12:30 -0000 Received: (qmail 67255 invoked by uid 500); 28 Aug 2008 18:12:28 -0000 Delivered-To: apmail-incubator-sling-commits-archive@incubator.apache.org Received: (qmail 67218 invoked by uid 500); 28 Aug 2008 18:12:28 -0000 Mailing-List: contact sling-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: sling-dev@incubator.apache.org Delivered-To: mailing list sling-commits@incubator.apache.org Received: (qmail 67209 invoked by uid 99); 28 Aug 2008 18:12:28 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Aug 2008 11:12:28 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Aug 2008 18:11:38 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5F16223889F3; Thu, 28 Aug 2008 11:12:08 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r689919 - in /incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event: JobStatusProvider.java impl/AbstractRepositoryEventHandler.java impl/EventHelper.java impl/JobEventHandler.java Date: Thu, 28 Aug 2008 18:12:07 -0000 To: sling-commits@incubator.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080828181208.5F16223889F3@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 {@link #getScheduledJobs(String)} instead. */ @Deprecated @@ -75,4 +80,18 @@ * @return A non null collection. */ Collection getAllJobs(String topic, Map filterProps); + + /** + * Cancel this job. + * @param jobId The unique identifer as found in the property {@link #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 {@link EventUtil#PROPERTY_JOB_TOPIC}. + * @param jobId The unique identifer as put into the property {@link 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 { private EventInfo eventInfo;