【发布时间】:2023-03-14 14:04:01
【问题描述】:
使用最新版本的 Objectify (5.1),当我尝试访问 ofy() 方法时出现以下错误
您尚未启动 Objectify 上下文。您可能缺少 ObjectifyFilter。如果您不在 http 请求的上下文中运行,请参阅 ObjectifyService.run() 方法。
我从 appengine Web 应用程序运行它,相同的代码和配置在旧版本中运行良好
以下是我的配置,类似于objectify文档中提供的示例
web.xml
<filter>
<filter-name>ObjectifyFilter</filter-name>
<filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ObjectifyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
OfyService 类
public class OfyService {
static {
long start = System.currentTimeMillis();
factory().register(User.class);
log.info(" Entity Registration took : {} ms", (System.currentTimeMillis() - start));
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
public static ObjectifyFactory factory() {
return (ObjectifyFactory) ObjectifyService.factory();
}
}
但我确实定义了 ObjectifyFilter ,知道为什么会出现此错误吗?我该如何解决?
谢谢!
更新:
我已将 objectify 版本更新到 v5.1.5,但问题仍未解决,是否有任何更新?
【问题讨论】:
-
检查是否在启动时调用 ofy() 例如由于某种原因 - 超出了请求的范围 - 那么您还没有通过 ObjectifyFilter。
-
不,它没有在其他任何地方调用,我通过 OfyService 类严格调用 ofy(),仅供参考,相同的代码在 5.1 之前的版本中工作正常
-
检查以确保 1) 在安装过滤器之前您没有调用 ofy();比如说,也许来自链中更高的另一个过滤器,并且 2)您的类路径(mvn clean)上没有多个版本的 objectify。您应该能够查看堆栈跟踪并查看哪些代码试图在过滤器之外使用 objectify;如果安装了过滤器,您会在堆栈跟踪中看到它。发布它。
-
您的代码是否作为任务队列中的任务运行?我这样做了,所以我必须在之前添加
Closeable closeable = begin();和之后添加closeable.close();以避免出现错误。注意 begin() 来自于做import static com.googlecode.objectify.ObjectifyService.begin; -
我已经试过了,但没有运气,它仍然会抛出同样的错误
标签: google-app-engine objectify