返回java.time.*的Tomcat 9.x DBCP基本数据源方法无法映射到JMX OpenType



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

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

例外:

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

有解决办法吗?

谢谢!

我们也遇到了这个问题。偶然发现了另一个类似的问题,有人提到了一个PR,它引导我们在tomcat项目和变更日志中查看提交。如果您查看Tomcat9.x的变更日志,您可以发现对于9.0.59:的dev/mnight发行版(在撰写本文时(

从9.0.57中应用的DBCP中恢复JavaDoc修复程序的cherry pick,该修复程序使用MXBeans不支持的类型破坏了DataSourceMXBean。(markt(

如果您仍在努力解决这个问题,您可以尝试最新的dev/nnight构建(尚未在maven central中发布(或使用我们使用的9.0.56版本,它应该可以解决这个问题。

相关内容

最新更新