1

camel 2.18.1 と camel-ehcache コンポーネントを使用して単純なキャッシュを構築しています。キャッシュのセットアップは正常に機能していますが、ehcache 3.1.2 を使用して mbeans を登録するのが難しいことがわかりました (これはキャメル経由で取り込まれます)。

ドキュメントを読む - ManagementService を使用して mbeans を登録する標準的な方法が API で利用できなくなったため、3.x でサポートを有効にする方法が明確ではありません。

ドキュメンテーションは、純粋な 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>

4

1 に答える 1

2

ほとんどの場合、CacheManagerJSR-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作成コードを上記と同様のものを使用するように変更することをお勧めします。

于 2017-01-08T19:12:16.733 に答える