使用最新版本的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,但是仍然无法解决此问题的任何更新吗?
最佳答案
确保您的StartupActions类如下所示:
@Start(order=100)
public void generateDummyDataWhenInTest() {
if (ninjaProperties.isDev()) {
try (Closeable closeable = ObjectifyService.begin()) {
ObjectifyProvider.setup();
} catch (IOException ex) {
Logger.getLogger(StartupActions.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我们早就应该在原型中解决该问题,但是在prio列表中并不算高。如果您可以推广PR,那就太好了:)