0

我们正在编写Java 8 + Play 2应用程序。Gemfire 8.1 - 异常 - ServerOperationException - SerializationException - 一个ClassNotFoundException

我们是在从迁移6的GemFire到的GemFire 8

下面是我的GemFire客户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. 改变了客户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>

  • 除了这个之外,一切似乎是工作的罚款与客户的GemFire 6.6.2连接到服务器的GemFire 8.1.0

  • 我已将gemfire客户端从6.6.2更新到8.1.0,并对client-cache.xml文件进行了更改,以使XML符合gemfire 8.1.0客户端。以下是Gemfire 8.1.0客户端的client-cache.xml文件。但错误仍然存​​在。

  • <?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>

    可以在这方面帮助的人?

    +0

    任何人都可以帮忙看看这个吗? – user3616964

    回答

    0

    从例外情况来看,显然服务器试图反序列化models.article.Author的实例,但它无法在类路径中找到类定义。

    你在使用哪个data serialization mechanism ?,你有没有试过将包含类模型的jar添加到服务器的类路径中?

    干杯。

    +0

    类models.article.Author是部署的工件的一部分。它没有从外部jar文件中引用。此外还需要注意的是,当我使用相同的工件连接到Gemfire 6实例时,它工作得很好。 – user3616964

    +0

    Re:数据序列化机制,我不知道是否有我使用的任何特定的数据序列化机制。所有的类都是java的Serializable接口的子类型,因此我认为gemfire扩展了相同的序列化策略。我还没有在client-cache.xml文件中定义任何序列化/反序列化策略。因此可能是默认的序列化策略可能正在被使用。我会参考你提供的链接。 – user3616964

    相关问题