私は、依存関係注入のためにCDIを使用してWildfly 10.0.0で実行するJavaee7 Webアプリケーションを開発しており、Quartzでいくつかのジョブをスケジュールしたいと考えています。 これは、ジョブをスケジュールクラスです:CDIでQuartzを使用するためのカスタムCDIJobFactory
@Named
public class CdiJobFactory implements JobFactory {
@Inject
private BeanManager beanManager;
@Override
public Job newJob(TriggerFiredBundle bundle, Scheduler Scheduler) throws SchedulerException {
JobDetail jobDetail = bundle.getJobDetail();
Class<? extends Job> jobClazz = jobDetail.getJobClass();
Bean<?> bean = beanManager.getBeans(jobClazz).iterator().next();
CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
return (Job) beanManager.getReference(bean, jobClazz, ctx);
}
}
そして、これが仕事です::
@Singleton
@Startup
public class ScheduledJobsManager {
private Scheduler scheduler;
@Inject
private CdiJobFactory jobFactory;
@PostConstruct
public void postConstruct() {
JobDetail jobDetail = null;
CronTrigger trigger = null;
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.setJobFactory(jobFactory);
boolean scheduled = false;
jobDetail = JobBuilder.newJob(ImagesProcessJob.class)
.withIdentity("imageProcessJob", "mediaProxyJobs")
.build();
trigger = TriggerBuilder.newTrigger().withIdentity("imageProcessTrigger", "mediaProxyTriggers")
.withSchedule(CronScheduleBuilder.cronSchedule(imageProcessScheduleStr)).build();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
@PreDestroy
public void preDestroy() {
if (scheduler != null && scheduler.isStarted()) {
scheduler.shutdown(false);
}
}
}
これはクォーツにCDIを使用できるようにするカスタムJobFactoryある
@Named
public class ImagesProcessJob implements Job {
@Inject
private MyManager myManager;
public ImagesProcessJob() {}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
myManager.doTheJob();
} catch(Exception e) {
throw new JobExecutionException(e);
}
}
}
warファイルを展開しようとすると、このエラーが発生します。
16:03:19,524 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."imageproxy.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."imageproxy.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type CdiJobFactory with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private cat.xavisan.imaging.imageproxy.schedule.ScheduledJobsManager.jobFactory
at cat.xavisan.imaging.imageproxy.schedule.ScheduledJobsManager.jobFactory(ScheduledJobsManager.java:0)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
これは間違っている何が起こっているのかの任意のアイデアbeans.xmlの
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.2" bean-discovery-mode="annotated">
</beans>
の内容でしょうか?
'beans.xml'はどのように見えますか? DeltaSpikeは既にクォーツの統合を提供しています。http://deltaspike.apache.org/documentation/scheduler.html –
beans.xmlの内容を追加する質問を編集しました – Xavisan