使用最新版本的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,那就太好了:)

07-28 12:07