TomEE部署SymmetricDS War包时Slave节点注册报错求助
我之前碰到过类似的SymmetricDS和OkHttp集成问题,这个错误的核心原因很清晰:OkHttp的OkHttpClient$Builder.sslSocketFactory方法要求传入非空的sslSocketFactory参数,但实际传入了null。结合你给出的配置和部署场景,下面是可能的原因和对应的解决办法:
可能的原因及解决方案
1. 未明确禁用HTTPS配置
你的symmetric-server.properties里把https.enable=false注释掉了,虽然默认值可能是false,但某些SymmetricDS版本或TomEE的类加载机制可能会导致配置读取异常,触发HTTPS相关的客户端初始化逻辑。
- 解决办法:把注释掉的
https.enable=false取消注释,明确禁用HTTPS:https.enable=false
2. SymmetricDS与OkHttp版本冲突
TomEE服务器自带的OkHttp版本可能和SymmetricDS依赖的OkHttp版本不兼容。比如SymmetricDS 4.x通常依赖OkHttp 3.x的特定版本,如果TomEE提供的是更高版本的OkHttp,就会出现这种参数非空校验的问题(新版本OkHttp对参数非空的校验更严格)。
- 解决办法:
- 检查SymmetricDS官方文档,确认对应版本依赖的OkHttp版本;
- 在你的War包中排除TomEE自带的OkHttp依赖,确保使用SymmetricDS兼容的版本(可以通过修改Maven/Gradle的依赖排除配置实现)。
3. 系统属性或环境变量强制启用SSL
可能存在你没注意到的系统属性或环境变量开启了HTTPS,比如设置了symmetric.https.enable=true,导致即使配置文件里禁用了HTTPS,SymmetricDS还是尝试初始化SSL客户端。
- 解决办法:
- 检查TomEE的启动脚本或系统环境变量,移除任何强制启用SSL的属性;
- 启动TomEE时可以添加参数
-Dsymmetric.https.enable=false来强制覆盖配置。
4. TomEE全局SSL配置影响
如果你的TomEE服务器配置了全局SSL(比如在server.xml里设置了HTTPS连接器),可能会让SymmetricDS的客户端请求默认使用SSL连接,但你没有为SymmetricDS配置对应的SSL证书和密钥,导致sslSocketFactory无法初始化,传入null。
- 解决办法:
- 确保SymmetricDS的
registration.url和sync.url使用的是http://而不是https://(你的配置里已经是http,这一步可以确认下); - 如果不需要全局SSL,可以暂时关闭TomEE的HTTPS连接器测试。
- 确保SymmetricDS的
验证步骤
修改配置后,按以下步骤验证:
- 停止主节点和从节点的War包;
- 清理TomEE的
work和temp目录,避免缓存的配置影响; - 重新启动主节点,确认主节点正常运行;
- 启动从节点,观察日志是否还出现该错误。
内容的提问来源于stack exchange,提问作者Yesid

