【问题标题】:Jboss EAP 6 to EAP 7 upgrade - jar deployement failedJboss EAP 6 到 EAP 7 升级 - jar 部署失败
【发布时间】:2019-05-13 18:08:36
【问题描述】:

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

【问题讨论】:

  • 有一些与 Persistence 相关的配置,我想,你在那里遗漏了一些东西。

标签: java


【解决方案1】:

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 则非常严格地遵循规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2016-03-04
    • 2017-05-11
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多