缺少 MBean 类型:javax.cache:type=CacheStatistics 在 wildfly 中使用 infinispan 作为 2LC

Missing MBean Type: javax.cache:type=CacheStatistics while using infinispan as 2LC in wildfly

我们使用 wildfly 18.0.1 作为应用服务器。由于不推荐使用 hibernate-ehcache 模块,我们改为使用 hibernate-jcache 模块。 Wildfly 默认使用 infinispan 作为 jcache 实现。 我们还使用 java 旋律来监控我们的应用程序。 Melody 立即找到并显示了 ehcaches 统计信息。但它没有找到 infinispan 统计信息。 infinispan缓存配置在standalone.xml:

...
<cache-container name="hibernate" default-cache="entity" module="org.infinispan.hibernate-cache" statistics-enabled="true">
    <local-cache name="timestamps"/>
    <local-cache name="entity" statistics-enabled="true">
        <object-memory size="10000"/>
        <expiration lifespan="300000"/>
    </local-cache>
</cache-container>
...

persistence.xml

<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="entityManager">
        <jta-data-source>java:jboss/datasources/...</jta-data-source>
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>

            <property name="hibernate.cache.use_second_level_cache" value="true" />
            <property name="hibernate.cache.use_query_cache" value="true" />
            <property name="hibernate.generate_statistics" value="true" />
            <property name="hibernate.cache.infinispan.statistics" value="true" />
        </properties>

    </persistence-unit>

</persistence>

因此启用了统计信息。因此,在 CacheManager 的 javadoc 之后,统计对象必须使用唯一且具有以下类型和属性的 ObjectName 进行注册:

类型:javax.cache:type=CacheStatistics

那不会发生。 Java melody 正在寻找这些对象,但找不到任何对象。因此它无法显示有关缓存的任何信息。

显示 infinispan MBean 的 VisualVM 屏幕截图。

只是想知道我是否在监督某些事情,或者这是否应该由 wildfly 或 infinispan 处理? 任何帮助表示赞赏。 谢谢

如您在屏幕截图中所见,infinispan 已将 MBean 注册到对象名称 org.wildfly.clustering.infinispan:type=Cache 下,而不是对象名称 javax.cache:type=CacheStatistics.

所以javamelody找不到javax.cache统计是正常的。

如果我理解正确,wildfly 使用 infinispan 作为默认 2LC 提供程序而不是 jcache 提供程序。它使用模块 'infinispan-hibernate' 而不是 'infinispan-jcache'。这就是为什么它不像 jcache-provider 那样工作。它不是那样使用的。 @evernat 评论将 infinispan 配置为 jcache-provider 引导我找到解决方案。