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 2016/09/20 10:06:22 UTC
svn commit: r1761546 - in /sling/trunk/bundles/extensions/event: pom.xml
src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java
src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java
Author: cziegeler
Date: Tue Sep 20 10:06:21 2016
New Revision: 1761546
URL: http://svn.apache.org/viewvc?rev=1761546&view=rev
Log:
SLING-5998 : NewJobSender should move to new ResourceChangeListener API
Modified:
sling/trunk/bundles/extensions/event/pom.xml
sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java
sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java
Modified: sling/trunk/bundles/extensions/event/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/pom.xml?rev=1761546&r1=1761545&r2=1761546&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/pom.xml (original)
+++ sling/trunk/bundles/extensions/event/pom.xml Tue Sep 20 10:06:21 2016
@@ -23,7 +23,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>26</version>
+ <version>28</version>
<relativePath />
</parent>
@@ -202,10 +202,6 @@
</profiles>
<dependencies>
<dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.discovery.api</artifactId>
<version>1.0.0</version>
@@ -242,7 +238,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.4.0</version>
+ <version>2.11.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -264,9 +260,15 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.discovery.commons</artifactId>
+ <version>1.0.12</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-jcr-commons</artifactId>
- <version>2.2.4</version>
+ <version>2.11.2</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -278,7 +280,7 @@
<!-- Webconsole -->
<dependency>
<groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
+ <artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- Testing -->
<dependency>
@@ -332,6 +334,13 @@
</dependency>
<dependency>
+ <groupId>org.ops4j.pax.exam</groupId>
+ <artifactId>pax-exam-cm</artifactId>
+ <version>${exam.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.ops4j.pax.url</groupId>
<artifactId>pax-url-aether</artifactId>
<version>${url.version}</version>
@@ -350,11 +359,5 @@
<version>1</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.discovery.commons</artifactId>
- <version>1.0.12</version>
- <scope>provided</scope>
- </dependency>
</dependencies>
</project>
Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java?rev=1761546&r1=1761545&r2=1761546&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/notifications/NewJobSender.java Tue Sep 20 10:06:21 2016
@@ -20,12 +20,16 @@ package org.apache.sling.event.impl.jobs
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.List;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
-import org.apache.sling.api.SlingConstants;
+import org.apache.sling.api.resource.observation.ExternalResourceChangeListener;
+import org.apache.sling.api.resource.observation.ResourceChange;
+import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
+import org.apache.sling.api.resource.observation.ResourceChangeListener;
import org.apache.sling.event.impl.jobs.config.JobManagerConfiguration;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.NotificationConstants;
@@ -34,8 +38,6 @@ import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
-import org.osgi.service.event.EventConstants;
-import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,7 +46,7 @@ import org.slf4j.LoggerFactory;
* created event.
*/
@Component
-public class NewJobSender implements EventHandler {
+public class NewJobSender implements ResourceChangeListener, ExternalResourceChangeListener {
/** Logger. */
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -58,7 +60,7 @@ public class NewJobSender implements Eve
private EventAdmin eventAdmin;
/** Service registration for the event handler. */
- private volatile ServiceRegistration eventHandlerRegistration;
+ private volatile ServiceRegistration<ResourceChangeListener> listenerRegistration;
/**
* Activate this component.
@@ -69,11 +71,10 @@ public class NewJobSender implements Eve
final Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Job Topic Manager Event Handler");
properties.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
- properties.put(EventConstants.EVENT_TOPIC, SlingConstants.TOPIC_RESOURCE_ADDED);
- properties.put(EventConstants.EVENT_FILTER,
- "(" + SlingConstants.PROPERTY_PATH + "=" +
- this.configuration.getLocalJobsPath() + "/*)");
- this.eventHandlerRegistration = bundleContext.registerService(EventHandler.class.getName(), this, properties);
+ properties.put(ResourceChangeListener.CHANGES, ChangeType.ADDED.toString());
+ properties.put(ResourceChangeListener.PATHS, this.configuration.getLocalJobsPath());
+
+ this.listenerRegistration = bundleContext.registerService(ResourceChangeListener.class, this, properties);
}
/**
@@ -82,31 +83,32 @@ public class NewJobSender implements Eve
*/
@Deactivate
protected void deactivate() {
- if ( this.eventHandlerRegistration != null ) {
- this.eventHandlerRegistration.unregister();
- this.eventHandlerRegistration = null;
+ if ( this.listenerRegistration != null ) {
+ this.listenerRegistration.unregister();
+ this.listenerRegistration = null;
}
}
@Override
- public void handleEvent(final Event event) {
- logger.debug("Received event {}", event);
- final String path = (String) event.getProperty(SlingConstants.PROPERTY_PATH);
- if ( this.configuration.isLocalJob(path) ) {
- // get topic and id from path
- final int topicStart = this.configuration.getLocalJobsPath().length() + 1;
- final int topicEnd = path.indexOf('/', topicStart);
- if ( topicEnd != -1 ) {
- final String topic = path.substring(topicStart, topicEnd).replace('.', '/');
+ public void onChange(final List<ResourceChange> resourceChanges) {
+ for(final ResourceChange resourceChange : resourceChanges) {
+ logger.debug("Received event {}", resourceChange);
+
+ final String path = resourceChange.getPath();
+
+ final int topicStart = this.configuration.getLocalJobsPath().length() + 1;
+ final int topicEnd = path.indexOf('/', topicStart);
+ if ( topicEnd != -1 ) {
+ final String topic = path.substring(topicStart, topicEnd).replace('.', '/');
final String jobId = path.substring(topicEnd + 1);
if ( path.indexOf("_", topicEnd + 1) != -1 ) {
- // only job id and topic are guaranteed
- final Dictionary<String, Object> properties = new Hashtable<String, Object>();
- properties.put(NotificationConstants.NOTIFICATION_PROPERTY_JOB_ID, jobId);
+ // only job id and topic are guaranteed
+ final Dictionary<String, Object> properties = new Hashtable<String, Object>();
+ properties.put(NotificationConstants.NOTIFICATION_PROPERTY_JOB_ID, jobId);
properties.put(NotificationConstants.NOTIFICATION_PROPERTY_JOB_TOPIC, topic);
- // we also set internally the queue name
+ // we also set internally the queue name
final String queueName = this.configuration.getQueueConfigurationManager().getQueueInfo(topic).queueName;
properties.put(Job.PROPERTY_JOB_QUEUE_NAME, queueName);
@@ -114,8 +116,8 @@ public class NewJobSender implements Eve
// as this is send within handling an event, we do sync call
this.eventAdmin.sendEvent(jobEvent);
}
- }
- }
- }
+ }
+ }
+ }
}
Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java?rev=1761546&r1=1761545&r2=1761546&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java Tue Sep 20 10:06:21 2016
@@ -49,6 +49,7 @@ import org.apache.sling.event.jobs.consu
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.CoreOptions;
import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.cm.ConfigurationAdminOptions;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
@@ -97,8 +98,14 @@ public abstract class AbstractJobHandlin
String localRepo = System.getProperty("maven.repo.local", "");
+ final String jackrabbitVersion = "2.13.1";
+ final String oakVersion = "1.5.7";
+
+ final String slingHome = new File(buildDir + File.separatorChar + "sling_" + System.currentTimeMillis()).getAbsolutePath();
+
return options(
- frameworkProperty("sling.home").value(new File(buildDir + File.separatorChar + "sling_" + System.currentTimeMillis()).getAbsolutePath()),
+ frameworkProperty("sling.home").value(slingHome),
+ frameworkProperty("repository.home").value(slingHome + File.separatorChar + "repository"),
when( localRepo.length() > 0 ).useOptions(
systemProperty("org.ops4j.pax.url.mvn.localRepository").value(localRepo)
),
@@ -106,6 +113,57 @@ public abstract class AbstractJobHandlin
systemProperty(PORT_CONFIG).value(System.getProperty(PORT_CONFIG))),
systemProperty("pax.exam.osgi.unresolved.fail").value("true"),
+ ConfigurationAdminOptions.newConfiguration("org.apache.felix.jaas.ConfigurationSpi")
+ .create(true)
+ .put("jaas.defaultRealmName", "jackrabbit.oak")
+ .put("jaas.configProviderName", "FelixJaasProvider")
+ .asOption(),
+ ConfigurationAdminOptions.factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+ .create(true)
+ .put("jaas.controlFlag", "optional")
+ .put("jaas.classname", "org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule")
+ .put("jaas.ranking", 300)
+ .asOption(),
+ ConfigurationAdminOptions.factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+ .create(true)
+ .put("jaas.controlFlag", "required")
+ .put("jaas.classname", "org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl")
+ .asOption(),
+ ConfigurationAdminOptions.factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+ .create(true)
+ .put("jaas.controlFlag", "sufficient")
+ .put("jaas.classname", "org.apache.jackrabbit.oak.security.authentication.token.TokenLoginModule")
+ .put("jaas.ranking", 200)
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.jackrabbit.oak.security.authentication.AuthenticationConfigurationImpl")
+ .create(true)
+ .put("org.apache.jackrabbit.oak.authentication.configSpiName", "FelixJaasProvider")
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.jackrabbit.oak.security.user.UserConfigurationImpl")
+ .create(true)
+ .put("groupsPath", "/home/groups")
+ .put("usersPath", "/home/users")
+ .put("defaultPath", "1")
+ .put("importBehavior", "besteffort")
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName")
+ .create(true)
+ .put("enabledActions", new String[] {"org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction"})
+ .put("userPrivilegeNames", new String[] {"jcr:all"})
+ .put("groupPrivilegeNames", new String[] {"jcr:read"})
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.jackrabbit.oak.spi.security.user.action.DefaultAuthorizableActionProvider")
+ .create(true)
+ .put("length", 21)
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService")
+ .create(true)
+ .put("name", "Default NodeStore")
+ .asOption(),
+ ConfigurationAdminOptions.newConfiguration("org.apache.sling.resourceresolver.impl.observation.OsgiObservationBridge")
+ .create(true)
+ .put("enabled", true)
+ .asOption(),
// logging
systemProperty("pax.exam.logging").value("none"),
mavenBundle("org.apache.sling", "org.apache.sling.commons.log", "4.0.6"),
@@ -129,9 +187,10 @@ public abstract class AbstractJobHandlin
// infrastructure
mavenBundle("org.apache.felix", "org.apache.felix.http.servlet-api", "1.1.2"),
+ mavenBundle("org.apache.felix", "org.apache.felix.http.jetty", "3.1.6"),
mavenBundle("org.apache.felix", "org.apache.felix.eventadmin", "1.4.4"),
- mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.2"),
- mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.8"),
+ mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.4"),
+ mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.10"),
mavenBundle("org.apache.felix", "org.apache.felix.inventory", "1.0.4"),
mavenBundle("org.apache.felix", "org.apache.felix.metatype", "1.1.2"),
@@ -146,33 +205,45 @@ public abstract class AbstractJobHandlin
mavenBundle("org.apache.sling", "org.apache.sling.auth.core", "1.3.12"),
mavenBundle("org.apache.sling", "org.apache.sling.discovery.api", "1.0.2"),
+ mavenBundle("org.apache.sling", "org.apache.sling.discovery.commons", "1.0.12"),
mavenBundle("org.apache.sling", "org.apache.sling.discovery.standalone", "1.0.2"),
- mavenBundle("org.apache.sling", "org.apache.sling.api", "2.9.0"),
- mavenBundle("org.apache.sling", "org.apache.sling.resourceresolver", "1.2.6"),
+ mavenBundle("org.apache.sling", "org.apache.sling.api", "2.14.2"),
+ mavenBundle("org.apache.sling", "org.apache.sling.resourceresolver", "1.4.18"),
mavenBundle("org.apache.sling", "org.apache.sling.adapter", "2.1.2"),
- mavenBundle("org.apache.sling", "org.apache.sling.jcr.resource", "2.5.6"),
+ mavenBundle("org.apache.sling", "org.apache.sling.jcr.resource", "2.8.0"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.classloader", "3.2.2"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.contentloader", "2.1.8"),
- mavenBundle("org.apache.sling", "org.apache.sling.engine", "2.3.6"),
+ mavenBundle("org.apache.sling", "org.apache.sling.engine", "2.6.2"),
mavenBundle("org.apache.sling", "org.apache.sling.serviceusermapper", "1.2.2"),
mavenBundle("org.apache.sling", "org.apache.sling.jcr.jcr-wrapper", "2.0.0"),
- mavenBundle("org.apache.sling", "org.apache.sling.jcr.api", "2.3.0"),
- mavenBundle("org.apache.sling", "org.apache.sling.jcr.base", "2.3.0"),
- mavenBundle("org.apache.jackrabbit", "jackrabbit-api", "2.10.1"),
- mavenBundle("org.apache.jackrabbit", "jackrabbit-jcr-commons", "2.10.1"),
- mavenBundle("org.apache.jackrabbit", "jackrabbit-spi", "2.10.1"),
- mavenBundle("org.apache.jackrabbit", "jackrabbit-spi-commons", "2.10.1"),
- mavenBundle("org.apache.jackrabbit", "jackrabbit-jcr-rmi", "2.10.1"),
- mavenBundle("org.apache.derby", "derby", "10.5.3.0_1"),
- mavenBundle("org.apache.sling", "org.apache.sling.jcr.jackrabbit.server", "2.3.0"),
+ mavenBundle("org.apache.sling", "org.apache.sling.jcr.api", "2.4.0"),
+ mavenBundle("org.apache.sling", "org.apache.sling.jcr.base", "2.4.0"),
+
+ mavenBundle("com.google.guava", "guava", "15.0"),
+ mavenBundle("org.apache.jackrabbit", "jackrabbit-api", jackrabbitVersion),
+ mavenBundle("org.apache.jackrabbit", "jackrabbit-jcr-commons", jackrabbitVersion),
+ mavenBundle("org.apache.jackrabbit", "jackrabbit-spi", jackrabbitVersion),
+ mavenBundle("org.apache.jackrabbit", "jackrabbit-spi-commons", jackrabbitVersion),
+ mavenBundle("org.apache.jackrabbit", "jackrabbit-jcr-rmi", jackrabbitVersion),
+
+ mavenBundle("org.apache.felix", "org.apache.felix.jaas", "0.0.4"),
+
+ mavenBundle("org.apache.jackrabbit", "oak-core", oakVersion),
+ mavenBundle("org.apache.jackrabbit", "oak-commons", oakVersion),
+ mavenBundle("org.apache.jackrabbit", "oak-lucene", oakVersion),
+ mavenBundle("org.apache.jackrabbit", "oak-blob", oakVersion),
+ mavenBundle("org.apache.jackrabbit", "oak-jcr", oakVersion),
+
+ mavenBundle("org.apache.jackrabbit", "oak-segment", oakVersion),
+
+ mavenBundle("org.apache.sling", "org.apache.sling.jcr.oak.server", "1.1.0"),
mavenBundle("org.apache.sling", "org.apache.sling.testing.tools", "1.0.6"),
mavenBundle("org.apache.httpcomponents", "httpcore-osgi", "4.1.2"),
mavenBundle("org.apache.httpcomponents", "httpclient-osgi", "4.1.2"),
- mavenBundle("org.apache.sling", "org.apache.sling.discovery.commons", "1.0.12"),
// SLING-5560: delaying start of the sling.event bundle to
// ensure the parameter 'startup.delay' is properly set to 1sec
@@ -212,7 +283,7 @@ public abstract class AbstractJobHandlin
// ignore
}
}
-
+
public void setup() throws IOException {
// set load delay to 3 sec
final org.osgi.service.cm.Configuration c2 = this.configAdmin.getConfiguration("org.apache.sling.event.impl.jobs.jcr.PersistenceHandler", null);
@@ -221,7 +292,7 @@ public abstract class AbstractJobHandlin
// and startup.delay to 1sec - otherwise default of 30sec breaks tests!
p2.put(JobManagerConfiguration.PROPERTY_STARTUP_DELAY, 1L);
c2.update(p2);
-
+
// SLING-5560 : since the above (re)config is now applied, we're safe
// to go ahead and start the sling.event bundle.
// this time, the JobManagerConfiguration will be activated