You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/08/29 11:46:57 UTC
svn commit: r690164 - in
/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event:
JobStatusProvider.java impl/JobEventHandler.java
Author: cziegeler
Date: Fri Aug 29 02:46:56 2008
New Revision: 690164
URL: http://svn.apache.org/viewvc?rev=690164&view=rev
Log:
Provide or search functionality; fix shutdown problem, when service is shutdown before the background thread started
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/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=690164&r1=690163&r2=690164&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 Fri Aug 29 02:46:56 2008
@@ -57,29 +57,35 @@
/**
* Return a list of currently schedulded jobs.
* @param topic Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.
- * @param filterProps An optional map of filter props that act like a template.
+ * @param filterProps 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).
* @return A non null collection.
*/
- Collection<Event> getScheduledJobs(String topic, Map<String, Object> filterProps);
+ Collection<Event> getScheduledJobs(String topic, Map<String, Object>... filterProps);
/**
* Return the jobs which are currently in processing. If there are several application nodes
* in the cluster, there could be more than one job in processing
* @param topic Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.
- * @param filterProps An optional map of filter props that act like a template.
+ * @param filterProps 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).
* @return A non null collection.
*/
- Collection<Event> getCurrentJobs(String topic, Map<String, Object> filterProps);
+ Collection<Event> getCurrentJobs(String topic, Map<String, Object>... filterProps);
/**
* Return all jobs either running or scheduled.
- * This is actually a convenience method and collects the results from {@link #getScheduledJobs(String, Map)}
- * and {@link #getCurrentJobs(String, Map)}
+ * This is actually a convenience method and collects the results from {@link #getScheduledJobs(String, Map...)}
+ * and {@link #getCurrentJobs(String, Map...)}
* @param topic Topic can be used as a filter, if it is non-null, only jobs with this topic will be returned.
- * @param filterProps An optional map of filter props that act like a template.
+ * @param filterProps 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).
* @return A non null collection.
*/
- Collection<Event> getAllJobs(String topic, Map<String, Object> filterProps);
+ Collection<Event> getAllJobs(String topic, Map<String, Object>... filterProps);
/**
* Cancel this job.
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=690164&r1=690163&r2=690164&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 Fri Aug 29 02:46:56 2008
@@ -193,7 +193,7 @@
* @see java.lang.Runnable#run()
*/
public void run() {
- if ( this.cleanupPeriod > 0 ) {
+ if ( this.cleanupPeriod > 0 && this.running ) {
this.logger.debug("Cleaning up repository, removing all finished jobs older than {} minutes.", this.cleanupPeriod);
final String queryString = this.getCleanUpQueryString();
@@ -333,7 +333,9 @@
this.ignoreException(e);
}
// load unprocessed jobs from repository
- this.loadJobs();
+ if ( this.running ) {
+ this.loadJobs();
+ }
while ( this.running ) {
// so let's wait/get the next job from the queue
EventInfo info = null;
@@ -1118,8 +1120,8 @@
* @throws RepositoryException
*/
private Collection<Event> queryJobs(final String topic,
- final Map<String, Object> filterProps,
- final Boolean locked) {
+ final Boolean locked,
+ final Map<String, Object>... filterProps) {
// we create a new session
Session s = null;
final List<Event> jobs = new ArrayList<Event>();
@@ -1144,24 +1146,41 @@
buffer.append(" and not(@jcr:lockOwner)");
}
}
- if ( filterProps != null ) {
- final Iterator<Map.Entry<String, Object>> i = filterProps.entrySet().iterator();
- while ( i.hasNext() ) {
- final Map.Entry<String, Object> current = i.next();
- // check prop name first
- final String propName = EventUtil.getNodePropertyName(current.getKey());
- if ( propName != null ) {
- // check value
- final Value value = EventUtil.getNodePropertyValue(s.getValueFactory(), current.getValue());
- if ( value != null ) {
- buffer.append(" and @");
- buffer.append(propName);
- buffer.append(" = '");
- buffer.append(current.getValue());
- buffer.append("'");
+ if ( filterProps != null && filterProps.length > 0 ) {
+ buffer.append(" and (");
+ int index = 0;
+ for (Map<String,Object> template : filterProps) {
+ if ( index > 0 ) {
+ buffer.append(" or ");
+ }
+ buffer.append('(');
+ final Iterator<Map.Entry<String, Object>> i = template.entrySet().iterator();
+ boolean first = true;
+ while ( i.hasNext() ) {
+ final Map.Entry<String, Object> current = i.next();
+ // check prop name first
+ final String propName = EventUtil.getNodePropertyName(current.getKey());
+ if ( propName != null ) {
+ // check value
+ final Value value = EventUtil.getNodePropertyValue(s.getValueFactory(), current.getValue());
+ if ( value != null ) {
+ if ( first ) {
+ first = false;
+ buffer.append('@');
+ } else {
+ buffer.append(" and @");
+ }
+ buffer.append(propName);
+ buffer.append(" = '");
+ buffer.append(current.getValue());
+ buffer.append("'");
+ }
}
}
+ buffer.append(')');
+ index++;
}
+ buffer.append(')');
}
buffer.append("]");
final String queryString = buffer.toString();
@@ -1194,7 +1213,7 @@
* @see org.apache.sling.event.JobStatusProvider#getCurrentJobs(java.lang.String)
*/
public Collection<Event> getCurrentJobs(String topic) {
- return this.getCurrentJobs(topic, null);
+ return this.getCurrentJobs(topic, (Map<String, Object>[])null);
}
/**
@@ -1208,29 +1227,29 @@
* @see org.apache.sling.event.JobStatusProvider#getScheduledJobs(java.lang.String)
*/
public Collection<Event> getScheduledJobs(String topic) {
- return this.getScheduledJobs(topic, null);
+ return this.getScheduledJobs(topic, (Map<String, Object>[])null);
}
/**
- * @see org.apache.sling.event.JobStatusProvider#getCurrentJobs(java.lang.String, java.util.Map)
+ * @see org.apache.sling.event.JobStatusProvider#getCurrentJobs(java.lang.String, java.util.Map...)
*/
- public Collection<Event> getCurrentJobs(String topic, Map<String, Object> filterProps) {
- return this.queryJobs(topic, filterProps, true);
+ public Collection<Event> getCurrentJobs(String topic, Map<String, Object>... filterProps) {
+ return this.queryJobs(topic, true, filterProps);
}
/**
- * @see org.apache.sling.event.JobStatusProvider#getScheduledJobs(java.lang.String, java.util.Map)
+ * @see org.apache.sling.event.JobStatusProvider#getScheduledJobs(java.lang.String, java.util.Map...)
*/
- public Collection<Event> getScheduledJobs(String topic, Map<String, Object> filterProps) {
- return this.queryJobs(topic, filterProps, false);
+ public Collection<Event> getScheduledJobs(String topic, Map<String, Object>... filterProps) {
+ return this.queryJobs(topic, false, filterProps);
}
/**
- * @see org.apache.sling.event.JobStatusProvider#getAllJobs(java.lang.String, java.util.Map)
+ * @see org.apache.sling.event.JobStatusProvider#getAllJobs(java.lang.String, java.util.Map...)
*/
- public Collection<Event> getAllJobs(String topic, Map<String, Object> filterProps) {
- return this.queryJobs(topic, filterProps, null);
+ public Collection<Event> getAllJobs(String topic, Map<String, Object>... filterProps) {
+ return this.queryJobs(topic, null, filterProps);
}