在过去的几个小时里,我开始在按键获取实体时遇到异常:
Caused by: java.lang.NullPointerException
at com.google.appengine.api.datastore.PropertyContainer.getProperties(PropertyContainer.java:48)
at com.googlecode.objectify.impl.Transmog.load(Transmog.java:336)
at com.googlecode.objectify.impl.ConcreteEntityMetadata.toObject(ConcreteEntityMetadata.java:203)
at com.googlecode.objectify.impl.AsyncObjectifyImpl$1.wrap(AsyncObjectifyImpl.java:82)
at com.googlecode.objectify.impl.AsyncObjectifyImpl$1.wrap(AsyncObjectifyImpl.java:69)
at com.google.appengine.api.utils.FutureWrapper.wrapAndCache(FutureWrapper.java:57)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:98)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
at com.googlecode.objectify.impl.ResultAdapter.get(ResultAdapter.java:29)
at com.googlecode.objectify.impl.ObjectifyImpl.get(ObjectifyImpl.java:63)
它们是间歇性的,大约有 50% 的时间被抛出。
更新
第二行代码抛出异常:
Objectify ofy = ObjectifyService.begin();
retVal = ofy.get(entityKey);
添加日志以查看 entityKey 的值....
更新 2
添加日志记录后,我可以确认密钥是非空的,并且当我使用密钥通过数据存储查看器获取实体时,它工作得很好。
更新 3
我可以确认这是与 Memcache 相关的问题。禁用对象化缓存后,我不再收到此错误。因此,要么这是 objectify 中的一个错误(不太可能是因为我没有更改/升级我们的 objectify 库),要么是 appengine memcache 服务发生了某种变化。