echache3 проблема с разбором XML

По какой-то причине я не могу добавить элемент истечения срока действия в XML-файл конфигурации ehcache3. без элемента истечения срока он работает нормально.

  <config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xmlns='http://www.ehcache.org/v3'
    xmlns:jsr107='http://www.ehcache.org/v3/jsr107'>

  <service>
    <jsr107:defaults>
      <jsr107:cache name="people" template="heap-cache"/>
    </jsr107:defaults>
  </service>

  <cache-template name="heap-cache">
    <listeners>
        <listener>
          <class>org.terracotta.ehcache.EventLogger</class>
          <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
          <event-ordering-mode>UNORDERED</event-ordering-mode>
          <events-to-fire-on>CREATED</events-to-fire-on>
          <events-to-fire-on>UPDATED</events-to-fire-on>
          <events-to-fire-on>EXPIRED</events-to-fire-on>
          <events-to-fire-on>REMOVED</events-to-fire-on>
          <events-to-fire-on>EVICTED</events-to-fire-on>
        </listener>
    </listeners>
     <expiry>
        <ttl unit="seconds">10</ttl>
    </expiry>
    <resources>
      <heap unit="entries">2000</heap>
      <offheap unit="MB">100</offheap> <!-- unit of measure is case sensitive! -->
    </resources>
  </cache-template>
</config>

сообщение об ошибке:

org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'expiry'. One of '{"http://www.ehcache.org/v3":heap, "http://www.ehcache.org/v3":resources, "http://www.ehcache.org/v3":heap-store-settings, "http://www.ehcache.org/v3":disk-store-settings, "http://www.ehcache.org/v3":service-configuration}' is expected.

но глядя на этот xsd: http://www.ehcache.org/schema/ehcache-core.xsd Я не вижу ничего плохого в теге, кто-нибудь знает?


person user3277841    schedule 24.05.2017    source источник


Ответы (3)


Ehcache 3 строго следит за XSD, поэтому элементы внутри cache или cache-template должны располагаться в следующем порядке:

  1. key-type
  2. value-type
  3. expiry
  4. eviction-advisor
  5. loader-writer
  6. listeners
  7. resources OR heap
  8. более ...

при этом все элементы являются необязательными, кроме размера (место 7), которое является необязательным в cache-template.

person Louis Jacomet    schedule 08.06.2017

Вы должны добавить xsi:schemaLocation и listeners конфигурации после expiry

Правильная форма вашей конфигурации ehcache приведена ниже:

<?xml version="1.0" encoding="UTF-8"?>
<config
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xmlns='http://www.ehcache.org/v3'
    xmlns:jsr107='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">

    <service>
        <jsr107:defaults>
            <jsr107:cache name="people" template="heap-cache"/>
        </jsr107:defaults>
    </service>

    <!--thread-pools> 
        <thread-pool alias="defaultDiskPool" min-size="1" max-size="3"/>
    </thread-pools-->

    <!--disk-store thread-pool="defaultDiskPool" /-->

    <cache-template name="heap-cache">
        <expiry>
            <ttl unit="seconds">10</ttl>
        </expiry>
        <listeners>
            <listener>
                <class>org.terracotta.ehcache.EventLogger</class>
                <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
                <event-ordering-mode>UNORDERED</event-ordering-mode>
                <events-to-fire-on>CREATED</events-to-fire-on>
                <events-to-fire-on>UPDATED</events-to-fire-on>
                <events-to-fire-on>EXPIRED</events-to-fire-on>
                <events-to-fire-on>REMOVED</events-to-fire-on>
                <events-to-fire-on>EVICTED</events-to-fire-on>
            </listener>
        </listeners>
        <resources>
            <heap unit="entries">2000</heap>
            <offheap unit="MB">100</offheap> <!-- unit of measure is case sensitive! -->
        </resources>

        <!--disk-store-settings thread-pool="defaultDiskPool" writer-concurrency="2" /-->

    </cache-template>
</config>
person nikli    schedule 14.08.2017

Это формат/пример, который работал у меня (я взял его из документы ehcache):

<ehcache:config xmlns:ehcache="http://www.ehcache.org/v3" xmlns:jcache="http://www.ehcache.org/v3/jsr107">
    <ehcache:cache alias="books">
        <ehcache:key-type>java.lang.String</ehcache:key-type>
        <ehcache:value-type>hello.Book</ehcache:value-type>
        <ehcache:resources>
            <ehcache:heap unit="MB">1</ehcache:heap>
            <!--ehcache:offheap unit="MB">10</ehcache:offheap-->
        </ehcache:resources>
    </ehcache:cache>
</ehcache:config>
person silver_mx    schedule 06.03.2019