@Service(value={JobManager.class,org.osgi.service.event.EventHandler.class,java.lang.Runnable.class}) @Properties(value={@Property(name="scheduler.period",longValue=60L),@Property(name="scheduler.concurrent",boolValue=false),@Property(name="event.topics",value={"org/apache/sling/api/resource/Resource/ADDED","org/apache/sling/api/resource/Resource/CHANGED","org/apache/sling/api/resource/Resource/REMOVED","org/osgi/framework/BundleEvent/STARTED","org/osgi/framework/BundleEvent/UPDATED"})}) public class JobManagerImpl extends Object implements JobManager, org.osgi.service.event.EventHandler, Runnable
JobManager.QueryType
Constructor and Description |
---|
JobManagerImpl() |
Modifier and Type | Method and Description |
---|---|
protected void |
activate(Map<String,Object> props)
Activate this component.
|
Job |
addJob(String topic,
Map<String,Object> properties)
Add a new job
If the topic is
null or illegal, no job is created and null is returned. |
Job |
addJob(String topic,
String name,
Map<String,Object> properties)
Add a new job
If the topic is
null or illegal, no job is created and null is returned. |
Job |
addJob(String topic,
String name,
Map<String,Object> properties,
List<String> errors)
Internal method to add a job
|
JobBuilder |
createJob(String topic)
Fluent API to create, start and schedule new jobs
|
protected void |
deactivate()
Deactivate this component.
|
org.osgi.service.event.Event |
findJob(String topic,
Map<String,Object> template)
Find a job - either scheduled or active.
|
Collection<Job> |
findJobs(JobManager.QueryType type,
String topic,
long limit,
Map<String,Object>... templates)
Return all jobs of a given type.
|
void |
forceRemoveJob(String jobId)
Cancel this job.
|
Job |
getJob(String topic,
Map<String,Object> template)
Find a job - either scheduled or active.
|
Job |
getJobById(String id)
Return a job based on the unique id.
|
Job |
getJobByName(String name)
Return a job based on the unique job name.
|
JobSchedulerImpl |
getJobScheduler() |
Queue |
getQueue(String name)
Return a queue with a specific name (if running)
|
Iterable<Queue> |
getQueues()
Return an iterator for all available queues.
|
Collection<ScheduledJobInfo> |
getScheduledJobs()
Return all available job schedules.
|
Collection<ScheduledJobInfo> |
getScheduledJobs(String topic,
long limit,
Map<String,Object>... templates)
Return all matching available job schedules.
|
Statistics |
getStatistics()
Return our internal statistics object.
|
Iterable<TopicStatistics> |
getTopicStatistics()
Return statistics information about job topics.
|
void |
handleEvent(org.osgi.service.event.Event event) |
boolean |
isJobProcessingEnabled()
Is job processing enabled?
It is possible to completely turn off job processing.
|
JobsIterator |
queryJobs(JobManager.QueryType type,
String topic,
long limit,
Map<String,Object>... templates)
Return all jobs either running or scheduled.
|
JobsIterator |
queryJobs(JobManager.QueryType type,
String topic,
Map<String,Object>... templates)
Return all jobs either running or scheduled.
|
boolean |
removeJob(String jobId)
Cancel this job.
|
boolean |
removeJobById(String jobId)
Removes the job even if it is currently in processing.
|
void |
restart()
Restart the job manager.
|
Job |
retryJobById(String jobId)
Retry a cancelled job.
|
void |
run()
This method is invoked periodically by the scheduler.
|
void |
stopJobById(String jobId)
Stop a job.
|
@Activate protected void activate(Map<String,Object> props) throws org.apache.sling.api.resource.LoginException
props
- Configuration propertiesorg.apache.sling.api.resource.LoginException
@Deactivate protected void deactivate()
public void run()
run
in interface Runnable
Runnable.run()
public void restart()
JobManager
restart
in interface JobManager
JobManager.restart()
public boolean isJobProcessingEnabled()
JobManager
isJobProcessingEnabled
in interface JobManager
JobManager.isJobProcessingEnabled()
public void handleEvent(org.osgi.service.event.Event event)
handleEvent
in interface org.osgi.service.event.EventHandler
EventHandler.handleEvent(org.osgi.service.event.Event)
public Statistics getStatistics()
getStatistics
in interface JobManager
JobManager.getStatistics()
public Iterable<TopicStatistics> getTopicStatistics()
JobManager
getTopicStatistics
in interface JobManager
JobManager.getTopicStatistics()
public Queue getQueue(String name)
JobManager
getQueue
in interface JobManager
name
- The queue namenull
JobManager.getQueue(java.lang.String)
public Iterable<Queue> getQueues()
JobManager
getQueues
in interface JobManager
JobManager.getQueues()
public JobsIterator queryJobs(JobManager.QueryType type, String topic, Map<String,Object>... templates)
JobManager
queryJobs
in interface JobManager
type
- Required parameter for the type: either all jobs, only queued or only started can be returned.topic
- Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.templates
- A list of filter property maps. Each map acts like a template. The searched job
must match the template (AND query). By providing several maps, different filters
are possible (OR query).public JobsIterator queryJobs(JobManager.QueryType type, String topic, long limit, Map<String,Object>... templates)
JobManager
queryJobs
in interface JobManager
type
- Required parameter for the type: either all jobs, only queued or only started can be returned.topic
- Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.limit
- A positive number indicating the maximum number of jobs returned by the iterator.templates
- A list of filter property maps. Each map acts like a template. The searched job
must match the template (AND query). By providing several maps, different filters
are possible (OR query).public org.osgi.service.event.Event findJob(String topic, Map<String,Object> template)
JobManager
findJob
in interface JobManager
topic
- Topic is required.template
- The map acts like a template. The searched job
must match the template (AND query).null
public boolean removeJob(String jobId)
JobManager
removeJob
in interface JobManager
jobId
- The unique identifier as found in the property JobUtil.JOB_ID
.true
if the job could be cancelled or does not exist anymore.
false
otherwise.JobManager.removeJob(java.lang.String)
public void forceRemoveJob(String jobId)
JobManager
JobManager.removeJob(String)
with the exception that it waits
for a job to finish. The job will be removed when this method returns - however
this method blocks until the job is finished!forceRemoveJob
in interface JobManager
jobId
- The unique identifier as found in the property JobUtil.JOB_ID
.JobManager.forceRemoveJob(java.lang.String)
public Job addJob(String topic, Map<String,Object> properties)
JobManager
null
or illegal, no job is created and null
is returned.
If properties are provided, all of them must be serializable. If there are non serializable
objects in the properties, no job is created and null
is returned.
A job topic is a hierarchical name separated by dashes, each part has to start with a letter,
allowed characters are letters, numbers and the underscore.
The returned job object is a snapshot of the job state taken at the time of creation. Updates
to the job state are not reflected and the client needs to get a new job object using the job id.
If the queue for processing this job is configured to drop the job, null
is returned
as well.addJob
in interface JobManager
topic
- The required job topic.properties
- Optional job properties. The properties must be serializable.null
if the job could not be created.JobManager.addJob(java.lang.String, java.util.Map)
public Job addJob(String topic, String name, Map<String,Object> properties)
JobManager
null
or illegal, no job is created and null
is returned.
If properties are provided, all of them must be serializable. If there are non serializable
objects in the properties, no job is created and null
is returned.
A job topic is a hierarchical name separated by dashes, each part has to start with a letter,
allowed characters are letters, numbers and the underscore.
This method allows to specify a job name which should uniquely identify this job. If a job with
the same name is started on different instances, the job is still processed only once. However,
the topology api in combination with the leader selection provides a better way for
dealing with this situation and as jobs with name come with a heavy processing overhead
these should be avoided.
The returned job object is a snapshot of the job state taken at the time of creation. Updates
to the job state are not reflected and the client needs to get a new job object using the job id.
If the queue for processing this job is configured to drop the job, null
is returned
as well.addJob
in interface JobManager
topic
- The required job topic.name
- Optional unique job nameproperties
- Optional job properties. The properties must be serializable.null
if the job could not be created.JobManager.addJob(java.lang.String, java.lang.String, java.util.Map)
public Job getJobByName(String name)
JobManager
getJobByName
in interface JobManager
null
JobManager.getJobByName(java.lang.String)
public Job getJobById(String id)
JobManager
getJobById
in interface JobManager
id
- The unique identifier from Job.getId()
null
JobManager.getJobById(java.lang.String)
public Job getJob(String topic, Map<String,Object> template)
JobManager
getJob
in interface JobManager
topic
- Topic is required.template
- The map acts like a template. The searched job
must match the template (AND query).null
JobManager.getJob(java.lang.String, java.util.Map)
public boolean removeJobById(String jobId)
JobManager
removeJobById
in interface JobManager
jobId
- The unique identifier from Job.getId()
true
if the job could be removed or does not exist anymore.
false
otherwise.JobManager.removeJobById(java.lang.String)
public Collection<Job> findJobs(JobManager.QueryType type, String topic, long limit, Map<String,Object>... templates)
JobManager
findJobs
in interface JobManager
type
- Required parameter for the type. See above.topic
- Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.limit
- A positive number indicating the maximum number of jobs returned by the iterator. A value
of zero or less indicates that all jobs should be returned.templates
- A list of filter property maps. Each map acts like a template. The searched job
must match the template (AND query). By providing several maps, different filters
are possible (OR query).JobManager.findJobs(org.apache.sling.event.jobs.JobManager.QueryType, java.lang.String, long, java.util.Map[])
public void stopJobById(String jobId)
JobManager
stopJobById
in interface JobManager
JobManager.stopJobById(java.lang.String)
public JobBuilder createJob(String topic)
JobManager
createJob
in interface JobManager
topic
- Required topicJobManager.createJob(java.lang.String)
public Collection<ScheduledJobInfo> getScheduledJobs()
JobManager
getScheduledJobs
in interface JobManager
JobManager.getScheduledJobs()
public Collection<ScheduledJobInfo> getScheduledJobs(String topic, long limit, Map<String,Object>... templates)
JobManager
getScheduledJobs
in interface JobManager
topic
- Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.limit
- A positive number indicating the maximum number of jobs returned by the iterator. A value
of zero or less indicates that all jobs should be returned.templates
- A list of filter property maps. Each map acts like a template. The searched job
must match the template (AND query). By providing several maps, different filters
are possible (OR query).JobManager.getScheduledJobs()
public Job addJob(String topic, String name, Map<String,Object> properties, List<String> errors)
public Job retryJobById(String jobId)
JobManager
null
.retryJobById
in interface JobManager
jobId
- The job id.null
JobManager.retryJobById(java.lang.String)
public JobSchedulerImpl getJobScheduler()
Copyright © 2007–2015 The Apache Software Foundation. All rights reserved.