1

我正在尝试将我们的应用程序使用的 tomcat Web 容器从版本 8.5 升级到 9.x。我们在启用了 JMX 的上下文 xml 文件上定义了 JDBC 资源。当应用程序启动时,由于java.time.Duration没有对应的 OpenType,在向 MBeanServer 注册 bean 时会引发异常。

发生这种情况的org.apache.tomcat.dbcp.dbcp2.BasicDataSource方法具有返回类型值的方法java.time.Duration

例外:

Caused by: java.lang.IllegalArgumentException: Method org.apache.tomcat.dbcp.dbcp2.DataSourceMXBean.getMaxConnDuration has parameter or return type that cannot be translated into an OpenType
...
...
Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: java.time.Duration
...
...
Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: java.time.temporal.TemporalUnit
...
...
Caused by: javax.management.openmbean.OpenDataException: Recursive data structure, including java.time.Duration

https://docs.oracle.com/en/java/javase/12/docs/api/java.management/javax/management/openmbean/OpenType.html

https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.html

有解决方法吗?

谢谢!

4

1 回答 1

2

我们也在这个问题上苦苦挣扎。偶然发现了另一个类似的问题,有人提到了一个 PR,它引导我们查看 tomcat 项目和变更日志中的提交。如果您查看Tomcat 9.x 的更改日志,您会发现 9.0.59 的开发/夜间版本(在撰写本文时):

从 9.0.57 中应用的 DBCP 恢复 JavaDoc 修复的樱桃选择,该修复通过使用 MXBeans 不支持的类型破坏了 DataSourceMXBean。(市场)

如果您仍在为此苦苦挣扎,您可以尝试最新的开发/夜间构建(尚未在 maven Central 中发布)或使用我们使用的版本 9.0.56,它应该可以解决此问题。

于 2022-02-23T06:09:31.757 回答