jakarta-ee - 从 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文件呢?
解决方案
尝试在禁用隐式 CDI 的情况下部署 WAR
- 在管理控制台中,在部署应用程序时取消选中隐式 CDI选项
- 从控制台部署时,添加属性
implicitCdiEnabled=false
,例如asadmin deploy --properties=implicitCdiEnabled=false myapp.war
如果您从 IDE 进行部署或不想在每次部署时禁用隐式 CDI,您可以尝试将beans.xml
文件添加到应用程序的 WEB-INF 文件夹中,并将配置设置bean-discovery-mode
为none
,请参阅:https://docs.oracle。 com/javaee/7/tutorial/cdi-adv001.htm
说明:在 Payara 4 和 Java EE 7 中,有一个称为隐式 bean 发现的新特性。这意味着如果 JAR/WAR 文件不包含该beans.xml
文件,则某些类会自动转换为 CDI bean。如果您的应用程序不使用 CDI 或使用不与 CDI 一起使用的库,这有时会导致麻烦。
推荐阅读
- java - 在方法 onBackPressed 中捕获 url
- node.js - Firebase 存储来存储图像并使用来自 firebase 函数的实时数据库中的 url
- python - TypeError: float() 参数必须是字符串或数字,而不是带有注释和 iterrows 的“元组”
- powershell - 在 PnP PowerShell 中创建 SPO 网站集时,租户管理员 url 应该是什么
- django - 如何使用 s3 作为存储在 django 中自动显示媒体文件?
- python - 删除 xpath 中的链接文本
- node.js - 如何为以下条件编写mongo的聚合函数
- javascript - 将数组格式化为 Javascript 中 Google Map API 格式的 Lat Lng 数组
- excel - 使用匹配的主题和开始时间从 Office365 活动中将与会者提取到 Excel 中
- php - 我想在日期之间过滤后从数据库中获取数据。我试过但没有找到数据