Wildfly 27中@Schedule/Weld失效,调度器无法运行求助
解决方案
1. 替换为Jakarta EE API依赖与注解
Wildfly 27基于Jakarta EE 10规范,原javax.ejb相关包已迁移至jakarta.ejb,需同步修改代码和依赖:
- 修改Java类中的导入语句:
// 替换所有javax.ejb开头的导入 import jakarta.ejb.AccessTimeout; import jakarta.ejb.EJB; import jakarta.ejb.Schedule; import jakarta.ejb.Singleton; - 更新pom.xml中的EJB扩展API依赖为Jakarta版本:
<dependency> <groupId>org.jboss.ejb3</groupId> <artifactId>jboss-ejb3-ext-api-jakarta</artifactId> <version>3.0.0.Final</version> <scope>provided</scope> </dependency>
2. 确保WAR包中EJB被正确扫描
Wildfly 27对WAR中EJB的扫描规则有所调整,需添加beans.xml启用CDI扫描以触发EJB容器处理:
在src/main/webapp/WEB-INF/下创建beans.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd" version="4.0" bean-discovery-mode="all"> </beans>
bean-discovery-mode="all"会确保所有EJB类被容器发现并初始化。
3. 更新Singleton部署配置
Wildfly 27对singleton-deployment.xml的命名空间进行了升级,修改配置内容为:
<?xml version="1.0" encoding="UTF-8"?> <singleton-deployment xmlns="urn:jboss:singleton-deployment:2.0"/>
确保文件放置在src/main/webapp/META-INF/目录下,打包后位于WAR根目录的META-INF文件夹中。
4. 验证Wildfly EJB子系统定时器配置
检查Wildfly的standalone.xml(或domain.xml)中EJB子系统的定时器服务是否正常启用:
找到<subsystem xmlns="urn:jboss:domain:ejb3:19.0">节点,确认包含以下配置:
<timer-service thread-pool-name="default"> <data-store path="timer-service-data" relative-to="jboss.server.data.dir"/> </timer-service>
默认情况下该配置是存在的,若缺失则手动添加。
5. 开启详细日志排查问题
将EJB相关日志级别调整为DEBUG,查看部署时的具体错误信息:
在standalone.xml的<subsystem xmlns="urn:jboss:domain:logging:8.0">节点中添加:
<logger category="org.jboss.as.ejb3"> <level name="DEBUG"/> </logger>
重启服务器后,查看日志中是否存在EJB加载失败、定时器注册失败的细节提示。
内容的提问来源于stack exchange,提问作者fatherazrael
相关产品推荐
相关产品推荐

