我的项目在JBOSS EAP6上运行。这个XX.war部署在Jboss EAP6中,但现在我们正在升级到EAP7。当我在Jboss EAP7本地部署war文件时,我得到了这个错误。
项目结构将为1.XX.jar 2.YY.war
XX.jar首先被部署,因为YY.war依赖于XX.jar,但由于某些原因,在JBOSS 7上,YY.war部署失败并低于错误。
"{\"WFLYCTL0080:失败的服务\“CDI {\"jboss.deployment.unit.\"YY.war\".WeldStartService\”=> \“无法启动服务,原因是: java.lang.IllegalArgumentException: WFLYWELD0037:将持久性单元注入CDI托管bean时出错。在注入点保护的javax.persistence.EntityManager wbr.investments.XX.dao.DaoRoot.emOptions\“}}的部署YY.war中找不到名为”“的持久性单元”“
发布于 2019-05-14 02:48:48
关于CDI有相当多的变化。在EAP 7中,CDI是1.2版,在EAP 6中是1.0版。
该错误消息指示您正在尝试访问一个名称为空的持久性单元。我猜这可能是因为使用了下面这样的东西:
public class DaoRoot {
@Inject
private EntityManager emOptions;
}CDI很可能会产生一个未初始化的EntityManager,并失败,并显示您在日志中找到的错误消息。
尝试使用以下命令注入实体管理器
@PersistenceContext(unitName = "...")
private EntityManager emOptions如果你想使用普通的@Inject,你必须编写一个生产者方法。
public class EnitityManagerFactory {
@PersistenceContext(unitName = "...")
private EntityManager em;
@Produces
public EntityManger createEntityManager() {
return em;
}
}在这些情况下,EAP 6似乎更加宽宏大量,而EAP 7则严格遵循规范。
https://stackoverflow.com/questions/56117732
复制相似问题