首页 > 解决方案 > Jboss EAP 6 到 EAP 7 升级 - jar 部署失败

问题描述

我的项目在 JBOSS EAP 6 上运行。这个 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: Failed services\" => {\"jboss.deployment.unit.\"YY.war\".WeldStartService\" => \"无法启动服务原因:java.lang.IllegalArgumentException: WFLYWELD0037 : 将持久性单元注入 CDI 托管 bean 时出错。在部署 YY.war 中找不到名为 '' 的持久性单元,用于注入点保护 javax.persistence.EntityManager wbr.investments.XX.dao.DaoRoot.emOptions\"}}"

标签: java

解决方案


CDI 发生了相当大的变化。在 EAP 7 中,CDI 是 1.2 版,在 EAP 6 中是 1.0。

错误消息表明您正在尝试访问具有空名称的持久性单元。我想这可能是由于使用了这样的东西:

public class DaoRoot {
  @Inject
  private EntityManager emOptions;
}

CDI 很可能会生成未初始化的 EntityManager 并失败并显示您在日志中找到的错误消息。

尝试使用注入您的实体管理器

@PersistenceContext(unitName = "...")
private EntityManager emOptions

如果要使用 plain @Inject,则必须编写生产者方法。

public class EnitityManagerFactory {

  @PersistenceContext(unitName = "...")
  private EntityManager em;

  @Produces
  public EntityManger createEntityManager() {
    return em;
  }
}

在这些情况下,EAP 6 似乎更加宽容,而 EAP 7 则非常严格地遵循规范。


推荐阅读