And if 'unassigned' means that the job isn't necessarily local, then I'm lost. 
I can't see how my job will be run.

Rob

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

> 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