在 ehcache 3.1.2 中启用 JMX 支持
Enabling JMX Support in ehcache 3.1.2
我正在使用 camel 2.18.1 和 camel-ehcache 组件构建一个简单的缓存。虽然缓存设置工作正常,但我发现很难使用 ehcache 3.1.2 注册 mbean(这是通过 camel 引入的)。
阅读文档 - 不清楚如何使用 3.x 启用支持,因为使用 ManagementService 注册 mbean 的标准方法在 API.
上不再可用
该文档与纯 ehcache 实现和 JSR-107 缓存实现有点混淆。
虽然 JSR-107 JCache 实现有打开 JMX 支持的选项,但连接 xml 配置和启动缓存看起来会在缓存启动时抛出异常:
Caused by: java.lang.IllegalArgumentException: Couldn't resolve Service org.ehcache.jsr107.config.Jsr107Service
我的xml配置参考如下:
关于如何为 ehcache 3.x 启用 JMX 支持以及需要哪些额外依赖项的任何指示?
<ehcache:config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:ehcache="http://www.ehcache.org/v3"
xmlns:jcache="http://www.ehcache.org/v3/jsr107"
xsi:schemaLocation="
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
<ehcache:service>
<jcache:defaults jsr-107-compliant-atomics="true" enable-management="true" enable-statistics="true">
<jcache:cache name="my-cache" template="myDefaultTemplate"/>
</jcache:defaults>
</ehcache:service>
<ehcache:persistence directory="/var/cache"/>
<ehcache:cache alias="cache-test">
<!--
OPTIONAL, defaults to no expiry
Entries to the Cache can be made to expire after a given time
-->
<ehcache:expiry>
<!--
time to idle, the maximum time for an entry to remain untouched
Entries to the Cache can be made to expire after a given time
other options are:
* <ttl>, time to live;
* <class>, for a custom Expiry implementation; or
* <none>, for no expiry
-->
<ehcache:tti unit="minutes">2</ehcache:tti>
</ehcache:expiry>
<!--
The maximal number of entries to be held in the Cache, prior to eviction starting
-->
<ehcache:heap unit="entries">200</ehcache:heap>
<!--
OPTIONAL
Any further elements in another namespace
-->
<jcache:mbeans enable-statistics="true" enable-management="true" />
</ehcache:cache>
<!--
OPTIONAL
A <cache-template> defines a named template that can be used be <cache> definitions in this same file
They have all the same property as the <cache> elements above
-->
<ehcache:cache-template name="myDefaultTemplate">
<ehcache:expiry>
<ehcache:none/>
</ehcache:expiry>
<!--
OPTIONAL
Any further elements in another namespace
-->
</ehcache:cache-template>
</ehcache:config>
这很可能意味着您的 CacheManager
未使用 JSR-107 注册。如果我这样做,它会完美地工作。你可以试试
public static void main(String[] args) throws Exception {
ClassLoader classLoader = CheckJmx.class.getClassLoader();
URI uri = classLoader.getResource("ehcache.xml").toURI();
CachingProvider cachingProvider = Caching.getCachingProvider();
try(CacheManager cm = ((CachingProvider) cachingProvider).getCacheManager(uri, classLoader)) {
Thread.sleep(60_000);
}
}
但是,如果您未通过 JSR-107 注册,则 Jsr107Service
不可用。但是添加此服务无论如何都无济于事。 JMX MBean 仅在通过 JSR-107 注册时可用。
所以最好的办法是更改 CacheManager
创建代码以使用与上面类似的内容。
我正在使用 camel 2.18.1 和 camel-ehcache 组件构建一个简单的缓存。虽然缓存设置工作正常,但我发现很难使用 ehcache 3.1.2 注册 mbean(这是通过 camel 引入的)。
阅读文档 - 不清楚如何使用 3.x 启用支持,因为使用 ManagementService 注册 mbean 的标准方法在 API.
上不再可用该文档与纯 ehcache 实现和 JSR-107 缓存实现有点混淆。
虽然 JSR-107 JCache 实现有打开 JMX 支持的选项,但连接 xml 配置和启动缓存看起来会在缓存启动时抛出异常:
Caused by: java.lang.IllegalArgumentException: Couldn't resolve Service org.ehcache.jsr107.config.Jsr107Service
我的xml配置参考如下: 关于如何为 ehcache 3.x 启用 JMX 支持以及需要哪些额外依赖项的任何指示?
<ehcache:config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:ehcache="http://www.ehcache.org/v3"
xmlns:jcache="http://www.ehcache.org/v3/jsr107"
xsi:schemaLocation="
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
<ehcache:service>
<jcache:defaults jsr-107-compliant-atomics="true" enable-management="true" enable-statistics="true">
<jcache:cache name="my-cache" template="myDefaultTemplate"/>
</jcache:defaults>
</ehcache:service>
<ehcache:persistence directory="/var/cache"/>
<ehcache:cache alias="cache-test">
<!--
OPTIONAL, defaults to no expiry
Entries to the Cache can be made to expire after a given time
-->
<ehcache:expiry>
<!--
time to idle, the maximum time for an entry to remain untouched
Entries to the Cache can be made to expire after a given time
other options are:
* <ttl>, time to live;
* <class>, for a custom Expiry implementation; or
* <none>, for no expiry
-->
<ehcache:tti unit="minutes">2</ehcache:tti>
</ehcache:expiry>
<!--
The maximal number of entries to be held in the Cache, prior to eviction starting
-->
<ehcache:heap unit="entries">200</ehcache:heap>
<!--
OPTIONAL
Any further elements in another namespace
-->
<jcache:mbeans enable-statistics="true" enable-management="true" />
</ehcache:cache>
<!--
OPTIONAL
A <cache-template> defines a named template that can be used be <cache> definitions in this same file
They have all the same property as the <cache> elements above
-->
<ehcache:cache-template name="myDefaultTemplate">
<ehcache:expiry>
<ehcache:none/>
</ehcache:expiry>
<!--
OPTIONAL
Any further elements in another namespace
-->
</ehcache:cache-template>
</ehcache:config>
这很可能意味着您的 CacheManager
未使用 JSR-107 注册。如果我这样做,它会完美地工作。你可以试试
public static void main(String[] args) throws Exception {
ClassLoader classLoader = CheckJmx.class.getClassLoader();
URI uri = classLoader.getResource("ehcache.xml").toURI();
CachingProvider cachingProvider = Caching.getCachingProvider();
try(CacheManager cm = ((CachingProvider) cachingProvider).getCacheManager(uri, classLoader)) {
Thread.sleep(60_000);
}
}
但是,如果您未通过 JSR-107 注册,则 Jsr107Service
不可用。但是添加此服务无论如何都无济于事。 JMX MBean 仅在通过 JSR-107 注册时可用。
所以最好的办法是更改 CacheManager
创建代码以使用与上面类似的内容。