Wildfly启用JTS失败:缺失TransactionSynchronizationRegistry等必需服务
解决Wildfly启用JTS后部署war包缺失事务服务的问题
我帮你梳理几个关键的排查和解决步骤,这个报错的核心是JTS对应的事务管理器、同步注册服务没有被正确加载,导致你的应用依赖找不到:
1. 确认JTS扩展与子系统已正确启用
首先得确保Wildfly的JTS扩展和事务子系统配置到位:
- 启动Wildfly的命令行工具(
jboss-cli.sh/jboss-cli.bat),连接服务器后执行以下命令:# 添加JTS扩展 /extension=org.jboss.as.jts:add() # 开启事务子系统的JTS模式 /subsystem=transactions:write-attribute(name=jts, value=true) - 执行完后重启Wildfly,让配置生效。
2. 检查配置文件中的事务子系统细节
打开你的服务器配置文件(比如standalone.xml或domain.xml),找到事务子系统节点:
- 确认核心环境配置开启了JTS:
<core-environment jts="true"> - 确保事务管理器和同步注册服务的配置没有被注释,示例如下:
<subsystem xmlns="urn:jboss:domain:transactions:5.0"> <core-environment jts="true" node-identifier="1"> <process-id> <uuid/> </process-id> </core-environment> <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> <transaction-manager socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> <transaction-synchronization-registry/> </subsystem>
3. 校验应用的事务依赖配置
检查my-app.war中的相关配置文件,确保和Wildfly的JTS模式兼容:
- 在
persistence.xml中,持久化单元的事务类型要设置为JTA:<persistence-unit name="YourPUName" transaction-type="JTA"> <!-- 其他配置 --> </persistence-unit> - 如果应用中有自定义的事务拦截器或显式依赖事务服务的配置,暂时注释掉,先测试基础配置是否生效。
4. 查看Wildfly启动日志确认服务加载
重启Wildfly后,查看启动日志,确认是否有类似以下的日志输出,这代表事务服务已正常启动:
JBAS010210: Bound transaction manager [jboss.txn.TransactionManager] JBAS010211: Bound transaction synchronization registry [jboss.txn.TransactionSynchronizationRegistry]
如果没有这些日志,说明JTS扩展未正确加载,需要重新执行步骤1的CLI命令。
你的报错信息如下:
2018-04-26 19:57:48,429 ERROR [org.jboss.as.server] (ServerService Thread Pool -- 35) WFLYSRV0021: 部署"my-app.war"已回滚,失败信息为:{ "WFLYCTL0412: 未安装必需服务:" => [ "jboss.txn.TransactionSynchronizationRegistry", "jboss.txn.TransactionManager" ], "WFLYCTL0180: 存在缺失/不可用依赖的服务" => ["jboss.deployment.unit."my-app.w..."] }
内容的提问来源于stack exchange,提问作者ethanxyz_0
相关产品推荐
相关产品推荐

