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