首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAE/J Memcache :不能用作键

GAE/J Memcache :不能用作键
EN

Stack Overflow用户
提问于 2012-12-16 16:39:48
回答 1查看 464关注 0票数 0

GAE doc说:

代码语言:javascript
复制
Keys and values can be of any Serializable type or class

我使用MultiKey作为密钥,但在更新我的应用程序后,它给了我异常:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Cannot use as a key: 'MultiKey[class com.xx.xx.xx, Key<?>(Domain("xxx.com")/AppUser(2001)), -1, {}, [-lastModified, ]]'
    at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.makePbKey(AsyncMemcacheServiceImpl.java:251)
    at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.doGet(AsyncMemcacheServiceImpl.java:294)
    at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.get(AsyncMemcacheServiceImpl.java:306)
    at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:49)

MultiKey来自apache commons-collections,它确实实现了Serializable

代码语言:javascript
复制
public class MultiKey
extends java.lang.Object
implements java.io.Serializable

有什么想法吗?

谢谢。

编辑,代码如下:

代码语言:javascript
复制
MemcacheService ms = MemcacheServiceFactory.getMemcacheService();
MultiKey key=new MultiKey(xx, xx, xx...);
ms.put( key, value );
...
EN

回答 1

Stack Overflow用户

发布于 2012-12-17 20:40:39

也许我明白了,下面是gae如何序列化键,它只是将对象写到字节数组中,所以如果键中包含的一个对象(在我的情况下是MultiKey)没有实现Serializable,这个方法将不起作用并抛出异常,这就是我的情况。

代码语言:javascript
复制
     } else if (value instanceof Serializable) {
          flags = Flag.OBJECT;
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ObjectOutputStream objOut = new ObjectOutputStream(baos);
          objOut.writeObject(value);
          objOut.close();
          bytes = baos.toByteArray();
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13899782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档