I'm trying to figure out why my jobs aren't being consumed. Here's one thing I
found.
In JobManagerImpl.java, handleEvent method:
public void handleEvent(final Event event) {
if ( SlingConstants.TOPIC_RESOURCE_ADDED.equals(event.getTopic()) ) {
final String path = (String)
event.getProperty(SlingConstants.PROPERTY_PATH);
final String rt = (String)
event.getProperty(SlingConstants.PROPERTY_RESOURCE_TYPE);
if ( (rt == null || ResourceHelper.RESOURCE_TYPE_JOB.equals(rt)) &&
this.configuration.isLocalJob(path) ) {
synchronized ( this.directlyAddedPaths ) {
if ( directlyAddedPaths.remove(path) ) {
return;
}
}
this.backgroundLoader.loadJob(path);
}
this.jobScheduler.handleEvent(event);
} else if ( Utility.TOPIC_STOP.equals(event.getTopic()) ) {
this.configuration.isLocalJob(path) evaluates as false and so my job is not
added to the backgroundLoader, but instead gets sent to the scheduler. But
because this is not a scheduled job type it isn't added to the queue by the
jobScheduler.
if ( path != null &&
path.startsWith(this.config.getScheduledJobsPathWithSlash())
&& (resourceType == null ||
ResourceHelper.RESOURCE_TYPE_SCHEDULED_JOB.equals(resourceType))) {
For the JobManagerConfiguration.isLocalJob method:
public boolean isLocalJob(final String jobPath) {
return jobPath.startsWith(this.localJobsPathWithSlash);
}
my
jobPath=/var/eventing/jobs/unassigned/com.astracorp.core.datastore.gc.requested/2013/10/26/16/16/com.astracorp.core.datastore.gc.requested_622b9d5e-e949-490e-88b6-71e6498802a7_32
and
JobManagerConfiguration.localJobsPathWithSlash=/var/eventing/jobs/assigned/622b9d5e-e949-490e-88b6-71e6498802a7/
Any ideas? What's the difference between /var/eventing/jobs/unassigned and
/var/eventing/jobs/assigned?
Rob
On Oct 25, 2013, at 9:24 AM, Carsten Ziegeler wrote:
> Hi,
>
> the JobConsumerManager is not public api and therefore not available to other
> bundles.
> Looking at your example from the first post, it looks ok to me - it should
> work without a specific queue configuration as the main queue is always
> available.
> However your job consumer implementation shouldn't return null but a result.
>
> Carsten
>
>
> 2013/10/25 Robert A. Decker <[email protected]>
> I think I'm having a maven dependency problem, but I'm just not sure...
>
> Here's what my org.apache.sling.event bundle looks like:
>
>
>
>
> Here's how I declare the dependency:
> <dependency>
> <groupId>org.apache.sling</groupId>
> <artifactId>org.apache.sling.event</artifactId>
> <version>3.3.1-SNAPSHOT</version>
> <scope>provided</scope>
> </dependency>
>
>
>
> As an experiment/debugging, when I try to call the jobConsumerManager service
> directly like:
>
> @Reference
> private JobConsumerManager jobConsumerManager = null;
>
> LOGGER.debug("executor:" +
> jobConsumerManager.getExecutor(DatastoreGCService.TOPIC_DATASTORE_GC_REQUESTED));
> LOGGER.debug("topics:" + jobConsumerManager.getTopics());
>
> I get class not found errors:
>
> 25│Caused by: java.lang.ClassNotFoundException:
> org.apache.sling.event.impl.jobs.JobConsumerManager not found by astra-core
> [103] │te
> d │ at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1500)
> ~[na:na].in
> │
> 25│ at
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
> ~[na:na].:1
> │
> 25│ at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1923)
> ~[na:na].ch
> │
> 25│ at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> ~[na:1.7.0_40].:
> │
> 25│ ... 34 common frames omitted...
>
> │
> 25│25.10.2013 00:27:11.102 *ERROR* [FelixFrameworkWiring] astra-core
> [com.astracorp.engine.commons.schedulers.DatastorePeriodicGC] Cannot register
> Component (java.lang.NoClassDefFoundError: org/ap│
> 25│ache/sling/event/impl/jobs/JobConsumerManager)
>
> │
> 25│java.lang.NoClassDefFoundError:
> org/apache/sling/event/impl/jobs/JobConsumerManager
>
> │
> 25│ at java.lang.Class.getDeclaredMethods0(Native Method)
> ~[na:1.7.0_40].cr
> │
> 25│ at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
> ~[na:1.7.0_40].ac
> │ch
> e.│ at java.lang.Class.getDeclaredMethods(Class.java:1845)
> ~[na:1.7.0_40].nd
> │ef
> au│ at
> org.apache.felix.scr.impl.helper.BindMethod.getServiceObjectAssignableMethod(BindMethod.java:389)
> ~[org.apache.felix.scr-1.6.0.jar:na].Ba
> │
>
>
>
> I've tried changing the scope to compile, I've tried moving back version
> numbers, and nothing seems to work.
>
> Any ideas?
>
>
> Rob
>
> On Oct 24, 2013, at 7:09 PM, Robert A. Decker wrote:
>
>> Hi,
>>
>> I'm trying to implement the new job system using a recent sling build.
>> org.apache.sling.event is at 3.3.1-SNAPSHOT. (updated this morning)
>>
>> What I'm doing is very similar to the example at the sling website. And I
>> can see my events being created under the /var/eventing/jobs/unassigned
>> node, so creating the events seems to be working, but my consumer just isn't
>> consuming them.
>>
>> Here's how I create them:
>>
>> jobManager.addJob(DatastoreGCService.TOPIC_DATASTORE_GC_REQUESTED,
>> DatastoreGCService.DATASTORE_GC_REQUESTED_JOB_PROPERTIES);
>>
>> TOPIC_DATASTORE_GC_REQUESTED = "com/astracorp/core/datastore/gc/requested";
>> DATASTORE_GC_REQUESTED_JOB_PROPERTIES = new HashMap<String,Object>();
>>
>>
>> Here's what my consumer looks like:
>>
>> @Component(enabled = true, immediate = true, metatype = true)
>> @Service(value = JobConsumer.class)
>> @Property(name = JobConsumer.PROPERTY_TOPICS, value =
>> {DatastoreGCService.TOPIC_DATASTORE_GC_REQUESTED})
>> public class DatastoreGCHandler implements JobConsumer {
>> public static final Logger LOGGER =
>> LoggerFactory.getLogger(DatastoreGCHandler.class);
>>
>> @Override
>> public JobResult process(final Job job) {
>> LOGGER.debug("process job called");
>> return null;
>> }
>> }
>>
>>
>> The consumer is listed in the services as:
>> [org.apache.sling.event.jobs.consumer.JobConsumer]
>> component.id 136
>> component.name com.astracorp.engine.commons.handlers.DatastoreGCHandler
>> job.topics com/astracorp/core/datastore/gc/requested
>> Service PID com.astracorp.engine.commons.handlers.DatastoreGCHandler
>>
>>
>>
>> Everything looks fine to me but it's just not consuming. Am I missing
>> something? I notice that some components are not running, but I'm not sure
>> which is required.
>>
>> org.apache.sling.event.impl.jobs.deprecated.JobStatusProviderImpl :
>> registered
>> org.apache.sling.event.impl.jobs.tasks.HistoryCleanUpTask : registered
>> org.apache.sling.event.jobs.QueueConfiguration : unsatisfied (probably
>> needs a config)
>>
>>
>> Rob
>>
>>
>
>
>
>
> --
> Carsten Ziegeler
> [email protected]