A little bit more… I understand what 'unassigned' means now - it means I'm not 
giving the job a queue, which I think is ok.

So, assuming 'assigned' and 'unassigned' jobs are local, then I think the 
variable JobManagerConfiguration.localJobsPath is wrong since it only has 
/var/eventing/jobs/assigned/... and there needs to be one for unassigned too.

and so the method:
public boolean isLocalJob(final String jobPath) {
        return jobPath.startsWith(this.localJobsPathWithSlash);
    }

can then evaluate to 'true' when the path has either 'assigned' or 
'unassigned'..

Rob


On Oct 26, 2013, at 4:19 PM, Robert A. Decker wrote:

> 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]
> 
> 

Reply via email to