从GlassFish 3迁移到Payara 4 - 面临CDI启用问题

时间:2018-05-04 06:20:11

标签: java-ee ejb cdi method-overriding payara

我正在研究将应用程序从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)     at org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData $ Builder.assertCorrectnessOfConfiguration(ExecutableMetaData.java:460)     at 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文件?

1 个答案:

答案 0 :(得分:0)

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

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

如果您要从IDE部署或不想在每个部署上禁用隐式CDI,您可以尝试将beans.xml文件添加到应用程序的WEB-INF文件夹中将bean-discovery-mode设置为none的配置,请参阅:P0609: "Attributes for Structured Bindings"

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