title: Fst反序列化失败 tags:
- 缓存
- fst
- 序列化
- 反序列化
- version categories: dubbo date: 2017-08-23 18:18:52
背景
关于序列化貌似很久前写过一篇关于Object的 由于某些原因一直没有写完(好吧,承认年纪大了,老是忘)
还有关于dubbo使用hessianDubbo序列化之hessian2
现在的情况是大部分情况下Java默认序列化都是系统中拖后腿的组件,因此dubbo默认就采用了hessian2 (有坑),sad 我们在dubbo中仍然采用了java默认的序列化方式
序列化框架性能对比(kryo、hessian、java、protostuff)
简介:
|
优点 |
缺点 |
Kryo |
速度快,序列化后体积小 |
跨语言支持较复杂 |
Hessian |
默认支持跨语言 |
较慢 |
Protostuff |
速度快,基于protobuf |
需静态编译 |
Protostuff-Runtime |
无需静态编译,但序列化前需预先传入schema |
不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值 |
Java |
使用方便,可序列化所有类 |
速度慢,占空间 |
几个常见的比较如上
我们在J2cache中选用了Fst作为序列化框架
问题
为啥一段时间类经常出现如下报错
2017-08-16 09:49:00,058 [ERROR] [RMI TCP Connection(9713)-114.55.25.15] n.o.j.r.RedisCache:109 Error occured when get data from redis2 cache
java.io.IOException: java.lang.RuntimeException: class not found CLASSNAME: loader:WebappClassLoader
context: /kzf6
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.URLClassLoader@183648b1
at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:243)
at net.oschina.j2cache.util.FSTSerializer.deserialize(FSTSerializer.java:50)
at net.oschina.j2cache.util.SerializationUtils.deserialize(SerializationUtils.java:66)
at net.oschina.j2cache.redis.RedisCache.get(RedisCache.java:82)
at net.oschina.j2cache.CacheManager.get(CacheManager.java:101)
at net.oschina.j2cache.RedisCacheChannel.get(RedisCacheChannel.java:78)
at org.nutz.j2cache.spring.SpringJ2Cache.get(SpringJ2Cache.java:29)
at org.springframework.cache.interceptor.CacheAspectSupport.inspectCacheables(CacheAspectSupport.java:294)
at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:199)
at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at com.air.tqb.spring.aop.ExceptionHandlerAspect.handleException(ExceptionHandlerAspect.java:48)
at sun.reflect.GeneratedMethodAccessor243.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
at org.springfram