首页 > 解决方案 > 从 GlassFish 3 迁移到 Payara 4 - 面临 CDI 启用问题

问题描述

我正在研究将应用程序从 GlassFish 3 迁移到 Payara 4 的 POC。我已经在 Payara 中完成了所需的配置设置,例如 jdbc 连接池、队列等。应用程序中有 EJB 组件,但它会构建到一个 war 文件中,并且在 GlassFish 3 服务器上部署和运行。但是,当我尝试在 Payara 4 上部署时,CDI 错误显示为:

部署期间发生错误:加载应用程序时出现异常:CDI 定义失败:HV000151:覆盖另一个方法的方法不得更改参数约束配置....

错误 StackTrace: 原因:javax.validation.ConstraintDeclarationException:HV000151:覆盖另一个方法的方法不得更改参数约束配置,... at org.hibernate.validator.internal.metadata.aggregated.rule.OverridingMethodMustNotAlterParameterConstraints.apply(OverridingMethodMustNotAlterParameterConstraints .java:24) 在 org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.assertCorrectnessOfConfiguration(ExecutableMetaData.java:460) 在 org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.build(ExecutableMetaData .java:378) 在 org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataImpl$BuilderDelegate.build(BeanMetaDataImpl.java:677)

由于 CDI 启用是 Payara 中添加的新功能,因此在将应用程序从较低版本的 GF 迁移到 Payara 时必须进行一些配置更改,这似乎很难理解。那么有没有办法在Payara上实际部署这个war文件呢?

标签: jakarta-eeejbcdioverridingpayara

解决方案


尝试在禁用隐式 CDI 的情况下部署 WAR

  • 在管理控制台中,在部署应用程序时取消选中隐式 CDI选项
  • 从控制台部署时,添加属性implicitCdiEnabled=false,例如asadmin deploy --properties=implicitCdiEnabled=false myapp.war

如果您从 IDE 进行部署或不想在每次部署时禁用隐式 CDI,您可以尝试将beans.xml文件添加到应用程序的 WEB-INF 文件夹中,并将配置设置bean-discovery-modenone,请参阅:https://docs.oracle。 com/javaee/7/tutorial/cdi-adv001.htm

说明:在 Payara 4 和 Java EE 7 中,有一个称为隐式 bean 发现的新特性。这意味着如果 JAR/WAR 文件不包含该beans.xml文件,则某些类会自动转换为 CDI bean。如果您的应用程序不使用 CDI 或使用不与 CDI 一起使用的库,这有时会导致麻烦。


推荐阅读