Hello,

I'm trying to use the Job Module [1] for my own needs.
I know some of its APIs are marked as unstable, but well I wanted to give
it a try.

I'm on a XWiki 4.5.2 instance currently.

So I created some dummy interface:

@Role
public interface ILoadingJob extends Job
{
}

A Job implementation:

@Component
@Named(LoadingJob.JOBTYPE)
public class LoadingJob extends AbstractJob<DefaultRequest> implements
ILoadingJob, Initializable
{
    public static final String JOBTYPE = "mailarchivejob";

    // ...
}

In debug mode, I run the following:

this.componentManager.getComponentDescriptorList(org.xwiki.job.Job.class)

It returns:

[implementation = [org.xwiki.contrib.mailarchive.internal.LoadingJob],
instantiation = [PER_LOOKUP], implementation =
[org.xwiki.extension.job.internal.UpgradePlanJob], ... ]

So it seems OK.

I have the following code to create and execute my Job:

        DefaultRequest request = new DefaultRequest();
        request.setId("test");
        request.setInteractive(false);
        // ... other properties set
        LoadingJob job = (LoadingJob)
jobManager.executeJob("mailarchivejob", request);

But this code fails with following stack trace:

org.xwiki.job.JobException: Failed to lookup any Job for role hint
[mailarchivejob]
        at
org.xwiki.job.internal.DefaultJobManager.createJob(DefaultJobManager.java:185)
        at
org.xwiki.job.internal.DefaultJobManager.addJob(DefaultJobManager.java:208)
        at
org.xwiki.job.internal.DefaultJobManager.executeJob(DefaultJobManager.java:194)
        at
org.xwiki.contrib.mailarchive.internal.MailArchiveScriptService.createLoadingJob(MailArchiveScriptService.java:112)
        at
org.xwiki.contrib.mailarchive.internal.MailArchiveScriptService.load(MailArchiveScriptService.java:94)
[...]
Caused by: org.xwiki.component.manager.ComponentLookupException: Can't find
descriptor for the component [role = [interface org.xwiki.job.Job] hint =
[mailarchivejob]]
        at
org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:355)
        at
org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:161)
        at
org.xwiki.job.internal.DefaultJobManager.createJob(DefaultJobManager.java:183)
[...]

I also tried to manually register my custom Job component, in the
initialize() of a side component (I checked that this code got executed
previously to job creation), but with no different result:

// Register custom job

this.componentManager.registerComponent(this.componentManager.getComponentDescriptor(Job.class,
                "mailarchivejob"));

Do you see something wrong in my approach ?

Thanks,
Jeremie
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to