Repository: karaf
Updated Branches:
  refs/heads/master b7bdb3594 -> 0400c2d7a


[KARAF-5306] Add manual trigger command to karaf scheduler


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/64c04955
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/64c04955
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/64c04955

Branch: refs/heads/master
Commit: 64c049555085da34f7cb48c484c5a535bd416e71
Parents: b7bdb35
Author: Ciprian Ciubotariu <cheepe...@gmx.net>
Authored: Wed Aug 9 16:43:58 2017 +0300
Committer: Jean-Baptiste Onofré <jbono...@apache.org>
Committed: Sun Aug 13 06:48:59 2017 +0200

----------------------------------------------------------------------
 .../org/apache/karaf/scheduler/Scheduler.java   |  9 ++++
 .../apache/karaf/scheduler/command/Trigger.java | 55 ++++++++++++++++++++
 .../scheduler/command/support/TriggerJob.java   | 36 +++++++++++++
 .../karaf/scheduler/core/QuartzScheduler.java   | 18 +++++++
 4 files changed, 118 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/64c04955/scheduler/src/main/java/org/apache/karaf/scheduler/Scheduler.java
----------------------------------------------------------------------
diff --git a/scheduler/src/main/java/org/apache/karaf/scheduler/Scheduler.java 
b/scheduler/src/main/java/org/apache/karaf/scheduler/Scheduler.java
index 3bf18cb..975e2d4 100644
--- a/scheduler/src/main/java/org/apache/karaf/scheduler/Scheduler.java
+++ b/scheduler/src/main/java/org/apache/karaf/scheduler/Scheduler.java
@@ -92,6 +92,15 @@ public interface Scheduler {
     Map<Object, ScheduleOptions> getJobs() throws SchedulerError;
 
     /**
+     * Triggers a scheduled job.
+     *
+     * @param jobName The name of the job.
+     * @return <code>true</code> if the job was triggered, otherwise 
<code>false</code>
+     * @throws SchedulerError  if the job can't be triggered.
+     */
+    boolean trigger(String jobName) throws SchedulerError;
+
+    /**
      * Create a schedule options to fire a job immediately and only once.
      *
      * @return The corresponding {@link ScheduleOptions}.

http://git-wip-us.apache.org/repos/asf/karaf/blob/64c04955/scheduler/src/main/java/org/apache/karaf/scheduler/command/Trigger.java
----------------------------------------------------------------------
diff --git 
a/scheduler/src/main/java/org/apache/karaf/scheduler/command/Trigger.java 
b/scheduler/src/main/java/org/apache/karaf/scheduler/command/Trigger.java
new file mode 100644
index 0000000..f596345
--- /dev/null
+++ b/scheduler/src/main/java/org/apache/karaf/scheduler/command/Trigger.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.scheduler.command;
+
+import org.apache.karaf.scheduler.command.support.TriggerJob;
+import org.apache.karaf.scheduler.Scheduler;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+
+@Command(scope = "scheduler", name = "trigger", description = "Manually 
trigger a scheduled job")
+@Service
+public class Trigger implements Action {
+
+    @Argument(description = "Name of the job to trigger", required = true)
+    String name;
+
+    @Option(name = "-b", aliases = "background", description = "schedule the 
trigger in the background", required = false)
+    boolean background = false;
+
+    @Reference
+    Scheduler scheduler;
+
+    @Override
+    public Object execute() throws Exception {
+        if (background) {
+            System.out.println("Scheduling background trigger for job " + 
name);
+            scheduler.schedule(new TriggerJob(scheduler, name), 
scheduler.NOW());
+        } else {
+            System.out.println("Triggering job " + name);
+            if (!scheduler.trigger(name)) {
+                System.out.println("Could not find a scheduled job with name " 
+ name);
+            }
+        }
+        return null;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/64c04955/scheduler/src/main/java/org/apache/karaf/scheduler/command/support/TriggerJob.java
----------------------------------------------------------------------
diff --git 
a/scheduler/src/main/java/org/apache/karaf/scheduler/command/support/TriggerJob.java
 
b/scheduler/src/main/java/org/apache/karaf/scheduler/command/support/TriggerJob.java
new file mode 100644
index 0000000..63b149c
--- /dev/null
+++ 
b/scheduler/src/main/java/org/apache/karaf/scheduler/command/support/TriggerJob.java
@@ -0,0 +1,36 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.karaf.scheduler.command.support;
+
+import org.apache.karaf.scheduler.Scheduler;
+import org.apache.karaf.scheduler.SchedulerError;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TriggerJob implements Runnable {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(TriggerJob.class);
+
+    private final Scheduler scheduler;
+    private final String name;
+
+    public TriggerJob(Scheduler scheduler, String name) {
+        this.scheduler = scheduler;
+        this.name = name;
+    }
+
+    @Override
+    public void run() {
+        try {
+            if (!scheduler.trigger(name)) {
+                LOGGER.warn("Could not find a scheduled job with name " + 
name);
+            }
+        } catch (SchedulerError ex) {
+            LOGGER.error("Failed to trigger job {}", name, ex);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/64c04955/scheduler/src/main/java/org/apache/karaf/scheduler/core/QuartzScheduler.java
----------------------------------------------------------------------
diff --git 
a/scheduler/src/main/java/org/apache/karaf/scheduler/core/QuartzScheduler.java 
b/scheduler/src/main/java/org/apache/karaf/scheduler/core/QuartzScheduler.java
index f02fcfc..8641a5d 100644
--- 
a/scheduler/src/main/java/org/apache/karaf/scheduler/core/QuartzScheduler.java
+++ 
b/scheduler/src/main/java/org/apache/karaf/scheduler/core/QuartzScheduler.java
@@ -301,4 +301,22 @@ public class QuartzScheduler implements Scheduler {
         }
     }
 
+    @Override
+    public boolean trigger(String jobName) throws SchedulerError {
+        final org.quartz.Scheduler s = this.scheduler;
+        if (jobName != null && s != null) {
+            try {
+                final JobKey key = JobKey.jobKey(jobName);
+                final JobDetail jobdetail = s.getJobDetail(key);
+                if (jobdetail != null) {
+                    this.scheduler.triggerJob(key, jobdetail.getJobDataMap());
+                    return true;
+                }
+            } catch (SchedulerException ex) {
+                throw new SchedulerError(ex);
+            }
+        }
+        return false;
+    }
+
 }

Reply via email to