我正在研究将应用程序从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文件?
答案 0 :(得分:0)
尝试在禁用隐式CDI的情况下部署WAR
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一起使用的库,这有时会导致麻烦。