gpt4 book ai didi

java - 使用 Jax-RS 和 CDI 安排任务

转载 作者:行者123 更新时间:2023-12-01 17:37:58 25 4
gpt4 key购买 nike

我尝试了解如何使用 Jax-RS 和 CDI 管理项目中的计划任务。借助 Spring,我可以使用 ThreadPoolTask​​Scheduler 或 @Scheduled 注释轻松实现这一目标,但我尝试复制这两种方式,但没有成功。

首先,我使用的是 Wildfly 14,这似乎会导致一些问题,因为我尝试使用 @Resource 注入(inject) ManagedScheduledExecutorService TimerService 但 Wildfly 抛出缺少依赖项的异常(但管理指南没有帮助我解决这个问题)。

我尝试使用像这样的单例对象,而不是注入(inject)资源:

@Singleton
public class CacheManager {
private final static Logger log = LogManager.getLogger();

public CacheManager() {
log.error("######## Init" + LocalTime.now());
}

@Schedule(hour = "*", minute = "*", second = "*/1")
private void timeout() {
log.error("######## " + LocalTime.now());
}

}

但该方法从未被调用。

所以我不明白我错过了什么。也许我错误地配置了项目,所以这是我的 pom.xml 依赖项:

    <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>

<!-- Import the JAX-RS API, we use provided scope as the API is included in JBoss WildFly -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.10.0.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.12.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.0.12.Final</version>
<scope>provided</scope>
</dependency>

<!-- Import the CDI API, we use provided scope as the API is included in JBoss WildFly -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>

<!-- Import the JSF API, we use provided scope as the API is included in JBoss WildFly -->
<dependency>
<groupId>org.jboss.spec.javax.faces</groupId>
<artifactId>jboss-jsf-api_2.2_spec</artifactId>
<version>2.2.14</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>

<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

这是我的 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" bean-discovery-mode="annotated">
</beans>

我使用的是 Java 8。

编辑:CacheManager 在 JAX-WS 应用程序中实例化

@ApplicationScoped
@ApplicationPath("/rest")
public class JaxRsActivator extends Application {

private static final Logger logger = LogManager.getLogger();

private Set<Object> singletons = new HashSet<Object>();
private HashSet<Class<?>> classes = new HashSet<Class<?>>();

public JaxRsActivator() {
singletons.add(new CorsFilter());
singletons.add(new CacheManager());
}

@Override
public Set<Object> getSingletons() {
return singletons;
}

@Override
public HashSet<Class<?>> getClasses(){
return classes;
}
}

最佳答案

我找到了解决方案:@Singleton 必须是 javax.ejb.Singleton 而不是 javax.inject.Singleton。

关于java - 使用 Jax-RS 和 CDI 安排任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com