Wildfly TimerService 不满足的依赖关系
Wildfly TimerService unsatisfied dependencies
我在 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 地址。
TimerService
是一个 JEE 应用程序服务器资源。它不会自动供 CDI 使用 @Inject
-ed。获取方式(参考JEE tutorial)是:
@Resource
TimerService timerService;
这可能适合您的目的;如果您真的希望它作为 CDI bean 公开,幸运的是它是微不足道的。只需将 @Resource
字段也设为生产者 - 您可以为此设置一个单独的 class:
@ApplicationScoped
public class TimerServiceProducer {
@Resource
@Produces
TimerService timerService;
}
我不确定 @ApplicationScoped
是否绝对必要,但也无妨。
我在 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 地址。
TimerService
是一个 JEE 应用程序服务器资源。它不会自动供 CDI 使用 @Inject
-ed。获取方式(参考JEE tutorial)是:
@Resource
TimerService timerService;
这可能适合您的目的;如果您真的希望它作为 CDI bean 公开,幸运的是它是微不足道的。只需将 @Resource
字段也设为生产者 - 您可以为此设置一个单独的 class:
@ApplicationScoped
public class TimerServiceProducer {
@Resource
@Produces
TimerService timerService;
}
我不确定 @ApplicationScoped
是否绝对必要,但也无妨。