Wildfly TimerService不满足依赖关系

时间:2017-05-28 14:56:48

标签: java java-ee jboss wildfly java-ee-7

我在java中配置计时器时遇到了一些麻烦。确切地说 - 我在尝试部署peripherial.war时收到以下错误。

{"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"peripherial.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"peripherial.war\".WeldStartService: Failed to start service
    Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type TimerService with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 2 of [BackedAnnotatedConstructor] @Inject public io.github.tastypenguinbacon.peripherial.heartbeat.service.PassiveHeartbeatService(Cache, TimerService)
  at io.github.tastypenguinbacon.peripherial.heartbeat.service.PassiveHeartbeatService.<init>(PassiveHeartbeatService.java:0)
"},"WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.unit.\"peripherial.war\".WeldStartService"]}

standalone.xml文件似乎没问题。负责配置计时器服务的部分(至少我期待它)似乎也很好:

<timer-service thread-pool-name="default" default-data-store="default-file-store">
  <data-stores>
    <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
  </data-stores>
</timer-service>

我正在通过@Inject实例化TimerService,使用基于构造函数的注入,如果它在某种程度上相关。 我正在使用wildfly-11.0.0.Alpha。默认standalone.xml文件中唯一更改的是能够访问服务器的IP地址。

1 个答案:

答案 0 :(得分:2)

TimerService是JEE应用程序服务器资源。 CDI无法自动获取@Inject - ed。获得它的方法(参见例如JEE tutorial)是:

@Resource
TimerService timerService;

这可能适合您的目的;如果你真的希望它作为CDI bean公开,那么幸运的是它是微不足道的。只需将@Resource字段设为制作人 - 您可以为其创建一个单独的类:

@ApplicationScoped
public class TimerServiceProducer {
    @Resource
    @Produces
    TimerService timerService;
}

我不确定@ApplicationScoped是否绝对必要,但它也不会受到伤害。