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