Gemfire 8.1 – Исключение – ServerOperationException – SerializationException – Исключение ClassNotFoundException

Мы пишем в приложении Java 8 + Play 2.

Мы находимся в процессе перехода с Gemfire 6 на Gemfire 8.

Ниже приведен мой файл gemfire client-cache.xml.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE client-cache PUBLIC
  "-//GemStone Systems, Inc.//GemFire Declarative Caching 6.6//EN"
  "http://www.gemstone.com/dtd/cache6_6.dtd">

<client-cache>
  <pool name="gemfire_qa_instance" subscription-enabled="true">
    <locator host="somehost1" port="42101" />
    <locator host="somehost2" port="42101" />
    <locator host="somehost3" port="42101" />
    <locator host="somehost4" port="42101" />
  </pool>

  <region name="customer" refid="CACHING_PROXY_HEAP_LRU">
    <region-attributes>
      <cache-listener>
        <class-name>ser.cac.CustomerListener</class-name>
      </cache-listener>
    </region-attributes>
  </region>

  <region name="s2o_customer" refid="CACHING_PROXY_HEAP_LRU">
    <region-attributes>
      <cache-listener>
        <class-name>ser.cac.CustomerListener</class-name>
      </cache-listener>
    </region-attributes>
  </region>

  <region name="ten_minute_ttl" refid="CACHING_PROXY_HEAP_LRU" />

  <region name="five_minute_ttl" refid="CACHING_PROXY_HEAP_LRU" />

  <region name="six_hour_idle" refid="CACHING_PROXY_HEAP_LRU"/>

  <region name="ten_minute_idle" refid="CACHING_PROXY_HEAP_LRU" />

  <resource-manager critical-heap-percentage="99" eviction-heap-percentage="90" />

</client-cache>

С этой конфигурацией у меня работает ряд вещей, связанных с gemfire, за исключением того, что я получаю исключение ниже в журналах.

2017-07-17 06:15:03,718 WARN application - status="0" action="CACHE_PUT_ALL" event_description="failure on cache 'region 'ten_minute_ttl.split_b37_PID0000_document_author'' for key '[757227, CMS_757227]' with message:  com.gemstone.gemfire.SerializationException: A ClassNotFoundException was thrown while trying to deserialize cached value." appId="MOBSVC_P2" request_id="5d313d75-e4ec-406b-a842-0a3ff5d9f1a4" version="1.0" locale="fr-CA" productId="JOB" level="WARN" event_status="success" event_severity="info" exception=com.gemstone.gemfire.cache.client.ServerOperationException: com.gemstone.gemfire.SerializationException: A ClassNotFoundException was thrown while trying to deserialize cached value.
     at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:560)
     at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:657)
     at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.handleException(OpExecutorImpl.java:495)
     at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeOnServer(OpExecutorImpl.java:336)
     at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeOn(OpExecutorImpl.java:303)
     at com.gemstone.gemfire.cache.client.internal.PoolImpl.executeOn(PoolImpl.java:659)
     at com.gemstone.gemfire.cache.client.internal.SingleHopOperationCallable.call(SingleHopOperationCallable.java:45)
     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     at java.lang.Thread.run(Thread.java:745)
 Caused by: com.gemstone.gemfire.SerializationException: A ClassNotFoundException was thrown while trying to deserialize cached value.
     at com.gemstone.gemfire.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1561)
     at com.gemstone.gemfire.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1546)
     at com.gemstone.gemfire.internal.cache.VMCachedDeserializable.getDeserializedForReading(VMCachedDeserializable.java:153)
     at com.gemstone.gemfire.cache.operations.PutAllOperationContext$UpdateOnlyMap.exportValue(PutAllOperationContext.java:171)
     at com.gemstone.gemfire.cache.operations.PutAllOperationContext$UpdateOnlyMap.access$300(PutAllOperationContext.java:144)
     at com.gemstone.gemfire.cache.operations.PutAllOperationContext$UpdateOnlyMap$ExportableEntry.getValue(PutAllOperationContext.java:256)
     at com.gemstone.gemfire.internal.cache.LocalRegion.verifyPutAllMap(LocalRegion.java:9695)
     at com.gemstone.gemfire.internal.cache.LocalRegion.basicPutAll(LocalRegion.java:9842)
     at com.gemstone.gemfire.internal.cache.LocalRegion.basicBridgePutAll(LocalRegion.java:9742)
     at com.gemstone.gemfire.internal.cache.tier.sockets.command.PutAll.cmdExecute(PutAll.java:206)
     at com.gemstone.gemfire.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:182)
     at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:789)
     at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:920)
     at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1128)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     at com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:577)
     ... 1 more
 Caused by: java.lang.ClassNotFoundException: models.article.Author
     at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:344)
     at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626)
     at com.gemstone.gemfire.internal.InternalDataSerializer$DSObjectInputStream.resolveClass(InternalDataSerializer.java:3563)
     at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
     at com.gemstone.gemfire.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2966)
     at com.gemstone.gemfire.DataSerializer.readObject(DataSerializer.java:3210)
     at com.gemstone.gemfire.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:110)
     at com.gemstone.gemfire.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:1554)
     ... 17 more
 2017-07-17 06:15:03,729 INFO application - status="0" event_description="produced 2 of the remaining 1 Author(s)" appId="MOBSVC_P2" request_id="5d313d75-e4ec-406b-a842-0a3ff5d9f1a4" version="1.0" locale="fr-CA" productId="JOB" level="DEFAULT" event_status="success" event_severity="info"

Теперь ниже приведены вещи, которые я пытался увидеть, работает ли это для устранения этого исключения.

  1. Изменена конфигурация файла client-cache.xml с CACHING_PROXY_HEAP_LRU на CACHING_PROXY и даже PROXY. Это не сработало, исключение все еще присутствует
  2. Также попытался добавить нижеприведенную вещь в файл client-cache.xml, но это тоже не сработало. Я сделал это для всех регионов.

<region name="five_minute_ttl" refid="CACHING_PROXY_HEAP_LRU">
        <region-attributes pool-name="gemfire_qa_instance">
            <eviction-attributes>
                <lru-heap-percentage action="local-destroy" />
            </eviction-attributes>
        </region-attributes>
    </region>

  1. За исключением этого исключения, все работает нормально с клиентом gemfire 6.6.2, подключающимся к серверу gemfire 8.1.0.

  2. Я обновил клиент gemfire с 6.6.2 до 8.1.0 и внес изменения в файл client-cache.xml, чтобы XML соответствовал клиенту gemfire 8.1.0. Ниже представлен мой файл client-cache.xml для клиента Gemfire 8.1.0. Но ошибка все равно присутствует.

    <?xml version="1.0"?>
    <client-cache xmlns="http://schema.pivotal.io/gemfire/cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.pivotal.io/gemfire/cache http://schema.pivotal.io/gemfire/cache/cache-8.1.xsd" version="8.1">
        <pool name="gemfire_qa_instance" subscription-enabled="true">
            <locator host="somehost1" port="42101" />
            <locator host="somehost2" port="42101" />
            <locator host="somehost3" port="42101" />
            <locator host="somehost4" port="42101" />
        </pool>
        <region name="customer" refid="CACHING_PROXY_HEAP_LRU">
            <region-attributes>
                <cache-listener>
                    <class-name>ser.cac.CustomerListener</class-name>
                </cache-listener>
            </region-attributes>
        </region>
        <region name="s2o_customer" refid="CACHING_PROXY_HEAP_LRU">
            <region-attributes>
                <cache-listener>
                    <class-name>ser.cac.CustomerListener</class-name>
                </cache-listener>
            </region-attributes>
        </region>
        <region name="ten_minute_ttl" refid="CACHING_PROXY_HEAP_LRU" />
        <region name="five_minute_ttl" refid="CACHING_PROXY_HEAP_LRU" />
        <region name="six_hour_idle" refid="CACHING_PROXY_HEAP_LRU" />
        <region name="ten_minute_idle" refid="CACHING_PROXY_HEAP_LRU" />
        <resource-manager critical-heap-percentage="99" eviction-heap-percentage="90" />
    </client-cache>

Может ли кто-нибудь помочь в этом отношении?


person user3616964    schedule 20.07.2017    source источник
comment
Может ли кто-нибудь помочь разобраться в этом?   -  person user3616964    schedule 20.07.2017


Ответы (1)


Из исключения видно, что сервер пытается десериализовать экземпляр models.article.Author, но не может найти определение класса в пути к классам.

Какой механизм сериализации данных вы используете? вы пытались добавить банку, содержащую модель класса, в путь к классам сервера?

Ваше здоровье.

person Juan Ramos    schedule 20.07.2017
comment
Класс models.article.Author является частью развернутого артефакта. На него не ссылается внешний файл jar. Кроме того, также важно отметить, что когда я подключаюсь к экземплярам Gemfire 6, используя тот же артефакт, он работает нормально. - person user3616964; 20.07.2017
comment
Re: механизм сериализации данных, я не знаю, есть ли какой-то конкретный механизм сериализации данных, который я использую. Все классы являются подтипами интерфейса Java Serializable, поэтому я предполагаю, что gemfire расширяет ту же стратегию сериализации. Я также не определил какую-либо стратегию сериализации/десериализации в файле client-cache.xml. Таким образом, может быть использована стратегия сериализации по умолчанию. Я дам ссылку, которую вы предоставили. - person user3616964; 20.07.2017