TomEE类库加载顺序管理:Docker部署EJB应用相关问题咨询
问题分析与排查建议
嘿,我来帮你捋捋这个问题!先理清楚你的当前环境:
- 运行环境:Docker容器里的TomEE 1.7.4 + OpenJDK 7
- 应用状态:WAR包已部署,手动添加到TomEE
lib目录的JAR已被识别(之前的错误都解决了,这点挺好) - 当前拿到的日志片段:
INFO: PersistenceUnit(name=manager1, provider=org.hibernate.jpa.HibernatePersistenceProvider) - provider time 2214ms
Apr 25, 2018 5:35:21 PM org.apache.openejb.assembler.classic...
可惜日志没显示完整,但结合TomEE + Hibernate JPA的场景,我给你几个常见的排查方向,你可以一步步试:
1. 检查persistence.xml的配置完整性
针对你这个名为manager1的持久化单元,重点看这几点:
- 有没有正确配置
hibernate.dialect?要和你用的数据库对应,比如MySQL用org.hibernate.dialect.MySQL5Dialect,PostgreSQL用org.hibernate.dialect.PostgreSQLDialect,配错了很容易出问题 - 数据源配置是否匹配?TomEE里的数据源一般在
tomee.xml或者resources.xml里定义,要确保persistence.xml里的jta-data-source(或non-jta-data-source)和数据源名称完全一致 - 有没有漏加Hibernate核心依赖?虽然你已经加了JAR,但要确认
hibernate-core、hibernate-entitymanager这些核心包都在,而且版本要和TomEE 1.7.4兼容——TomEE 1.7.x适配Hibernate 4.x系列,别用太高版本,容易冲突
2. 一定要拿到完整的错误日志
你给的日志只到org.apache.openejb.assembler.classic就断了,后面肯定有具体报错信息(比如类找不到、数据源连接失败、配置解析错误)。你可以这么获取:
- 用Docker命令查容器日志:
docker logs <你的容器ID/名称>,翻找后面的报错堆栈 - 直接进容器看TomEE日志文件:到TomEE目录下的
logs文件夹,查看localhost.log或openejb.log,里面有完整错误详情
3. 排查类加载冲突问题
TomEE本身自带OpenJPA相关组件,如果你手动加的Hibernate JAR和TomEE内置JPA版本冲突,容易出加载异常:
- 先检查TomEE默认
lib目录里有没有openjpa-*.jar这类文件,如果有,把它们移走,避免和Hibernate抢类加载 - 确认你加的Hibernate版本和TomEE 1.7.4兼容,比如Hibernate 4.3.x就很稳妥,别用Hibernate 5.x,大概率会有兼容性问题
4. 验证数据源能否正常连接
如果是数据源相关问题,可以做个简单测试:
- 写个简单的EJB或Servlet,尝试获取数据源并执行一个简单查询(比如
select 1),看能否成功连接数据库 - 先排查网络:在Docker容器里ping数据库服务器,确认网络可达;再检查数据库端口是否开放、用户名密码是否正确
内容的提问来源于stack exchange,提问作者Zied Yaich
相关产品推荐
相关产品推荐

